目录
一、什么是寄存器以及什么是寄存器映射
在存储器 Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共 32bit, 每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到 每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元,如果每次都是通 过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的 不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个 给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
二、查找地址
如果我们需要找到某个寄存器的地址,那应该如何查找呢?我们在初学者时,通常采用查阅《STM32F10xxx参考手册》的方式。例如我们要查找GPIOA中的P1端口,通常有三步。
第一步 找到GPIOB的基地址
首先我们找到GPIOA所有端口所在的地址范围
我们看到GPIOA相关的寄存器所在的范围为0x4001 0800到 0x4001 0BFF
第二步 找到端口输入寄存器的地址偏移
继续查阅资料发现端口输入寄存器的地址偏移为0x08,也就是0x4001 0800 + 8=0x4001 0808
第三步 找到具体端口号
继续查表,发现GPIOA的p1口位于从右往左数的第二个
然后我们就可以直接访问这个地址
unsigned int *pGPIOA_IDR = (unsigned i