定时器

时基单元

image

主要前三个

  • PSC-Prescaler-预分频器
  • CNT-Counter-计数器
  • ARR-Auto Reload Register-自动重装寄存器
  • RCR-Repetition Counter Register-重复计数器(高级定时器才有)

时钟来源

image

PSC 预分频器寄存器

作用:对输入的时钟频率 f_clk进行分频,降低计数器的计数速度,以适配更长的时间周期
分频系数:PSC+1 取值范围为[0,65535]

CNT 计数器寄存器

作用:时基单元的"心脏"。根据分频后的时钟频率不断自增(或自减),当前计数值就存放在这里
计数方向:向上,向下,中央对齐(先向上后向下)

ARR 自动重装载寄存器

作用:定义了计数的"终点"。在向上计数模式下,当 CNT 的值等于 ARR 的值时,就会发生一次溢出。
系数:定时周期=ARR+1(上/下计数)

工作流程 以向上计数模式为例)

  1. 初始化:CNT = 0。
  2. 计数:每来一个经过 PSC 分频后的时钟脉冲,CNT 的值就加 1。
  3. 比较与匹配:硬件不断将 CNT 的当前值与 ARR 中预设的目标值进行比较。
  4. 溢出事件:当 CNT == ARR 时,产生"更新事件"(Update Event)。
  5. 自动重装: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)

补充

  1. 只有高级定时器才有RCR
  2. PSC 和 ARR 存在影子寄存器

寄存器预加载=缓冲机制
image

为什么要使用预加载
情况一:在定时器运行的过程中突然改变ARR

  • 如果CNT计数的值大于ARR,只有等到计数到62235才会溢出清零
    image

情况二:使能ARR寄存器的预加载

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

image

image

  • 实线表示强制使能
  • 虚线表示默认关闭,可以手动开关(ARR的影子寄存器可手动开关)
posted @ 2026-04-13 20:23  Cerulean26  阅读(47)  评论(1)    收藏  举报