stm32 定时器(计数模式)

⚙️ ​一、计数模式总览

模式宏 计数行为 更新事件(UEV)触发位置 中断频率 典型应用场景
TIM_CounterMode_Up 从 ​0 递增​ 至自动重载值(ARR),复位后重新计数 计数器溢出时 (CNT=ARR) 1次/周期 通用定时、PWM生成
TIM_CounterMode_Down 从 ​ARR 递减​ 至0,复位后从ARR重新计数 计数器下溢时 (CNT=0) 1次/周期 递减计数任务
TIM_CounterMode_CenterAligned1 先向上计数至ARR → 向下计数至0 仅向下计数到0时触发 1次/周期 电机控制(对称PWM)
TIM_CounterMode_CenterAligned2 先向下计数至0 → 向上计数至ARR 仅向上计数到ARR时触发 1次/周期 特定时序同步
TIM_CounterMode_CenterAligned3 双向计数:向上至ARR → 向下至0​(与模式1同) 向上到ARR和向下到0时均触发 2次/周期 高频中断应用(如编码器)

🔧 ​二、各模式详解

1. ​向上计数模式 ​ (TIM_CounterMode_Up)
  • 工作原理 :计数器从0开始递增,达到ARR值后产生溢出事件,复位至0重新计数。

  • 波形特性 :PWM信号占空比从0%线性增至100%,适合生成非对称波形

  • 配置代码

    cpp 复制代码
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
2. ​向下计数模式 ​ (TIM_CounterMode_Down)
  • 工作原理 :计数器从ARR值开始递减,达到0后产生下溢事件,复位至ARR重新计数。
  • 应用场景:倒计时任务或需递减计数的控制逻辑。
3. ​中央对齐模式​(三种子模式)

三种模式均通过计数器双向计数实现中央对齐,但更新事件触发策略不同:

  • 模式1 (CenterAligned1)​

    • 触发策略 :仅当计数器向下计数到0时触发更新事件。

    • PWM对称性 :PWM波形以ARR/2为中心对称,适合生成互补对称PWM(如电机FOC控制)。

    • 代码配置

      cpp 复制代码
      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;
  • 模式2 (CenterAligned2)​

    • 触发策略 :仅当计数器向上计数到ARR时触发更新事件。
    • 适用性:需在计数峰值同步外部设备的场景(如特定传感器时序)。
  • 模式3 (CenterAligned3)​

    • 触发策略 :计数器向上到ARR向下到0时均触发更新事件。
    • 中断频率:周期内触发两次中断,适合高频事件响应(如编码器信号处理)。

⚡ ​三、关键差异与选型建议

  1. 更新事件触发策略

    • 模式1/2:单次触发(降低CPU中断负载)
    • 模式3:双次触发(提高事件响应实时性)
  2. PWM波形特性

    • 中央对齐模式 :所有子模式均生成对称PWM,减少电机控制中的谐波失真。
    • 向上/向下模式 :生成边沿对齐PWM,适用于LED调光等简单场景。
  3. 性能与资源消耗

    • 模式3中断频繁:需注意高中断频率下的CPU负载(可通过DMA缓解)。
    • 模式1/2优化:单事件触发更适用于低功耗场景。

⚠️ ​四、配置注意事项

  1. 定时器类型限制

    • 基本定时器(TIM6/TIM7)仅支持向上计数,通用/高级定时器支持全部模式。
  2. 高级控制寄存器

    • 中央对齐模式需配置TIMx_CR1.CMS[1:0]位域,例如模式1对应CMS=01
  3. 中断冲突规避

    • 模式3的双事件中断可能引发资源竞争,需使用重装载影子寄存器(ARPE=1)确保参数同步安全。

💎 ​总结

  • 通用场景 :优先选择向上计数(简单定时)或中央对齐模式1(电机控制)。
  • 高频响应中央对齐模式3适合编码器等高频信号采集,但需评估中断负载。
  • 低功耗需求向下计数中央对齐模式2可减少事件触发次数。

配置时需严格匹配硬件特性(如定时器类型)和任务需求(如波形对称性、中断频率),结合预分频器(PSC)与自动重载值(ARR)精细调整时序精度。