⚙️ 一、计数模式总览
模式宏 | 计数行为 | 更新事件(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%,适合生成非对称波形。
-
配置代码 :
cppTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
2. 向下计数模式 (TIM_CounterMode_Down
)
- 工作原理 :计数器从ARR值开始递减,达到0后产生下溢事件,复位至ARR重新计数。
- 应用场景:倒计时任务或需递减计数的控制逻辑。
3. 中央对齐模式(三种子模式)
三种模式均通过计数器双向计数实现中央对齐,但更新事件触发策略不同:
-
模式1 (CenterAligned1)
-
触发策略 :仅当计数器向下计数到0时触发更新事件。
-
PWM对称性 :PWM波形以ARR/2为中心对称,适合生成互补对称PWM(如电机FOC控制)。
-
代码配置 :
cppTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;
-
-
模式2 (CenterAligned2)
- 触发策略 :仅当计数器向上计数到ARR时触发更新事件。
- 适用性:需在计数峰值同步外部设备的场景(如特定传感器时序)。
-
模式3 (CenterAligned3)
- 触发策略 :计数器向上到ARR 和向下到0时均触发更新事件。
- 中断频率:周期内触发两次中断,适合高频事件响应(如编码器信号处理)。
⚡ 三、关键差异与选型建议
-
更新事件触发策略
- 模式1/2:单次触发(降低CPU中断负载)
- 模式3:双次触发(提高事件响应实时性)
-
PWM波形特性
- 中央对齐模式 :所有子模式均生成对称PWM,减少电机控制中的谐波失真。
- 向上/向下模式 :生成边沿对齐PWM,适用于LED调光等简单场景。
-
性能与资源消耗
- 模式3中断频繁:需注意高中断频率下的CPU负载(可通过DMA缓解)。
- 模式1/2优化:单事件触发更适用于低功耗场景。
⚠️ 四、配置注意事项
-
定时器类型限制
- 基本定时器(TIM6/TIM7)仅支持向上计数,通用/高级定时器支持全部模式。
-
高级控制寄存器
- 中央对齐模式需配置
TIMx_CR1.CMS[1:0]
位域,例如模式1对应CMS=01
。
- 中央对齐模式需配置
-
中断冲突规避
- 模式3的双事件中断可能引发资源竞争,需使用重装载影子寄存器(ARPE=1)确保参数同步安全。
💎 总结
- 通用场景 :优先选择
向上计数
(简单定时)或中央对齐模式1
(电机控制)。 - 高频响应 :
中央对齐模式3
适合编码器等高频信号采集,但需评估中断负载。 - 低功耗需求 :
向下计数
或中央对齐模式2
可减少事件触发次数。
配置时需严格匹配硬件特性(如定时器类型)和任务需求(如波形对称性、中断频率),结合预分频器(PSC)与自动重载值(ARR)精细调整时序精度。