GPIOA_BASE是寄存器的基地址 和GPIOA有关的寄存器有很多,比如ODR、IDR。加12是计算出ODR的偏移。也就是GPIOA_ODR寄存器的地址
//GPIOA基地址=APB2基地址+偏移量 #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) //GPIOA将地址顺序分配给7个32位寄存器(结构体分配) #define GPIOA ((GPIO_TypeDef*)GPIOA_BASE) /将寄存器地址映射到7个32位寄存器,分别控制typedef struct{ IO unit32_t CRL; IO unit32_t CRH; IO unit32_t OD...
GPIOA是一个结构体指针,他指向一个地址为GPIOA_BASE的结构体GPIO_TypeDef。其中GPIOA_BASE就是控制这组IO口的寄存器组的基地址,GPIO_TypeDef是一个结构体,里面的成员变量对应着A组IO的相关控制寄存器,如:GPIOA->ODR;GPIOA->IDR;GPIOA->CRL;GPIOA->CRH等等就是控制A组IO口的寄存器,操作GPIO...
< GPIO alternate function registers, Address offset: 0x20-0x24 */}GPIO_TypeDef; 再查找GPIO_TypeDef找到: #defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)#defineGPIOB((GPIO_TypeDef*)GPIOB_BASE)#defineGPIOC((GPIO_TypeDef*)GPIOC_BASE)#defineGPIOD((GPIO_TypeDef*)GPIOD_BASE)#defineGPIOE((GPIO_TypeDef...
#define GPIOA ((GPIO_TypeDef*)GPIOA_BASE)//将寄存器地址映射到7个32位寄存器,分别控制 typedef...
51单片机的I/O口功能相对较少,配置也相对简单,而STM32的I/O口功能则非常强大,配置也稍微复杂一些。 STM32的I/O口简称GPIO(即General Purpose Input Output,通用输入/输出端口),其配置的过程大致如下: 1、…
stm32f4xx_gpio.c GPIO相关函数具体实现。 02. GPIO相关类型 GPIO相关的类型几乎都在stm32f4xx_gpio.h文件中。 GPIO的模式 /** * @brief GPIO Configuration Mode enumeration */ typedef enum { GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */ ...
/* 外设基地址 */#definePERIPH_BASE ((uint32_t)0x40000000)// 0x40000000是APB1的首地址,请看最前面的的那张图#defineAPB1PERIPH_BASE PERIPH_BASE//使用宏定义 用APB1PERIPH_BASE代替PERIPH_BASE//下面依次内推即可得到GPIOA_BASE~GPIOK_BASE/* 总线基地址 */#defineAPB2PERIPH_BASE (PERIPH_BASE + ...
在实际使用时,会有 GPIOA->CRL=0x0000 0000 这种写法,表示将 16 进制数 0 赋值给 GPIOA 的 CRL 寄存器所在的存储单元。而 GPIOA->CRL 就构造了一个寄存器映射。具体过程如下: #definePERIPH_BASE ((unit32_t)0x40000000) 这里属于存储器级别的映射,将外设基地址映射到 0x40000000 ,可以对应下图: ...