STM32位带操作的原理

传统操作:修改一个32位寄存器内值的方法是,从寄存器中取出值,修改这个值,然后再放回这个寄存器中。

位带操作:对于位带区的每一位,在位带别名区都有一个32位的地址对应,当需要修改值时,直接对该地址所指向的值进行修改。

位带区:支持位带操作的地址区,也就是说此区域可以给它起一个地址别名。

位带别名:即为上述映射到的32位地址(别名)所在区域,对这个别名地址的访问最终作用到位带区的访问上。

支持位带操作的两个内存区域是:

    0X2000_0000-0X200F_FFFF(SRAM区中的最低1MB)

    0X4000_0000-0X400F_FFFF(片上外设区中的最低1MB)

位带区与位带别名区之间的映射关系见下图

位带区到位带别名区的地址映射公式:

在编程中,我们会把以上公式合并成一个公式

    (addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF<<5)+(bitnum<<2)) 

    (addr & 0xF0000000)目的是取出addr的最高位(根据映射表可知最高位非2即4),通过最高位来区分是SRAM还是片上外设,再加上0x02000000即复原了SRAM/外设位带别名区的起始地址,(addr & 0x00FFFFFF<<5)实际上是实现原式中的(A-0x20000000)*8*4,(bitnum<<2)等同于n*4.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值