zoukankan      html  css  js  c++  java
  • 从库函数解析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++强大的指针,只需要直接调用库函数就可以实现相应的功能。

  • 相关阅读:
    DSAPI+DS控件库 Windows7风格控件演示
    DSAPI 键盘鼠标钩子
    DSAPI WIN7磨砂+窗体投影组合
    DSAPI 字符串和文件转Md5字符串
    DS控件库 DS标签的另类用法之折叠展开
    DSAPI 网卡流量监控
    DS控件库 Win7链接列表框效果1:右侧箭头
    DS控件库 DSLed控件呈现滚动字幕效果
    DS控件库 DS按钮多种样式
    DSAPI 简单WebAPI实现
  • 原文地址:https://www.cnblogs.com/always-chang/p/6098639.html
Copyright © 2011-2022 走看看