stm32读取编码器的值时,main函数中的延迟失效了?

2019-07-21 03:41发布

如题,我在使用103zet6读取编码器的值时,采用的是TIM4的输入捕获模式,用通道1和通道2分别接编码器的A相和B相。在定时器捕获中断函数里,我已经可以正确的读出编码值。
但有个问题是我在main的while里,设定每隔2秒通过串口输出一次编码值。但当我转动编码器时,串口就会不停输出,编码器不转的时候又恢复正常。也就是说当转动编码器时,while循环里的延迟函数不起作用了,输出的值倒是正确的。
不知道各位大佬有没有遇到过类似的问题,还烦请不吝赐教,感激不尽~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
peng1554
1楼-- · 2019-07-21 06:40
 精彩回答 2  元偷偷看……
liuyuepeng0419
2楼-- · 2019-07-21 07:00
自己再顶一下,大佬们没有遇到过吗?用仿真器也调试了,感觉时序也是正常的。一旦全速运行就出问题了。
Edisonchai
3楼-- · 2019-07-21 09:50
你没有把你的程序贴出来,所以我只能主观猜测,不知道我的主管臆想对不对,你需要记录你编码器的值,在两秒钟的程序里发你每次最后读的值。我用的编码器可以设定,它是主动发送模式,所以我时刻有值。
liuyuepeng0419
4楼-- · 2019-07-21 13:25
谢谢上面这位老哥。问题出在正点的delay_ms这个函数,编码器中断导致这个延迟时间变短了,具体引起原因还没找到。不过通过自己写了个延时或者用个定时器来计时输出串口就可以了。
liuyuepeng0419
5楼-- · 2019-07-21 19:14
自己回复下,找到问题了。因为在捕获中断里加了个5us延时,中断产生时,systick的load值被改写了,所以主函数的1000ms也就延时不出来了。

一周热门 更多>