LAT1183
Local Application Tips
LAT1183 – Rev 1.0 – Jan. 2023
高精度定时器中 single-shot 计数模式不工作
关键字:高精度定时器, single-shot 计数模式
1. 问题提出
客户使用 STM32G474 的高精度定时器,基于 CubeMX 进行外设配置与代码生成,将某个子
定时器的计数方式设置为 retriggerable single shot 方式,发现该子定时器无 PWM 输出,在调试
模式下发现该子定时器的计数器一直为 0,即计数器一直没有启动,但如果将计数方式修改为
continuous 模式,其他保持不变,定时器工作正常。
2. 问题分析
检查客户提供的 CubeMx 配置文件,客户使能了 Master Timer 与 Timer B,Master Timer 的
比较器事件 2 触发 Timer B 复位与运行,并配置了 Timer B 的 PWM 输出,使用该工程文件直接生
成代码,并添加高精度定时器计数使能与输出使能函数,如下:
进入调试模式观察,发现 Master Timer 正常计数,但是 Timer B 的计数器一直保持 0,按照
客户的描述,将 Timer B 的计数方式修改为“continous”后,Timer B 恢复正常计数。对比 Timer
B 在“retriggerable single shot”与“continous”两种工作模式下的相关寄存器的值进行对比,发
现除了计数模式不同之外,其他所有的状态都相同。
莫非真是“retriggerable single shot”存在问题?这明显不可能,此前多次使用过该模式并没
有发现问题,于是将以前设计的能成功工作的例程拿来与该“问题”工程进行对比。经过比对分
析发现,工程配置中使用的寄存器更新方式存在不同,如下图所示:
图1. 正常工作工程中的寄存器更新配置
图2. “问题”工作工程中的寄存器更新配置
“问题”工程配置中使用 Master timer 的更新事件作为触发寄存器更新触发源,并且更新要等
到本定时器的下一次的 Reset/Roll-over 事件出现时才生效。通过将“Update taken into account