一、
STM32中,32位作为一个内存单元,每个寄存器相邻32位。
4位二进制数可以表示一个十六进制数,如1111代表F,8位二进制数为一个字节,即1个字节由8位二进制数组成。因此每个寄存器相邻4个字节,8个十六进制数,32位二进制数。
可以从数据手册中看出,每个寄存器的地址范围都是用8个十六进制数表示。
二、
那么我们如何使用地址去控制每一个寄存器呢?
这就需要用到地址偏移,因为每个寄存器相邻4个字节,我们可以从参考手册中看出,两个相邻寄存器的地址偏移相差0x04(0Ch=0x0C),这里的地址偏移数中,每一位代表一个字节
三、
为什么说每一位代表一个字节?
首先,以GPIO中的寄存器为例,每个端口都有很多个寄存器
从下图参考手册中存储器映射表中可以看出,端口B的地址是0X4001 0C00-0X4001 0FFF,比如我要操控上图的GPIOx_ODR寄存器,那么我就需要操控地址0X4001 0C0C,其中0C是地址偏移
在端口B的地区范围中,每个寄存器相邻四个字节,而地址偏移也相差4,所以说每一位代表一个字节,每偏移4字节,就到了下一个寄存器
四、
如何使用地址映射
以上面所属的控制GPIOx_ODR寄存器为例,首先在地址映射表中查看到所需要控制的端口地址,比如我要控制端口B,那么先写下0X4001 0C,后面两位再去查看具体的寄存器地址偏移,将后两位补上,如上图所示的GPIOx_ODR的地址偏移为0C,因次端口B的GPIOx_ODR寄存器的地址为0X4001 0C0C,
让其全部输出1,则为 *(unsigned int *)0X4001 0C0C = 0XFFFF