问题:
STM32的外部输入经过光耦接到GPIO输入端,如图所示:

其中,I5对应的按键检测用于即按即停功能,不能有误触发;
MCU中,DI5管脚原来设置成下降沿触发;
测试时发现按键按下和弹起时,都会触发中断,进入中断处理程序的回调函数;
1、将延时时间由300ms延长到3000ms不能解决问题;
2、示波器查看有没有上升沿抖动,时间轴设定为每格100ms,看不到抖动现象;
将时间轴放大到每格1ms就可以清晰地看到抖动了;
3、在中断回调函数中,stop_check ^= 1,也就是说每进一次中断,stop_check的值都会在0和1之间切换;
4、原因找到了,想办法解决抖动问题。
解决办法:
1、解决抖动问题前,在时间轴每格1ms的窗口上,看到的抖动如图所示:

2、在DI5和DGND之间并联了一个0.1uF的电容,

再次测试DI5输入端按键按下时的波形,如图所示:

从图中可以明显看到,由于0.1uf电容的滤波作用,有两个毛刺本来要冲起来,结果被滤掉了。
实测结果:
1、按下按键时(对应上升沿),s

STM32的外部输入中断在检测按键时遇到抖动问题,导致按键按下和弹起都触发中断。通过示波器观察到1ms级别的抖动,并在DI5和DGND之间并联0.1uF电容进行滤波。调整中断为上升沿触发,确保只有按键松开时stop_check值变化,同时将两次中断间隔设为5ms,成功防止了误触发,解决了现场体验问题。
最低0.47元/天 解锁文章
4763

被折叠的 条评论
为什么被折叠?



