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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版