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

本文对比了中断检测按键与延时消抖检测按键的方法,指出中断方式可能存在误触发的问题,并提供了修正后的中断检测按键代码。同时解释了两者在中断程序中的差异,强调了延时消抖在避免按键抖动时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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


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


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


                       

                        图2:粗略的延时函数


      

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


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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值