ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
今天在做处理一个中断按键的时候,总是避免不了抖动的影响! ![](https://box.kancloud.cn/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适当的延时,这样就可以解决这个问题了!