STM32按键实验

本文介绍如何利用SysTick定时器实现20ms的时间基准,并采用状态机方法完成按键扫描及消除抖动。文章讨论了具体的程序实现细节,包括状态机的三个状态以及每20ms的状态判断过程。此外,还分析了解决过程中遇到的问题及解决方案。

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

    用systick做时间20ms的判断,用状态机概念的按键扫描三状态去除抖动,状态0:有按键按下,状态1:有按键按下,判断具体按键,状态3:判断按键抬起,没20ms进行状态的判断。
   流程图:

SYSTICK程序(不包括初始化程序,初始化程序在delay.c中)
        SysTick->LOAD=20*fac_ms;//写入装载值
        SysTick->VAL =0x00;                     //清零计数值
        SysTick->CTRL=0x01 ; //启动systick
        temp = SysTick->CTRL;
        if(temp&0x01&&(temp&(1<<16)))//判断systick异常
出现的问题:
    1.发现GPIO_ReadInputData读取的数据不对,用GPIO_ReadInputDataBit
代替正常。仿真分析,I/O口和数据位对应错误。PC_2,PC_3,PC_5,分别对应IDR寄存器的第3位,第四位,第六位。
    2.修改程序的结构,添加在状态2执行完判断后进入状态3.
反思:考虑要调理清晰,分析要透彻见底,小心思维惯性!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值