stm32 外部中断 按键的误触发

最近在调试按键作为外部中断exti进行触发动作,发现每次按键按下和按键抬起都会多次进入中断函数,造成程序不稳定,经过反复调试和查阅资料,最后终于已经把这个问题解决,现在总结一下:

1、EXTI重复配置两次导致误触发中断的问题

如果重复两次配置EXTI的话,由于第一次已经打开中断,当进行第二次配置中断的时候,会把中断引脚首先配置成默认引脚,然后在配置成目的引脚,这样由于默认引脚是低电平,所以在切换的过程中就会进入一次中断!!具体请参见:http://bbs.elecfans.com/jishu_942011_1_1.html

2、STM32F401 外部中断误触发问题

现象:调试STM32F411低功耗的时候,使用的PA1做个唤醒源,发现在没有触发EXTI的时候,MCU居然被唤醒。

原因:PA1配置成EXTI(上拉输入),经常被误触发

解决方式:将PA1配置成浮空输入(GPIO_PuPd_NOPULL),并且外部上拉一个4.7k电阻,就不会误触发了。

这种bug的原因一直没有搞清,先记下省的以后就忘记了,猜测可能是STM32芯片bug。

具体参见:http://www.bubuko.com/infodetail-2688888.html

注:我用的是stm32F429,没有发现这个bug,但是记录下来作为开拓思路的一种方法。

3、stm32外部中断,EXTI_ClearITPendingBit,先清和后清的区别

前面清的话,如果下一次中断在该次中断退出前到来,那么退出该次中断后,会马上进入下一次中断,后面清的话,在该次中断退出前到来的中断就会被忽略,这里后到来的中断,指的是同样的中断

由于按键抖动一般在ms量级,而中断服务程序一般都是us量级,因此对于按键防抖来说,前面清和后面清影响不大,但是为了保险起见,还是在中断函数的后面清比较好。

4、进入中断之后失能EXTI中断

这种方式最终解决了我的按键防抖问题,大体思路就是:进入中断之后立即失能中断,等处理完响应的操作之后,在使能中断,这样的话当第一次进入中断之后不会再次进入中断,直到再次使能中断之后。

发布了23 篇原创文章 · 获赞 26 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/menghuanshen/article/details/89424062