探索STM32地址与偏移

疑问:一直对STM32地址存储有点疑问,比如STM32是一个32位的MCU,那是不是表示一个地址可以存储32位,这样理解看起来好像是没有问题,但是实际你查看手册,你会发现按着这个理解方式,似乎有点不对。

这里我们以stm32F103x系列为例,首先我们来看手册。探索STM32地址与偏移探索STM32地址与偏移探索STM32地址与偏移

通过GPIO端的地址,我们可以发现相邻两个寄存器之间偏移0x04,而且一个寄存器存储32位,如果真是一个地址存储32位话,那偏移应该是0x01,所以我们得出结论在计算机中一个地址,代表一个字节(1Byte),32位刚好表示4个字节,刚好偏移0x04

我们再来看看源码是怎么定义的。

探索STM32地址与偏移

通过查看手册我们发现GPIO口都是挂在APB2总线上。

探索STM32地址与偏移探索STM32地址与偏移

探索STM32地址与偏移

可以看到把GPIOA_BASE地址定义成一个结构体指针,我们再看看GPIO_TypeDef结构体。

探索STM32地址与偏移

这样我们就很好理解了,源码把GPIO端的基地址定义成结构体指针,并把各寄存器定义成变量,变量的地址就按着结构体首地址自动偏移。我们操作结构体中的变量,相当于直接操作对应地址的寄存器。