这个例程是我看了别人做的例程代码之后消化吸收按照自己的思路写的,主要的区别在于我的开发基于FreeRTOS,而我看到的例程仅仅是简单的演示功能而已。

         按键识别,一个主要的概念在我现在接触的汽车电子中是常用的的debance功能,而这个debance时间可以自己去调试测试。我自己的例程先使用了别人的推荐参数,也就是10ms。后面我自己也会调试一下确认一下这个时间到底该设定成多少。

         代码比较简单,尤其是会比demo简单,因为我的时间参数可以由FreeRTOS给我提供。因此,设计主要代码如下:

void key_scan_func_10ms(void)
{
static GPIO_PinState key_state_last = GPIO_PIN_SET;
static GPIO_PinState key_state = GPIO_PIN_SET;

key_state = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4);

if((GPIO_PIN_RESET == key_state) && (GPIO_PIN_SET == key_state_last))
{
/* already judge for debance */
printf("key0 is pressed!\n\r");
}
else
{
printf("key0 is not pressed!\n\r");
}

key_state_last = key_state;
}

         如果按键被识别,可以输出一个提示。接下来做一下测试:

         测试结果不贴了,我没能够抓到这个抖动的过程,可能这种抖动是一个随机事件?完整的参考代码可以在如下链接找到:

    ​

150_STM32F407按键识别_sed

         识别的还挺准确。接下来试试高频扫描是否可以看到抖动的状态,我把扫描设置为大约1ms。