STM32中关于检测按键的一些问题(关于采用传统的延时消抖方式和采用中断方式)

来源:互联网 发布:java处理大量数据 编辑:程序博客网 时间:2024/06/05 10:36

1.对比用延时消抖的方式检测按键和用中断的方式检测按键:对于中断检测按键的方式,如果不在程序中做一些再次检测按键是否按下等处理的话,其精度是不如用延时消抖的方式加测按键来的可靠。


2.原因在于:我们在利用中断检测按键时,在中断程序中并没有延时,那么就会存在一个问题,当按下按键时,会可能有多次抖动,尽管我们设置的是下降沿触发中断,但这多次的抖动中也同样可能会有多次下降沿,故就有可能多次触发中断。


3.解决的办法还是只能通过延时,修正后的代码见下图3;而对于《STM32库开发实战指南》 P90 中的代码是会引起误触发的。


                 图1:传统方式的延时消抖检测按键程序


                       

                        图2:粗略的延时函数


      

 图3:修正后的利用中断方式检测按键的代码


4.那么问题来了,在中断程序中也使用了延时,那跟传统的延时消抖还有什么区别呢?

区别是:传统的延时消抖程序要写在 main函数 的 while循环 中,不停的检测按键是否按下,白白占用CPU资源;而采用中断的方式,并不会影响其他程序的执行,只有当按键按下时,才会触发中断,进入到中断服务程序中。

0 0