码迷,mamicode.com
首页 > 其他好文 > 详细

从库函数解析STM32地址映射

时间:2016-11-24 18:22:21      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:实现   封装   为我   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++强大的指针,只需要直接调用库函数就可以实现相应的功能。

 

从库函数解析STM32地址映射

标签:实现   封装   为我   png   控制   偏移地址   结构体   空间   配置   

原文地址:http://www.cnblogs.com/always-chang/p/6098639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!