TIM 更新事件软件触发场景

TIM 更新事件软件触发场景 TIM更新事件的产生有两种情况一是由软件产生将TIMx_EGR寄存器的位UG置1产生更新事件后硬件会自动将UG位清零。二是由硬件产生满足以下条件即可计数器TIMx_CNT的值等于自动重装载寄存器影子寄存器的值。下面结合STM32实际开发场景分场景讲什么时候必须用软件触发更新事件写EGR.UG每个场景配实操例子很好理解。1. 改了PSC预分频、ARR自动重装想立刻生效TIM的PSC、ARR都带影子寄存器默认只有硬件溢出才会更新参数。不写UG改完ARR/PSC要等计数器走完当前周期新频率/周期才生效写UG软件更新参数马上载入影子波形瞬间切换。例子 电机调速、LED呼吸灯动态改频率不想等一整个周期延迟改完ARR立刻TIMx-EGR | TIM_EGR_UG;。2. 定时器刚初始化上电统一同步所有影子寄存器初始化TIM后直接开计数CNT、PSC、CCR影子寄存器状态不一致第一波波形容易异常。 初始化末尾手动触发一次UGCNT计数器清零PSC、ARR、所有CCR捕获比较寄存器同步更新 保证上电第一周期波形就正确无毛刺。3. 运行中修改PWM占空比立刻刷新波形CCR寄存器同样影子缓冲默认溢出才更新。 比如舵机、电机FOC、调光实时调节CCRTIM_SetCompare1(TIM1, new_ccr); TIM1-EGR | TIM_EGR_UG; // 立刻更新占空比不用等溢出4. 需要随时清零计数器CNT编码器、脉冲计数编码器模式、外部脉冲计数模式 想中途重置计数值不用等到计数溢出直接软件UGCNT马上清零。 适用限位归零、分段计数、每次采样复位计数。5. 主动触发更新中断不用等溢出开启更新中断UIE后置UG会直接进更新中断服务函数。 适用场景单次定时校准、采样复位按键触发一次定时任务不用等定时器走完周期调试时手动进中断测试逻辑。6. 主从定时器同步手动统一对齐多路定时器多TIM主从同步多路PWM、多路同步采样 正常靠主定时器硬件溢出同步若中途需要重新对齐所有定时器在主TIM软件触发UG同步信号一次性发给所有从定时器多路CNT同时清零同步。7. DMA搬运TIM参数同步刷新DMA缓冲区用DMA循环更新ARR/CCR做渐变灯光、阶梯波形时DMA更新完缓冲区后软件触发UG让硬件立刻加载DMA新值保证波形连贯无跳变。极简总结使用场景动态改频率、分频、PWM占空比需要立即生效定时器初始化收尾同步所有寄存器影子编码器/脉冲计数随时清零CNT手动触发一次更新中断执行单次任务多路定时器主从同步、重新对齐DMA配合定时器动态输出波形同步刷新。反过来如果不需要立刻更新参数、不需要中途清零计数器只靠定时器自然溢出工作就完全不用软件触发UG。