STM32的 位寻址(地址映射)

STM32的寄存器的分布情况:


STM32的 <wbr>位寻址(地址映射)

STM32的 <wbr>位寻址(地址映射)

 

STM比较特色的就是 位带操作:

如下解释:

(寄存器的地址是固定好的,我们想要进行位操作的话 就需要用到地址映射,将位带区寄存器的 各位 映射到 位带别名区的地址。)


首先需要清楚的是32位地址的编码方式,是以8为一个字节累加而成的,如下图所示,一个32位的字符串包含了4个

字节,所以从第二行开始的地址为0x2000 0004.


STM32的 <wbr>位寻址(地址映射)

STM32的 <wbr>位寻址(地址映射)

 

通过 位带别名区 的 4个字节(32个位)用来存放 位带区的 位地址。

如将 0x2200 0000 映射到 0x2000 000 的第一个位!

 

具体的映射C程序是这样的:

 

STM32的 <wbr>位寻址(地址映射)

 

算法公式:

(addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)

addr & 0xF0000000: 取0x4001 0808    的最高位 得到 0x4000 0000

+0x2000000  :   得到 0x4200 0000

+((addr &0xFFFFF)<<5): 将低5位提取出来 乘以 32.  映射到位带别名区,这是这个字节映射到别名区的的起始位置,

然后根据这个字节的第几位(目标位)进行操作,因为每一位用一个32位地址字符串表示,即占用4个字节,故

bitnum<<2 :对第2位 进行加操作。 乘以4. 映射到目标位。

 

得到其位带别名区的地址

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值