加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
登录/注册
立即注册,领取新人专属福利!
  • 资料介绍
    • 问题提出
    • 问题分析
    • 解决方法
    • 小结
  • 资料预览
  • 相关推荐
申请入驻 产业图谱

LAT1183 高精度定时器中single-shot计数模式不工作

03/26 09:30
80
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

LAT1183 高精度定时器中single-shot计数模式不工作

311.73 KB

问题提出

客户使用 STM32G474 的高精度定时器,基于 CubeMX 进行外设配置与代码生成,将某个子定时器的计数方式设置为 retriggerable single shot 方式,发现该子定时器无 PWM 输出,在调试模式下发现该子定时器的计数器一直为 0,即计数器一直没有启动,但如果将计数方式修改为continuous 模式,其他保持不变,定时器工作正常。

问题分析

检查客户提供的 CubeMx 配置文件,客户使能了 Master Timer 与 Timer B,Master Timer 的比较器事件 2 触发 Timer B 复位与运行,并配置了 Timer B 的 PWM 输出,使用该工程文件直接生成代码,并添加高精度定时器计数使能与输出使能函数。

解决方法

基于以上分析,造成该问题的主要原因是 CubeMx 基于 HAL 库自动生成的初始化代码中没有考虑不同的寄存器更新配置方式,只是单一的采用软件更新的方式来触发寄存器更新。要解决以上问题,需要修改代码中的定时器初始化的时序,在配置寄存器更新方式为“Update taken intoaccount on the following Reset/Roll-over event”前,让其他的配置先生效,基本逻辑如下,该逻辑在客户自己编写初始化代码时也需要遵循。

小结

解决客户提出的高精度定时器中的子定时器在 retriggerable single shot 计数模式下无法工作的问题,原因在于该计数模式下,当更新配置方式为“ Update taken into account on the followingReset/Roll-over event ”时,使用 CubeMx 生成的原始初始化代码出现了定时器配置无法生效,从而导致问题的出现。通过对初始化代码的逻辑进行简单修改,问题得以解决。当然,STM32CubeMx 的未来版本应会就这个地方做针对性地完善。

资料预览

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

方案定制

去合作
方案开发定制化,2000+方案商即时响应!