从库函数解析STM32地址映射

Posted Acelit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从库函数解析STM32地址映射相关的知识,希望对你有一定的参考价值。

  STM32的存储映射是靠基地址和地址偏移实现的。

  32位的M3有4GB的寻址空间,其中用于片上外设的有512MB,基地址为0x40000000。

 

  M3各外设基地址,包括片上外设、片上静态RAM和FLASH。特别要注意的是所有外设都是挂载在总线上,有AHP、APB1、APB2总线。从各外设基地址定义就可以很清楚知道该外设是挂在哪个总线上。

 

 

 

  与参考手册对照起来看更清楚:

 

 

  以GPIO为例,如何实现GPIOA寄存器控制?

  首先找到GPIOA对应的基地址,GPIOA是挂在APB2总线上的,相对于地址总线偏移量为0x800,计算后与参考手册地址一致。

 

 

 

 

 

  再来看看GPIO寄存器结构体:

 

  7个32位寄存器及其对应偏移量可以查阅参考手册:

 

  如想获得GPIOA_CRH(端口配置高寄存器)的地址,只需要将抵地址偏移量0x04加上GPIOA的基地址0x40010800就好了。这种通过寄存器地址直接配置寄存器各个位的方法很容易出错,还好ST公司为我们封装了库,库其实就是将各个寄存器地址通过分解为基地址和偏移地址,用宏来定义地址,从字面意义就可以知道该外设/寄存器地址了。用结构体来定义各个外设寄存器,使用C/C++强大的指针,只需要直接调用库函数就可以实现相应的功能。

 

以上是关于从库函数解析STM32地址映射的主要内容,如果未能解决你的问题,请参考以下文章

STM32 内存分配解析及变量的存储位置

STM32 外设地址映射管理硬件基地址和偏移地址

2. STM32 存储器映射和寄存器映射

STM32存储器映射-寄存器基地址-偏移

干货|STM32寄存器版的基础知识—内存映射

stm32 学习困惑