• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

Stm32如何不使用延时实现输入读取防干扰?

cheer747 2017-09-06 浏览量:1621
刚入坑,看一些例子输入防止干扰都是采用延时方法,这种方法影响主循环运行效率,有什么好办法?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 状态机制,或者任务机制。把时间分为一个基准,比如1ms为一个刻度,10ms干嘛,100ms又干嘛。如果是按键不用延时的话,我这有一篇帖子,同时也有相关状态机方面的资料,基于状态机机制写的,这样大大节省了节约CPU资源,希望能帮助到你。帖子://www.icxbk.com/community/thread-95877-1-1.html
    • 发布于 2017-09-06
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:7
  • 楼主说的是按键消抖吧,如果不想消抖时用延时,可以使用定时扫描按键的方式:用定时器每隔200ms检查按键状态,假设输入为0表示按键按下,那么如果有连续两次为0,则可判断按键按下了,这种方式还可以检查长按动作。由于用定时器扫描,就不存在延时函数了,MCU效率也就高了!
    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 按键中断,然后进行状态查询。

    当按下了产生中断,置个标志,然后在设定的计时到了,再去查询一次状态,若还是按下状态,则就去执行相应逻辑。

    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先,人家提供的是参考示例。与咱们在工作或者项目里使用时有一定的差距。

    建议参考二楼的回答,使用状态机的机制。

    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 除了延时,也可以使用中断和DMA,看具体应用,或者外挂一款cpld也是不错的选择
    • 发布于2017-09-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 输入干扰的原因就是由于太快了,那么只好是等了。所以 还是要用延时,

    不过,你可以记录一定时间内按下的次数来确定

    • 发布于2017-09-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 对,使用阻塞式延时程序来校抖的方法很low,白白牺牲效率。

    1.最常用的方式就是使用定时器中断,比如每10ms一个中断,进入中断函数查询按键。

    2.然后还可以使用ucos、RTX等嵌入式实时系统,编写一个按键任务,从按键任务的角度看自己是阻塞的,但是系统会进行任务调度。

    • 发布于2017-09-07
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

Stm32如何不使用延时实现输入读取防干扰?