STM32寄存器地址名称映射关系
首先外设基地址是个常量地址,APB2的地址就比外设基地址偏移了0x10000,所以APB2的地址是0x40010000;
因为 GPIO 都是挂载在 APB2 总线 之上,所以它的基地址是由 APB2 总线的基地址+GPIOA 在 APB2 总线上的偏移地址决定 的。同理依次类推,我们便可以算出 GPIOA 基地址了。GPIOA 基地址为 0x40010000 + 0x0800 = 0x40010800
最后GPIOA_BASE地址强制转换为了GPIO_TypeDef结构体类型,所以GPIOA便指向了该结构体第一个寄存器CRL的首地址上,因为结构体存储的成员的地址是连续的,所以知道首地址,再根据每个成员的偏移量,便能推算出每个寄存器的地址了
形象理解:就好比盖楼,地面(基地址)为0米,第二层比地面高4米,这4米就是相对地面来说的偏移量,则第二层的高度(地址)是0 + 4 = 4,第三层比第二层高3米,这3米是相对第二层来说的偏移量,因为第二层高度(地址)已经是4,则第三层高度(地址)是4 +3 = 7