中断源去抖办法
最后更新于:2022-04-01 14:51:00
今天在做处理一个中断按键的时候,总是避免不了抖动的影响!
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-21_576915b9caf52.jpg)
像这个按键信号,如果我们用一般的扫描方式的话,用一个延时就可以解决了,但是我们用中断的话,怎么办?
这样明显会中断5次,在51里面还好,在进入中断的时候,可以把中断屏蔽了,但是51屏蔽中断之后,其他中断就不能触发了,在stm32,甚至任意一个平台都一样,有人说关掉这个中断源,我大致试了一下,最后程序都卡死!跑飞了。。所以这种也方法不可以去!
既然是这样,我们用一个中断程序执行标志符怎么?
~~~
void EXTI0_IRQHandler(void)
{
static u8 button = 0;
if(RESET == EXTI_GetFlagStatus(EXTI_Line0))return;
if(!button){
button = 1;
delay(KEY_DELAY);
if(!(GPIOA->IDR & (1<<0)))goto end;
/******************/
/******************/
end: button = 0;
}
EXTI_ClearFlag(EXTI_Line0);
}
~~~
button2起到标志位的作用,他必须是静态变量,delay适当的延时,这样就可以解决这个问题了!