标签:实现 封装 为我 png 控制 偏移地址 结构体 空间 配置
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++强大的指针,只需要直接调用库函数就可以实现相应的功能。
标签:实现 封装 为我 png 控制 偏移地址 结构体 空间 配置
原文地址:http://www.cnblogs.com/always-chang/p/6098639.html