暂存器顾名思义就是可以存放资料的地方,那也就是记忆体的一种罗? 记忆体Block2这块区域用来设计单晶片上的外设,他们以4个word为一个单元,共32位(STM32的资料汇流排宽度为32位,因此理当以32位做为一个暂存器),每一个单元对应到不同的功能,只要我们控制这些单元就可以改变外设的行为。
这时就显现C语言的好处了,我们可以直接利用指标的方式操作这些单元,但如果每次都是用指标的方式,不仅程序码难以阅读,每次写程序的时候还要去翻阅资料,看某一个单元的地址为何。因此我们会以功能来命名这些记忆体,这个别名就是我们常说的暂存器,而将已配好地址、有特定功能的记忆体取别名的过程就叫做暂存器映射
https://github.com/Meta-Team/Datasheets/blob/master/STM32F4/STM32F4xx%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C.pdf
这里可以下载《STM32F4xx中文参考手册》,里面详细介绍了STM32F4的暂存器每个bit代表什麽以及使用方式。
单晶片上外设分为4条总线,根据外设速度不同,不同汇流排挂载着不同的外设,APB挂载低速设备,AHB挂载高速设备,每一个汇流排的最低地址被称为该汇流排的基地址。
汇流排上挂载着各种外设,这些外设也有自己的地址范围,特定外设的首个地址称为XX外设机地址,这些在《STM32F4xx中文参考手册》都有详细的介绍,这里我们以GPIO来讲解。
外设名称 | 外设基地址 | 相对AHB1汇流排的地址偏移 |
---|---|---|
GPIOA | 0x4002 0000 | 0x0 |
GPIOB | 0x4002 0400 | 0x0000 0400 |
GPIOC | 0x4002 0800 | 0x0000 0800 |
GPIOD | 0x4002 0C00 | 0x0000 0C00 |
GPIOE | 0x4002 1000 | 0x0000 1000 |
GPIOF | 0x4002 1400 | 0x0000 1400 |
GPIOG | 0x4002 1800 | 0x0000 1800 |
GPIOH | 0x4002 1C00 | 0x0000 1C00 |
从上表我们可以看到GPIOA的基地址相对於AHB1汇流排的地址偏移为0,也就是AHB1的第一个外设就是GPIOA
处於XX外设的地址范围内的就是该外设的暂存器。以GPIO外设为例,GPIO有很多暂存器,每一个都有特定的功能。每个暂存器为32位,在该外设的基地址上按照顺序排列,暂存器的位置都以相对於外设基地址的偏移来描述。这里以GPIOH端口为例,来了解GPIO实际上到底有那些暂存器。
暂存器名称 | 暂存器地址 | 相对GPIOH基地址的偏移 |
---|---|---|
GPIOH_MODER | 0x4002 1C00 | 0x00 |
GPIOH_OTYPER | 0x4002 1C04 | 0x04 |
GPIOH_OSPEEDR | 0x4002 1C08 | 0x08 |
GPIOH_PUPDR | 0x4002 1C0C | 0x0C |
GPIOH_IDR | 0x4002 1C10 | 0x10 |
GPIOH_ODR | 0x4002 1C14 | 0x14 |
GPIOH_BSRR | 0x4002 1C18 | 0x18 |
GPIOH_LCKR | 0x4002 1C1C | 0x1C |
GPIOH_AFRL | 0x4002 1C20 | 0x20 |
GPIOH_AFRH | 0x4002 1C24 | 0x24 |
有关各个暂存器的说明都可以在《STM32F4xx中文参考手册》中暂存的部分找到,这里我们以GPIO端口置位/复位暂存器为例(GPIOx_BSRR),介绍如何理解暂存器的说明。
上面有关暂存器的内容,只是要帮助大家更好的理解C语言如何控制读写暂存器,我们实际上在使用单晶片的时候当然不会直接去操纵那些暂存器,那样太没有效率了,明天我们会介绍STM32是如何使用C语言来对暂存器做封装。
<<: ASP.NET MVC 从入门到放弃(Day19)-MVC模型(Model)介绍
>>: [区块链&DAPP介绍 Day16] Solidity 教学 - libraries
案例说明及适用场景 基本上适用於所有需要活动举办的相关场域 整合网站及线上购物模组,用於广告行销及线...
Internet金钥交换(IKE)是IPsec的关键体系结构组件。 它用於执行相互身份验证以及建立...
看程序码说故事 (Stub-2) 前景提要,昨天提到开发者要开发 Email 通知系统,於是他就利用...
我们终於完成了主机的弱点扫描 接下来,各系统的管理员该做些什麽呢? 弱点扫描有以下限制 仅能扫描已知...
Div 区块式HTML中最最最最最常也是一定会用到的 Div 简单来讲就是一个区域。 假设我们的整个...