初见STM32(一)补充:什么是寄存器?
这是STM32学习笔记的第二篇
在经过学习51的一段时间之后,现在要开始接触更为高级的32位单片机——STM32。作为拿到板子后的初见学习笔记,这几篇会倾向于从51过渡到32,且会啰嗦一点。
开始学习之前,你手上需要准备好以下三样物品:STM32原理图、STM32的中文参考手册以及一份从网上下载好的开发指南。
我使用的板子是STM32F103ZET6正点原子精英版
在第一篇学习笔记中还有以前学习51单片机的过程中,我们已经学习过通过操作寄存器来实现某种操作。事实上不管是什么单片机,我们在写程序控制他们的时候,本质上都是在操作寄存器。51也好,32也好,我们都会提到寄存器,在32中更是存在大量的寄存器映射(即之前使用的宏定义)。那么,寄存器到底是什么?寄存器映射又是什么呢?让我们带着问题开始学习。
一、寄存器
在单片机的存储器中,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过C语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
二、寄存器映射
下面我们之间去工程文件中学习,到底什么是寄存器映射。
打开一个STM32工程,打开头文件stm32f10x.h,可以看到下面也是大量的宏定义,
按下组合键Ctrl+F,进入搜索,输入GPIOE,选择Match Case 和Match Whole Word,点击Find Next,定位到GPIOE的宏定义:
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
#