1. 程式人生 > >STM32F429 >> 1. LED_RGB

STM32F429 >> 1. LED_RGB

本文程式碼在GitHub 上有:
https://github.com/Waao666/STM32-1.-LED_RGB
在這裡插入圖片描述

stm32f4xx.h

//外設暫存器
#define PERIPH_BASE         ((unsigned int)0x40000000)
	
//匯流排暫存器
#define APB1PERIPH_BASE     PERIPH_BASE
#define APB2PERIPH_BASE     (PERIPH_BASE + 0x00010000)
#define AHB1PERIPH_BASE     (PERIPH_BASE + 0x00020000)
#define AHB2PERIPH_BASE     (PERIPH_BASE + 0x10000000)
//GPIO 暫存器 #define GPIOA_BASE AHB1PERIPH_BASE #define GPIOB_BASE (AHB1PERIPH_BASE + 0x00000400) #define GPIOC_BASE (AHB1PERIPH_BASE + 0x00000800) #define GPIOD_BASE (AHB1PERIPH_BASE + 0x00000C00) #define GPIOE_BASE (AHB1PERIPH_BASE + 0x00001000) #define GPIOF_BASE (AHB1PERIPH_BASE + 0x00001400)
#define GPIOG_BASE (AHB1PERIPH_BASE + 0x00001800) #define GPIOH_BASE (AHB1PERIPH_BASE + 0x00001C00) #define GPIOI_BASE (AHB1PERIPH_BASE + 0x00002000) //復位和時鐘控制 #define RCC_BASE (AHB1PERIPH_BASE + 0x00003800) //外設時鐘使能暫存器 #define RCC_AHB1ENR *((unsigned int *)(RCC_BASE + 0X30)) //GPIO 模組暫存器
#define GPIOH_MODER *(unsigned int*)GPIOH_BASE #define GPIOH_OTYPER *(unsigned int*)(GPIOH_BASE + 0x04) #define GPIOH_OSPEEDR *(unsigned int*)(GPIOH_BASE + 0x08) #define GPIOH_PUPDR *(unsigned int*)(GPIOH_BASE + 0x0C) #define GPIOH_IDR *(unsigned int*)(GPIOH_BASE + 0x10) #define GPIOH_ODR *(unsigned int*)(GPIOH_BASE + 0x14) //埠置位/復位暫存器 #define GPIOH_BSRR *(unsigned int*)(GPIOH_BASE + 0x18) #define GPIOH_LCKR *(unsigned int*)(GPIOH_BASE + 0x1C) #define GPIOH_AFRL *(unsigned int*)(GPIOH_BASE + 0x20) #define GPIOH_AFRH *(unsigned int*)(GPIOH_BASE + 0x20)

main.c

#include "stm32f4xx.h" 

int main(void)
{
	RCC_AHB1ENR |= (1<<7);
	
	GPIOH_MODER  &= ~( 0x03<< (2*10));	
	/*PH10 MODER10 = 01b 輸出模式*/
	GPIOH_MODER |= (1<<2*10);
	
	/*GPIOH OTYPER10清空*/
	GPIOH_OTYPER &= ~(1<<1*10);
	/*PH10 OTYPER10 = 0b 推輓模式*/
	GPIOH_OTYPER |= (0<<1*10);
	
	/*GPIOH OSPEEDR10清空*/
	GPIOH_OSPEEDR &= ~(0x03<<2*10);
	/*PH10 OSPEEDR10 = 0b 速率2MHz*/
	GPIOH_OSPEEDR |= (0<<2*10);
	
	/*GPIOH PUPDR10清空*/
	GPIOH_PUPDR &= ~(0x03<<2*10);
	/*PH10 PUPDR10 = 01b 上拉模式*/
	GPIOH_PUPDR |= (1<<2*10);
	
	/*PH10 BSRR暫存器的 BR10置1,使引腳輸出低電平*/
	GPIOH_BSRR |= (1<<16<<10);
	
	while(1);
}

void SystemInit(void)
{
}