映射的作用
所谓映射,实际上是有另一种控制同一个位置功能的方式。就相当于两个方式操作对一个功能起到相同作用
位带(bitband)操作:直译出来的,根本意思是将原地址中每一个字节位都扩展成占用一个32bit位的地址(一个32位单片机数据长度)。相当于将地址扩大到了32倍。
作用:位带操作有什么优越性呢?最容易想到的就是通过 GPIO 的管脚来单独控制每个小灯的点亮与熄灭。另一方面,也对操作串行接口器件提供了很大的方便(典型如 74HC165,CD4094)。总之位带操作对于硬件 I/O 密集型的底层程序最有用处了。 总结来说就是不同对某个字节中的bit位修改时考虑其他位的变化
具体可免费下载:https://download.csdn.net/download/weixin_43794311/87315504?spm=1001.2014.3001.5503
M3中有两个可以使用bit-band的内存地址:
在 CM3中,有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB 范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字
计算过程
对于SRAM中的某个比特位,假如字节地址是A,位序号是n(0<=n<=7)则这个地址在别名区的地址是:
AliasAddr= 0x22000000+((A‐0x20000000)*8+n)*4 =0x22000000+ (A‐0x20000000)32 + n4
在单片机中数据的乘积可以通过左移位操作,每左移一位,数据增加一倍。所以这个计算过程在程序中
通过字节地址偏移左移5位
和字节中二进制位左移2位得到
理解:
需要注意的是地址的累加是以字节为单位,但将位扩充为stm32单片机的数据记录是32位的
第一种理解方式:8理解为将一个bit位扩充成一个字节,加上n是相对字节开始的偏移量,又因为这是32位的单片机一个 字里有4个字节,再把字节扩大成4个字节的字的内存地址。
第二种理解方式:将原始的字节首地址相对基地址偏移扩大32倍,剩下字节中的二进制位又看作是一个32位bit的地址偏移,则最终结果是32*初始字节地址+n*4