STM32的位段、位带别名区
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32的Bit Banding
Bit Banding功能是相对于以往能够进行bit操作的单片机而言的。
通过Bit Banding功能可以像51单片机的bit操作一样。
MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 ; 就是这样把P1口的第三个脚(BIT2)置0或置1了。
而现在STM32的位段、位带别名区就为了实现这样的功能。
只不过他是为需要操作的地址(1字节)的每一个位(共8位)起个别名,分别对应别名区的一个字(word)。
也就是别名区的大小是Bit Band区的32倍。
这样,对32MB的别名区地址的操作,就是对相应Bit Band区的位的操作。
注意:别名字的位[31:1]在 bit-band位上不起作用。
写入 0x01与写入0xFF的效果相同。
写入0x00与写入0x0E的效果相同。
如图是跟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);
注意:别名字的位[31:1]在 bit-band位上不起作用。
写入 0x01与写入0xFF的效果相同。
写入0x00与写入0x0E的效果相同。
举个例子(通过别名区访问地址):
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位进行操作;。