你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f334更新PWM频率时的问题

[复制链接]
时间的灰 提问时间:2018-5-21 15:53 /
阅读主题, 点击返回1楼
收藏 评论16 发布时间:2018-5-21 15:53
16个回答
budaoweng 回答时间:2018-5-22 08:53:11
以TIMC为例子,控制寄存器TIMCCR=0X0904000A;主定时器MCR=0X2005000A;剩下的对照手册慢慢体会去吧,想弄懂HRTIME就别着急。反复看手册。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

时间的灰 回答时间:2018-5-22 09:37:02
budaoweng 发表于 2018-5-22 08:53
以TIMC为例子,控制寄存器TIMCCR=0X0904000A;主定时器MCR=0X2005000A;剩下的对照手册慢慢体会去吧,想弄懂H ...

能具体针对这个问题分析一下吗?
budaoweng 回答时间:2018-5-22 13:21:40
时间的灰 发表于 2018-5-22 09:37
能具体针对这个问题分析一下吗?

这个问题就是在更改寄存器值的时候,没有完全同步更新。因为单片机是串行运行代码的,寄存器的值也是一个一个更新的。所以,在寄存器的值变化非常大的时候就会出现断续的问题。比如,你的频率从400k变到1M,那么周期寄存器,各个比较器都会有一个大幅度变化。比方说,TIMC的CLOCK为1.052Ghz,频率是25000,那么说周期寄存器为42080,占空比为50%的话比较器的值为21040。这时就是输出占空比为50%,频率为25K的PWM,如果此时你更新频率,必须把周期寄存器和比较器同时更新。但实际的情况是,这两个寄存器并不能同时更新,如果你想把PWM变为频率100K占空比为50%,那么周期寄存器的值1052000000/100000=10520,比较寄存器为10520/2=5260;注意,关键问题来了。如果你此时先对周期寄存器更新,在更新完成的一瞬间,周期寄存器的值为10520,比较寄存器为21040。比较寄存器比周期寄存器都大,所以就出现了你看到的问题。此时如果你把比较寄存器更新为5260,PWM就恢复正常了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

时间的灰 回答时间:2018-5-22 15:09:30
budaoweng 发表于 2018-5-22 13:21
这个问题就是在更改寄存器值的时候,没有完全同步更新。因为单片机是串行运行代码的,寄存器的值也是一个 ...

谢谢这么详细的回答,有一点我还不明白,因为我使能了预装载功能,按理说应该是同时刻更新的呀。
budaoweng 回答时间:2018-5-23 08:56:48
时间的灰 发表于 2018-5-22 15:09
谢谢这么详细的回答,有一点我还不明白,因为我使能了预装载功能,按理说应该是同时刻更新的呀。 ...

更新触发源没设置好。比如TIMC和TIMD的更新触发源都设置为主定时器更新(MSTU: Master Timer update)。然后主定时器的更新可以设置成软件更新(MSWU: Master Timer Software update)也可以设置成主定时器周期完成时更新(MREPU: Master Timer Repetition update)。我劝你多看看手册,不要着急。我当时也是整了10来天才搞明白的。
ghzhao 回答时间:2018-5-23 13:17:33
学习一下,收藏了!
时间的灰 回答时间:2018-5-24 10:22:57
budaoweng 发表于 2018-5-23 08:56
更新触发源没设置好。比如TIMC和TIMD的更新触发源都设置为主定时器更新(MSTU: Master Timer update)。 ...

这几天没有登录,问题已经解决了,更改更新的触发源之后就好了,和你说的一样,谢谢啦。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版