关于stm32内存操作

来源:互联网 发布:ssd主控测试软件 编辑:程序博客网 时间:2024/06/16 05:24

1、想操作SRAMBit Band区地址为 0x2000 0018字节的第2

计算别名区对应子地址:0x2200 0000 +18*32+(2*4) = 0x2200 0248

所以,0x2200 0248地址的操作,就是对0x2000 0018字节的第2位进行操作;

如图是跟Bit Banding 有关系的存储器结构:

STM32存储器 <wbr>— <wbr><2>STM32存储器知识的相关应用(IAP、Bit <wbr>Banding)

 

STM32有两个Bit Band区域,分别是:

0x2000 0000——0x2010 0000:该地址是STM32SRAM1MB的地址区域;

0x4000 0000——0x4010 0000:该地址是STM32Peripherals1MB的地址区域;

 

另外,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_base32MB别名区首地址;

byte_offset1MB位段区偏移量,即为bit-band 区中包含目标位的字节的编号;

bit_number:位段中目标位的位位置(0-7);

举个例子(通过别名区访问地址):

1、想操作SRAMBit Band区地址为 0x2000 0018字节的第2

计算别名区对应子地址:0x2200 0000 +18*32+(2*4) = 0x2200 0248

所以,0x2200 0248地址的操作,就是对0x2000 0018字节的第2位进行操作;

 

2、想操作PeripheralsBit Band区地址为0x4000 0021字节的第7

(可能是一个功能寄存器);

计算别名区对应子地址:0x4200 0000+21*32+7*4=0x4200 02BC

所以,对0x4200 02BC的操作,就是对0x4000 0021字节的第7位进行操作;

 

对比使用Bit Banding功能和直接访问Bit Band区域,如图:

STM32存储器 <wbr>— <wbr><2>STM32存储器知识的相关应用(IAP、Bit <wbr>Banding)