目录
一.寄存器
1.寄存器以及寄存器映射原理
寄存器是中央处理器内的组成部分,寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址,不同的数据会存放在不同的寄存器。
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给物理存储器分配逻辑地址的过程就称为存储器映射,通过这些逻辑地址就可以访问到相应的存储器的物理存储单元。为了增加系统的灵活性,系统中有部分地址可以同时出现在不同的地址上,这就叫做存储器重映射。
寄存器映射是在存储器映射的基础上进行的。以STM32为例,操作硬件本质上就是操作寄存器。在存储器片上外设区域,四字节为一个单元,每个单元对应不同的功能。当我们控制这些单元时就可以驱动外设工作,我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元。但若每次都是通过这种方式访问地址,不好记忆且易出错。这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名实质上就是寄存器名字。给已分配好地址(通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射。
2.GPIO寄存器
STM32给不同的寄存器分配了不同的地址,可以在《STM32中文参考手册》中查找地址。查询GPIOX端口的起始地址
由于STM32的每个IO都需要4个位来配置,所以一个32位的寄存器最大只能配置8个IO(32位的单片机的寄存器就是32位的)。STM32中,用端口配置低寄存器(GPIOx_CRL)来配置引脚Px0-Px7, 用端口配置高寄存器(GPIOx_CRH)来配置引脚Px8-Px15。
本次实验将会用到GPIOA,GPIOB,GPIOC。 因为stm32最小板仅有ABC三个引脚系列。0-7位为CRL,8-15位为CRH,相对基址的偏移即从基址开始多少十六进制后是此寄存器地址的开始,不同的寄存器有不同的地址,需要去访问该地址,就需要查表。
寄存器名称 | 寄存器地址 | 相对 GPIOA 基址的偏移 |
---|---|---|
GPIOA_CRL | 0x4001 0800 | 0x00 |
GPIOA_CRH | 0x4001 0804 | 0x04 |
GPIOA_ODR | 0x4001080C | 0x0C |
寄存器名称 | 寄存器地址 | 相对 GPIOB 基址的偏移 |
---|---|---|
GPIOB_CRL | 0x4001 0C00 | 0x00 |
GPIOB_CRH | 0x4001 0C04 | 0x04 |
GPIOB_ODR | 0x40010C0C | 0x0C |