原文:https://blog.csdn.net/slimmm/article/details/82814439
讨论一下stm32下按键外部中断如何进行有效的消抖
工程的代码是直接使用stm32 cubeMX进行配置生成的,下面就一起讨论吧。
1. 在中断处理服务函数中注释清除中断标志的语句,防止按键抖动而不断的进入中断服务程序中
2. 进入回调函数后先进性延时,一般为10ms,进行消抖,然后再判断引脚的电平状态
3. 在结束时一定注意要延时一段时间,然后才清除中断标志,而且要相对消抖时间要长一些,目的是为了松开按键时产生的抖动而又再次进入中断服务程序中,产生的抖动
4. 其实第3步是极其不严谨的。延时一段时间再清除中断标志,如果在清除中断标志的时候。按键仍未松开呢,等到松开时候,仍会有抖动。正确的应该是等待引脚电平的释放,eg(1 != HAL_GPIO_ReadPin(WK_UP_GPIO_Port,WK_UP_Pin)) 。引脚释放了才清除相应的中断标志
注:该处理方式仍属于阻塞等待的方式哦,小伙伴们可以把阻塞等待方式改为使用定时器去定时检测的方式
|