×
单片机 > 单片机程序设计 > 详情

stm32 外部中断 按键的误触发

发布时间:2020-05-18 发布时间:
|

最近在调试按键作为外部中断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中断


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




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会