时基单元
STM32 定时器的时基单元是定时器的核心模块,用于 生成精确的时间间隔 或 控制事件频率。其功能包括:
- 计时:测量时间间隔或产生固定周期的中断。
- PWM 生成:通过输出比较通道产生脉宽调制信号。
- 输入捕获:测量外部信号的频率或占空比。
时基单元由时钟来源、开关、PSC预分频器、CNT计数器、ARR自动重装寄存器、RCR重复计数器。其中他们的作用如下
模块 | 作用 |
---|---|
预分频器(PSC) | 将定时器时钟(CKTim)分频,得到计数器时钟 |
自动重载寄存器(ARR) | 设定计数器自动重置的值(计数值达到 ARR 后触发溢出事件)。 |
计数器寄(CNT) | 当前计数值(从 0 开始递增,直到等于 ARR 后重置)。 |
重复计数器(RCR) | 主要用于控制定时器操作的重复次数 |
预分频器(PSC)
PSC的作用
降低时钟频率,定时器的输入时钟(CKTim)通常较高(如 72MHz),直接使用会导致计数器溢出过快。预分频器将输入时钟分频,得到更低的计数器时钟,从而延长计数周期。灵活调整定时精度,通过修改 PSC 值,可以在 大范围 内调整定时器的分辨率。
如何分频
-
分频公式:
- CKTim: 定时器输入时钟频率(由 RCC 配置决定)。
- PSC: 预分频器值(取值范围 0 ~ 65535)。
-
举例:
- 若系统时钟为 72MHz,设置
PSC = 719
,则计数器时钟为:
- 若系统时钟为 72MHz,设置
计数器(CNT)
CNT 计数器的作用
-
实时计数,按照预设的时钟频率递增或递减,记录时间或事件的数量。
-
触发溢出事件,当计数器达到 ARR 的值(向上计数模式)或 0(向下计数模式)时,触发溢出中断(Update Interrupt)。
-
支持多种模式,可配置为向上计数(Count Up)、向下计数(Count Down)或中心对齐(Center-Aligned)模式。
模式 | 工作流程 |
---|---|
向上计数 | CNT 从 0 开始递增,直到达到 ARR 后重置为 0 ,触发溢出事件。 |
向下计数 | CNT 从 ARR 开始递减,直到达到 0 后重置为 ARR ,触发溢出事件。 |
中心对齐 | CNT 先递增到 ARR ,再递减到 1 (奇数)或 0 (偶数),触发两次溢出事件后重置。 |
自动重装寄存器(ARR)
ARR 的作用
-
定义计数器上限,计数器(CNT)从
0
开始递增,当达到 ARR 的值后触发溢出事件,并自动重置为0
,开始新一轮计数。 -
生成固定周期的中断,每次计数器溢出时触发中断(如
TIMx_IRQHandler()
),可用于实时任务调度或事件检测。 -
PWM 信号的基础,在 PWM 模式中,ARR 决定信号的周期,输出比较寄存器(OCx)决定占空比。
工作原理
计数器模式与 ARR 的关系
计数器模式 | ARR 的行为 |
---|---|
向上计数 | 计数器从 0 增加到 ARR ,触发溢出后重置为 0 。 |
向下计数 | 计数器从 ARR 减少到 0 ,触发溢出后重置为 ARR 。 |
中心对齐 | 计数器从 0 增加到 ARR ,再减少到 1 ,触发两次溢出后重置为 0 (取决于奇偶性)。 |
2. 溢出事件的处理
- 中断触发:溢出事件会触发
TIMx_IRQHandler()
,需在中断服务程序中处理(如更新状态、触发动作)。 - DMA 请求:可配置为通过 DMA 传输数据,避免中断延迟。
重复寄存器(RCR)
RCR 的功能
-
周期性重复触发事件,当定时器完成一个完整的周期(由
ARR
寄存器设置的自动重载值决定)后,会根据RCR
的值重复执行操作(如中断、PWM 输出等),直到达到指定的重复次数。 -
扩展定时器的操作模式,在单次定时器周期内,支持多轮计数。
RCR 的工作原理
配置流程
- 步骤 1:设置定时器的基本参数(预分频器、计数模式、时钟源等)。
- 步骤 2:通过
RCR
寄存器设定重复次数。 - 步骤 3:启动定时器,开始计数。
操作流程
- 第一轮:计数器从
0
开始递增,达到ARR
后触发事件(如中断),并重置为0
。 - 后续轮次:每触发一次事件后,重复次数减 1,直到
RCR
清零。 - 结束条件:当
RCR
清零后,定时器停止重复操作,进入“空闲”状态。