STM32 学习笔记 -- EXIT外部中断 按键的误触发问题

橙三吉。 提交于 2019-12-12 09:01:59

版权声明:本文为CSDN博主「menghuanshen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/menghuanshen/article/details/89424062
————————————————

EXIT外部中断 按键的误触发问题

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

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

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

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

现象:调试STM32F407低功耗的时候,使用的PA0做个唤醒源,发现在没有触发EXTI的时候,MCU居然被唤醒。
原因:PA0配置成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中断,解决抖动问题

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!