元还对应一个地址,我们要操作这些单元,也就是通过对应的地址来访问。由于
STM32 外设非常多而且复杂,如果每操作一个外设就要写一大串对应的存储单元
地址,显然是非常麻烦的而且还极容易出错。因此我们就把每个单元的功能作为
名,给这个内存取一个别名,这个别名就是我们经常说的寄存器。
然后通过C
语言指针来操作这些寄存器即可。那什么是寄存器映射呢?给已经分配好地址的
有特定功能的内存单元取别名的过程就叫寄存器映射。
比方说我们找到0x4001 1010 这个单元地址,那么可以通过查阅相关资料了
解到此单元具有GPIOC 端口置位/复位功能(至于此地址如何查找这个功能我们
后面会具体介绍)。因此为了更好区分此单元的功能和方便后续的程序开发,可
以给这个单元取一个别名GPIOC_BSRR,那么这个GPIOC_BSRR 就是寄存器,并且
这个寄存器地址就是0x4001 1010。这个过程就是寄存器映射。
如何访问STM32 寄存器内容:
我们知道寄存器就是一些有特定功能的内存单元,所以要访问STM32 寄存器
也就是操作STM32 的内存单元,根据C 语言指针的特点,可以使用指针来操作
STM32 的内存单元。假如我们要让STM32 的GPIOC 的第0 管脚输出低电平,我们
怎么使用C 语言来处理?
片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外
设, APB1 挂载低速外设,APB2 和AHB 挂载高速外设。相应总线的最低地址我
们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。
APB1 总线的地址最低,因此片上外设就从这这个地址开始,也称外设基地址。


外设基地址
每条总线上都会挂接着很多的,
XXX 外设的首个地址即最低地址就是XXX 外设的基地址,也称作XXX 边界地
址。有关STM32F1xx 外设的具体边界地址可以参考《STM32F1xx 中文参考手
册》P28 页,里面有详细的介绍。这里我们就以GPIO 外设来讲解外设基地址。
其他的外设也是同样分析

外设GPIOx 都是挂接在APB2 总线上,属于高速的外
设,而APB2 总线的基地址是0x4001 0000,故GPIOA 的相对APB2 总线的地址偏
移是800。
(3)外设寄存器地址
XXX 内。这里我们以GPIO 外
设为例,GPIO 是通用输入输出端口的简称,可以通过软件来控制其输入和输出。
GPIO 有很多个寄存器,每一个都有特定的功能。每个寄存器为32bit,占四个
字节,这些寄存器都是按顺序依次排列在外设的基地址上。寄存器的位置都以相
普中STM32F1xx 开发攻略
39
对该外设基地址的偏移地址来描述。这里我们以GPIOC 端口为例,来说明GPIO
都有哪些寄存器,
这里我们就以GPIOC_BSRR 寄存器来教大家如何看《STM32F1xx 中文参考手
册》内寄存器的说明。大家如果想要了解更多的寄存器内容,可以参考《STM32F1xx
中文参考手册》相应寄存器外设部分。
首先我们需要打开STM32 中文参考手册,然后找到GPIO 外设章节,里面会
有一个GPIO 寄存器,只要找到我们所要查找的寄存器即可
A.红色框4 表示的我们所查找寄存器的名称,寄存器GPIOx_BSRR 内的x 表
示的是STM32GPIO 端口,范围是A-E,也就是说在GPIOA、GPIOB 等端口中都有
这个寄存器。
B.红色框5 表示的是相对GPIOx 地址的偏移值,比如现在我们使用的是
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66178-2.html
做点实事
还是忍