1、想操作SRAM中Bit Band区地址为 0x2000 0018字节的第2位
计算别名区对应子地址:0x2200 0000 +(18*32)+(2*4) = 0x2200 0248
所以,对0x2200 0248地址的操作,就是对0x2000 0018字节的第2位进行操作;
如图是跟Bit Banding 有关系的存储器结构:
STM32有两个Bit Band区域,分别是:
0x2000 0000——0x2010 0000:该地址是STM32的SRAM低1MB的地址区域;
0x4000 0000——0x4010 0000:该地址是STM32的Peripherals低1MB的地址区域;
另外,STM32还有两个对应的Bit Band区域的别名区,分别是:
0x2200 0000——0x23FF FFFF:共32MB的空间,对应相应1MB的每一个位;
0x4200 0000——0x43FF FFFF:共32MB的空间,对应相应1MB的每一个位;
接下来的问题是如何确定Bit Band区字节的位所对应的那个别名区的字(word)。Bit Band区和别名区是一一对应的,具体的公式为:
bit_word_addr=bit_band_base+ (byte_offset×32) + (bit_number×4);
bit_band_base:32MB别名区首地址;
byte_offset:1MB位段区偏移量,即为bit-band 区中包含目标位的字节的编号;
bit_number:位段中目标位的位位置(0-7);
举个例子(通过别名区访问地址):
1、想操作SRAM中Bit Band区地址为 0x2000 0018字节的第2位
计算别名区对应子地址:0x2200 0000 +(18*32)+(2*4) = 0x2200 0248
所以,对0x2200 0248地址的操作,就是对0x2000 0018字节的第2位进行操作;
2、想操作Peripherals中Bit Band区地址为0x4000 0021字节的第7位
(可能是一个功能寄存器);
计算别名区对应子地址:0x4200 0000+(21*32)+(7*4)=0x4200 02BC
所以,对0x4200 02BC的操作,就是对0x4000 0021字节的第7位进行操作;
对比使用Bit Banding功能和直接访问Bit Band区域,如图: