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

版权声明:本文为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中断,解决抖动问题

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

对于STM32来说,要实现方波中断去抖动,可以采取以下几个步骤: 1. 配置外部中断:首先,需要配置外部中断触发方式为边沿触发模式。这可以通过设置EXTI寄存器来实现。对于方波信号,可以选择上升沿触发或下降沿触发。 2. 设置去抖动延时:为了去除方波信号的抖动,可以在中断触发前添加一个适当的延时。延时的长度应根据具体情况进行调整,以确保稳定的触发。 3. 编写中断处理函数:在中断触发时,将执行中断处理函数。在处理函数中,可以读取方波输入的电平,并进行相应的处理。这可以包括记录计数器、更新状态或执行其他操作。 4. 考虑消抖算法:为了进一步提高方波中断的稳定性,可以考虑使用软件消抖算法。常见的软件消抖算法包括按键消抖算法和滑动窗口消抖算法。这些算法可以根据实际需求来选择和实现。 需要注意的是,外部中断可能无法完全消除方波信号的抖动,特别是在高频率或复杂的信号情况下。因此,根据具体应用场景的要求,可能需要进一步优化或使用其他方法来处理方波信号的抖动。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [stm32学习笔记-5EXIT外部中断](https://blog.csdn.net/weixin_46258766/article/details/129480323)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值