关于STM32定时器中断检测按键的问题:
1、硬件设计:硬件设计中一定要添加并联的电容。如果没有电容,按键基本没有灵敏度可言。不论是主函数直接无差别查询按键状态,还是使用外部中断的方式,按键基本不灵敏。
有人说,我函数中增加滤波延时,把按键毛刺过滤不就好了?但这种情况下由于按键按下的时间不一,毛刺和持续电平保持时间不好测算,若是延时过度,检测不到按键状态,若延时过短,很可能读取区间在毛刺区间,导致电平读取错误,因而必须增加电容,作为毛刺滤波和电平保持。
2、电容选择:电容选择大小直接影响读取的灵敏度。
若是选取电容过大,则按键取消按压后,电平保持时间长,很容易在定时器中断或查询模式中重复读取。
若电容选择过小,电平持续时间不够,尤其在轮询情况下,按键按下后,在顺序检查按键状态时,电容电平已经低于读取阈值了,按键失效。
3、当然在定时器中断模式下可以调整进入中断的时间来匹配设计的滤波电容,保证按键按下后,电容端的电平维持时间正好和定时器中断时间一致,这样可以保持按键可以及时且单次读取到。
至于电容和定时器中断时间的匹配需要自己尝试,自己常用的搭配是:1uf电容+500um定时器中断。可以很好的实现按键效果。