CM3手册里面有讲到位带操作的公式:
(1)对 SRAM 位带区的某个比特,记它所在字节的地址为 A,位序号为 n(0<=n<=7),则该比特在别名区的地址为:
AliasAdd=0x22000000+ (A‐0x20000000)x4x8 + nx4
(2)对于片上外设位带区的某个比特,记它所在字节的地址为 A,位序号为 n(0<=n<=7),则该比特在别名区的地址为:
AliasAddr=0x42000000+ (A-0x40000000)x4x8+ nx4
—————————————
STM32的寄存器为32位的,但是地址是以字节为单位增加的,每个寄存器就占了4个地址编号,字节是内存最基本的寻址单位。
比如寄存器首地址0x40000000,下个寄存器就是0x40000004,增加了32位(4个字节),即4个地址编号。
所以一个寄存器,占用4个地址编号,然后每个地址编号对应的byte单位分为了8bit。所以主偏移量就是Ax4x8。
接下来说说次偏移量,因为每bit扩展为一个地址。扩展之后位带区的偏移量每增加一个bit,别名区地址就偏移4,所以有nx4
简单理解,一个胀成8个,8个每个胀成4个,次偏移偏移一个变成偏移4个。