在开发KW38时,遇到一个GPIO的问题:
配置:引脚配置成输入,可双边沿触发中断。
问题发生:当引脚因边沿触发进入中断时,此时若因电路或者其他因素导致输入电平迅速发生切换,进而导致出现了很多的上升沿、下降沿,
所以会使程序多次进入引脚中断或者中断回调,如果中断或者中断回调中仅做有限且快速的操作,那么还不会出现问题。 但是若在回调中做了稍微多一些的操作,例如调用了某些函数,那么这时就大概率会发生函数重入,导致程序异常运行,表现为宕机或者任务挂掉。为稳妥起见,还是老老实实的做消抖处理。
解决方法:需要做消抖处理
进入中断函数后,
1、屏蔽引脚中断 NVIC_DisableIRQ
2、调用定时器,例如100ms(消抖处理)
3、在定时器触发定时器回调后,定时器回调中
(1)调用 NVIC_EnableIRQ 重新启用中断
(2)读IO, 做逻辑(一般会触发任务事件,去处理;回调中尽量不要做过多操作)