找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32寄存器地址的计算

[复制链接]
跳转到指定楼层
楼主
ID:72519 发表于 2015-1-22 23:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个朋友@Hawker 在搞飞行器,需要使用到DMA方式进行传输数据,其中DMA串口传输初始化的代码中需要计算外设的地址,如USART2的DR寄存器,芯片手册给出了一个比较通用的计算表达式,如图1
图1

     但是这个公式用起来比较麻烦,通过翻阅《STM32中文参考手册》和《Cortex-M3技术参考手册》,总结出如下最简单的计算方法,只需要看《STM32中文参考手册》,现在翻到该手册的第19页表1 寄存器组起始地址


图2



    图中红色方框里的即为表1中第二列对应外设的首地址。
    注意:外设包含若干寄存器,寄存器属于某个外设,这个关系不要搞错了!
    现在翻到第20页,找到USART2的首地址,如图3


图3

     由图3可以看出外设USART2的起始地址为0x4000 4400(红色方框圈起的部分),那么表1中的bit_band_base + (byte_offset*32)就等于0x4000 4400。现在单击后面的超链接“参见24.6.8“可以看到图4所示的表158 USART寄存器列表及其复位值

图4


    可以看出,每个寄存器占用4个字节(其中灰色部分被保留了未被使用),所以在图1中,bit_number要乘以4,但是表158已经把偏移量算出来了,直接加即可,那么USART2的DR寄存器的地址即为0x4000 4400 + 0x04 = 0x40004404。如果要计算USART2的SR寄存器地址,同理为0x4000 4400 + 0x00 = 0x4000 4400。
    再举一例,如果我要知道USART1的DR寄存器的地址,那么首先找到外设起始地址0x4001 3800,再加上偏移0x04,结果为0x4001 3804,很多参考书都是抄来抄去,没有讲这些东西怎么算出来的,这篇文章应该很详细地给大家解释了寄存器地址的计算最简单方法,如果觉得好,可以借鉴一下。
    此教程仅写给新手看,高手请绕道!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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