什么是寄存器
我们编程的时候用的最多的是寄存器,那么什么叫寄存器呢?
在存储器Block2这块区域,设计的是片上外设,它们以4个字节为1个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每一个单元的起始地址,然后通过C语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名。
这个别名就是我们常说的寄存器。
一句话总结:寄存器时单片机内部一种特殊的存储器,可以实现对单片机各个功能的控制。
寄存器映射
这个给已经分配好地址的有特定功能的存储器单元取别名的过程就叫做寄存器映射。
寄存器映射在ST提供的头文件stm32f10x.h中已经通过预编译的形式完全映射好了,以后如果再操作某个特定外设的时候,就不用直接操作地址,直接操作对应的寄存器名就可以了。
比如PA这组IO端口的映射:
// 外设基址
#define PERIPH_BASE ((uint32_t)0x40000000)
// APB2外设的基址
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
// GPIOA 外设的基址
#define GPIOA_BASE (APB2PERIPH_BASE + d)
// 做了类型转换,地址仍然是GPIOA 外设的基址
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)