定时器
时基单元

主要前三个
- PSC-Prescaler-预分频器
- CNT-Counter-计数器
- ARR-Auto Reload Register-自动重装寄存器
- RCR-Repetition Counter Register-重复计数器(高级定时器才有)
时钟来源

PSC 预分频器寄存器
作用:对输入的时钟频率 f_clk进行分频,降低计数器的计数速度,以适配更长的时间周期
分频系数:PSC+1 取值范围为[0,65535]
CNT 计数器寄存器
作用:时基单元的"心脏"。根据分频后的时钟频率不断自增(或自减),当前计数值就存放在这里
计数方向:向上,向下,中央对齐(先向上后向下)
ARR 自动重装载寄存器
作用:定义了计数的"终点"。在向上计数模式下,当 CNT 的值等于 ARR 的值时,就会发生一次溢出。
系数:定时周期=ARR+1(上/下计数)
工作流程 以向上计数模式为例)
- 初始化:CNT = 0。
- 计数:每来一个经过 PSC 分频后的时钟脉冲,CNT 的值就加 1。
- 比较与匹配:硬件不断将 CNT 的当前值与 ARR 中预设的目标值进行比较。
- 溢出事件:当 CNT == ARR 时,产生"更新事件"(Update Event)。
- 自动重装:CNT 瞬间被清零(或重装为初始值),并重新开始新一轮计数。
RCR 重复计数器寄存器
特殊性:它只存在于高级定时器(如 TIM1、TIM8)中,通用定时器和基本定时器没有这个寄存器
作用:RCR 用于定义在产生更新事件(Update Event, UEV)之前需要经历多少次计数器溢出
- 如果没有 RCR(或 RCR = 0):每次计数器溢出(上溢或下溢)都会立即产生一个更新事件
- 如果设置了 RCR = N:计数器需要溢出 N+1 次后,才会产生一次更新事件
系数:RCR+1 取值范围为[0,255]
工作原理 - 每次计数器溢出时,RCR 的值会递减 1。
- 当 RCR 递减到 0 时,产生更新事件,同时 RCR 被重新加载为预设值(即重复计数周期结束)
- 更新事件可以触发中断、DMA 请求,或者影响 PWM 波形的占空比/周期更新时机。
定时时间公式
T_overflow = (ARR + 1) * (PSC + 1) / TIMx_CLK
PSC:预分频器,降低输入时钟频率
ARR:自动重载值,决定计数周期
TIMx_CLK:定时器输入时钟(通常为系统时钟,如72MHz)
补充
- 只有高级定时器才有RCR
- PSC 和 ARR 存在影子寄存器
寄存器预加载=缓冲机制

为什么要使用预加载
情况一:在定时器运行的过程中突然改变ARR
- 如果CNT计数的值大于ARR,只有等到计数到62235才会溢出清零

情况二:使能ARR寄存器的预加载
- 预分频寄存器会等到CNT计数与ARR相同,重新从0开始计数时,才会把新预分频值设置给影子寄存器
- 简而言之:设置的新预分频值需要等到下一个计数周期生效



- 实线表示强制使能
- 虚线表示默认关闭,可以手动开关(ARR的影子寄存器可手动开关)

浙公网安备 33010602011771号