位带简介
位操作就是可以单独的对一个比特位读和写,类似与51中sbit定义的变量,stm32中通过访问位带别名区来实现位操作的功能
STM32中有两个地方实现了位带,一个是SRAM,一个是片上外设。

个人理解
(1)位带本质上是一块地址区(例如每一位地址位对应一个寄存器)映射到另一片地址区(实现每一位地址位对应一个寄存器中的一位),该区域就叫做位带别名区,将每一位膨胀成一个32位的字。
(2)位带区的4个字节对应实际寄存器或内存区的一个位,虽然变大到4个字节,但实际上只有最低位有效(代表0或1)
映射过程
要设置0x2000 0000这个字节的第二个位bit2为1,使用位带操作的步骤有:
1、将1写入位 带别名区对应的映射地址(即0x22000008,因为1bit对应4个byte);
2、将0x2000 0000的值 读取到内部的缓冲区(这一步骤是内核完成的,属于原子操作,不需要用户操作);
3、将bit2置1,再把值写 回到0x2000 0000(属于原子操作,不需要用户操作)。
看一段代码
其中A是我们想要操作的位所在的字节地址(原地址),0x40000000是外设位带区的起始地址,0x42000000时外设位带别名区的起始地址。
一个字节有8位,每一位膨胀后是4个字节,所以84;
n(0<=n<=7)是位序号,所以*4;
对于位带区,只是理解,用的并不普遍。。。
Reference:
https://www.cnblogs.com/leo0621/p/9494290.html
野火教程