1.0 因为51有位操作,P0.1 = 0, 所以STM32也引入位操作,对位操作用起来比较简单。
1. 位段(位带)
Cortex™-M4F 存储器映射包括两个位段区域:
存储器的位段别名区域 和 存储器的位段区域。
位段别名区域的每一个字(4个字节)对应位段区域的一个位。
从 位段区域地址 到 位段别名区域地址 的转换公式:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
bit_word_addr:位段别名区域地址
bit_band_base:位段别名区域基地址
byte_offset:位段区域偏移地址
为什么要 x 32 × 4 :因为每四个地址代表一位, 每个寄存器有32位
SRAM 内存位段区域:
位段区域范围:0x20000000-0x200FFFFF
别名区域范围:0x22000000-0x23FFFFFF
使用别名区域对位段区域写操作,实际上执行了 读-修改-写 操作。
只映射数据,不映射指令。
外设 内存位段区域:
位段区域范围:0x40000000-0x400FFFFF
别名区域范围:0x42000000-0x43FFFFFF
注意:别名区域的字只有第 0 位才会影响位段区域的位的值,而高 31 位是没有影响的。
位段可以直观地对某一个位进行赋值和读取操作,如:
LED1 = 1;
LED1 = ~LED1;