调用TIM_SetAutoreload之后,程序容易跑飞!!!

2019-08-23 15:04发布



    我用定时器产生PWM,利用编码器来改变PWM的频率或者占空比。。现在调用TIM_SetComparex 来改变占空比没有任何问题,,改成调用TIM_SetAutoreload,来改变频率,程序有时候就会跑飞,过几秒程序又自己回来了。。就在旋转编码器的过程中跑飞的,(跑飞=不产生PWM),编码器计数是正常的,就是没有PWM了,过几秒PWM又回来了

求大神指点,纠结几天了!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
chengyuanting
1楼-- · 2019-08-23 15:27
我把TIMx_CR1 寄存器的ARPE位置1,ARR缓冲输入,之后就好了,,。ARR的值变化再快,差值再大都没问题了。。。为什么不缓冲就不行呢??
、?
chengyuanting
2楼-- · 2019-08-23 18:18
ARR的值变化太大是不是不行啊?   我测试了几次,发现新赋值的ARR如果比之前的值相比,相差太大的话,波形就没有了
正点原子
3楼-- · 2019-08-23 23:58
 精彩回答 2  元偷偷看……
chengyuanting
4楼-- · 2019-08-24 01:00
正点原子 发表于 2017-3-1 22:25
你改变频率的时候,有可能CNT的值和你设置的ARR关系不对。
你乱改ARR,是不能控制CNT的,看你的定时器CNT ...

谢谢指点,一直没有关心CNT的值,,我只是判断正反转,来控制频率的变大还是变小的。。检查下是不是这个问题
chengyuanting
5楼-- · 2019-08-24 05:56
正点原子 发表于 2017-3-1 22:25
你改变频率的时候,有可能CNT的值和你设置的ARR关系不对。
你乱改ARR,是不能控制CNT的,看你的定时器CNT ...

测试过了,我让ARR的最小值肯定比CNT大的情况下还是会死机。。还没搞明白具体什么原因
正点原子
6楼-- · 2019-08-24 09:03
chengyuanting 发表于 2017-3-3 19:27
测试过了,我让ARR的最小值肯定比CNT大的情况下还是会死机。。还没搞明白具体什么原因

不应该,你看看死机的时候,ARR和CNT的变化规律。

一周热门 更多>