目录
- 一、 按行为特性分类
- 二、 按功能角色分类(更宏观的角度)
- 总结与注意事项
在32位单片机(尤其是基于ARM Cortex-M系列内核的)中,寄存器的种类可以按照其“行为模式”和“功能”来进行分类。
以下是32位单片机(以ARM Cortex-M为例)中常见的寄存器种类。
一、 按行为特性分类
这正是嵌入式编程中最关键的概念,决定了软件如何与硬件交互。
-
状态寄存器 (Status Register) - SR
- 行为:硬件置位,软件清零。
- 描述:用于反映外设或内核的当前状态。软件通常只能读取其值,或通过向特定位写
1
来清除(复位)该标志位,写0
无效。这是最常见的类型。 - 示例:
- USART状态寄存器 (USART_SR) 中的
TXE
(发送寄存器空)、RXNE
(接收寄存器非空)、ORE
(溢出错误) 等标志。 - 定时器状态寄存器 (TIMx_SR) 中的
UIF
(更新中断标志)、CC1IF
(捕获/比较1中断标志)。 - GPIO输入数据寄存器 (IDR):可视为一种状态寄存器,反映引脚当前电平,软件只能读。
- USART状态寄存器 (USART_SR) 中的
-
控制寄存器 (Control Register) - CR
- 行为:软件读写。
- 描述:用于配置外设或内核的工作模式、使能功能等。软件可以随时读写,硬件通常只读取其配置并据此工作,一般不会修改它的值(除非极特殊情况,如休眠时硬件自动清除某些使能位)。
- 示例:
- USART控制寄存器1 (USART_CR1) 中的
UE
(USART使能)、TE
(发送使能)、RE
(接收使能)。 - 定时器控制寄存器1 (TIMx_CR1) 中的
CEN
(计数器使能)。
- USART控制寄存器1 (USART_CR1) 中的
-
数据寄存器 (Data Register) - DR
- 行为:软件写入/硬件读出 或 硬件写入/软件读出。
- 描述:作为数据交换的缓冲区。
- 示例:
- USART数据寄存器 (USART_DR):软件向它写数据,USART外设会自动读取并发送;USART接收到的数据也会自动放入该寄存器,软件读取它。
- ADC数据寄存器 (ADC_DR):硬件(ADC模块)完成转换后,将结果数据写入该寄存器,软件再从中读取。
-
动作触发器 (Action Trigger) / 命令寄存器 (Command Register)
- 行为:软件置位,硬件自动复位。
- 描述:您对这个的描述非常到位!软件向某位写
1
会触发一个特定的硬件动作(如开始转换、清除某种状态),一旦硬件识别到这个命令并开始执行,该位会自动清零。这可以避免软件需要先写1再写0来清除的麻烦。 - 示例:
- ADC控制寄存器 (ADC_CR2) 中的
SWSTART
位 (软件启动常规转换):写1启动转换,转换开始后硬件自动将其清零。 - Flash控制寄存器 (FLASH_CR) 中的
STRT
位 (开始擦除):写1开始擦除,操作开始后硬件清零。
- ADC控制寄存器 (ADC_CR2) 中的
二、 按功能角色分类(更宏观的角度)
在芯片手册中,寄存器通常按所属外设模块和功能来组织。
-
内核寄存器 (Core Registers)
- 存在于CPU内核中,由ARM架构定义。
- 通用寄存器 (R0-R12):用于数据处理。
- 栈指针寄存器 (SP/R13):指向当前栈顶。
- 链接寄存器 (LR/R14):存储函数返回地址。
- 程序计数器 (PC/R15):指向下一条要执行的指令。
- 程序状态寄存器 (xPSR):包含ALU标志(N, Z, C, V)、中断状态等。
- 中断/异常屏蔽寄存器 (PRIMASK, FAULTMASK, BASEPRI):控制中断的使能。
- 控制寄存器 (CONTROL):控制处理器模式(线程/Handler)和栈指针选择(MSP/PSP)。
-
外设寄存器 (Peripheral Registers)
- 挂载在系统总线上,用于控制所有片内外设。
- 控制寄存器 (CRx):配置工作模式,如定时器的计数模式、PWM模式。
- 数据寄存器 (DRx):输入输出数据,如GPIO输出、ADC结果、SPI/I2C数据。
- 状态寄存器 (SR):查看外设状态,如数据是否就绪、是否发生错误。
- 中断寄存器
- 中断使能寄存器 (IER / IMR):软件设置,控制允许哪些中断源产生请求。
- 中断标志寄存器 (IFR / ISR / SR中的标志位):硬件置位,当中断事件发生时置位。软件通过写1或特定值来清除。
- 中断优先级寄存器 (IPR):软件设置,配置每个中断源的优先级。
- DMA寄存器:配置DMA传输的源地址、目标地址、数据量等。
-
系统控制寄存器 (System Control Registers)
- 控制芯片的整体行为。
- 时钟控制寄存器 (RCC):软件设置,配置系统时钟源、PLL、各外设时钟的使能等。这是单片机初始化的核心。
- 电源控制寄存器 (PWR):软件设置,控制睡眠、停机、待机等低功耗模式。
- 系统配置控制器 (SYSCFG):软件设置,配置引脚重映射、中断线分配等。
总结与注意事项
寄存器类型 | 主要操作者 | 常见行为 | 示例 |
---|---|---|---|
状态寄存器 (SR) | 硬件 | 硬件置位,软件清零 | USART_SR, TIMx_SR |
控制寄存器 (CR) | 软件 | 软件读写,硬件只读 | USART_CR1, TIMx_CR1 |
数据寄存器 (DR) | 软件/硬件 | 数据双向流通 | USART_DR, ADC_DR |
命令寄存器 | 软件触发 | 软件写1,硬件执行后自动清零 | ADC_CR2.SWSTART |
中断使能寄存器 | 软件 | 软件读写 | USART_CR1.RXNEIE |
中断标志寄存器 | 硬件 | 硬件置位,软件清零 | EXTI->PR, USART_SR.RXNE |
重要提示:
- “写1清零” (Write-1-to-clear):在清除状态或中断标志时,绝大多数寄存器采用这种机制。这是为了安全,避免软件误操作覆盖其他位。
- “读-修改-写” (Read-Modify-Write):在修改控制寄存器某一位而不影响其他位时,必须采用此操作。即先读取整个寄存器,用逻辑运算(
&
和|
)修改目标位,再写回整个寄存器。现代的芯片库函数(如HAL/LL库)已经帮我们处理了这些细节。
理解这些寄存器的行为差异,是编写稳定、高效嵌入式程序的基础。