找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2240|回复: 0
打印 上一主题 下一主题
收起左侧

MDK中寄存器地址名称映射分析(开发指南4.6节)

[复制链接]
跳转到指定楼层
楼主
ID:387610 发表于 2018-8-18 15:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 新乡吴彦祖 于 2018-8-18 15:57 编辑

MDK中寄存器地址名称映射分析(开发指南4.6节)
对MCU,一切底层配置,最终都是配置寄存器
库函数是对底层寄存器封装了一遍,位操作也是最终操作的寄存器
51中映射的方法:sfr P0=0x80;//P0映射到地址0x80 ,以后只需要直接写P0=0x00即代表往寄存器地址0x80所代表的寄存器赋值,0x00相当于给P0的每一位IO口都赋值0。这样的好处是不需要记住每个寄存器的地址,需要用对应的寄存器时直接写寄存器相应的名称即可。最常用的P0、P1、P2、P3,四组输入输出(I/O)寄存器,以及TH1, TH0, TL1,TL0,SCON,TCON,TMOD,SBUF等等
相比于51,32的寄存器要多得多,32采用了结构体来表示相应的寄存器
GPIOA->ODR=0x00000000。32中每组IO口都有7个寄存器控制这与51稍有不同。每组IO对应一个基地址,寄存器根据基地址进行偏移取的地址,GPIOA的基地址又是根据APB2的地址来偏移,同理得到其他地址。其中外设基地址是一个比较高的地址,他被定义为一个常量,作为参考。再回头说结构体,我们打开stm32f10x.h 定位到GPIO_TypeDef 定义处:GPIOA被强制转换为结构体指针,就意味着接下来的地址代表了结构体中的七个寄存器。由于每个寄存器是32位,每个地址设置八位(类似于51),并且结构体存储的成员他们的地址是连续的。所以GPIOA下的寄存器相对应的寄存器之间的地址都是相差了4,例如我们访问ODR寄存器就是访问了ODR相对于GPI_的基地址的偏差的四个地址。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表