对于微处理器,一切的底层配置,最终都是配置寄存器
库函数的本质就是对寄存器的封装
映射文件:
stm32f10x.h
根据Datasheet,STM32F1系列的GPIO共有7个寄存器,对应的结构体定义如下:
/**
* @brief General Purpose I/O
*/
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
如下图所示为Datasheet中的Memory Mapping
下图为上图中的一小部分,是GPIO的基地址
/*!< Peripheral base address in the alias region */
强制类型转换为GPIO_Typedef类型的结构体
把地址强制转换为结构体指针类型
从GPIOA这个地址开始,4字节32位数据是CRL,后面4字节32位数据是CRH,后面....
因此,当我们用GPIOA->CRL时,其本质上就是在访问对应地址的寄存器
base就是给你偏移用的一个东西