在我们的STM32G070RB开发板上面有一个蓝色的小按键,其与引脚PC13相连接(详细见附录电路图 )。引脚在空闲的时候由上拉电阻将电平拉高,即PC13的空闲电平为高电平。
有了外围电路的设计,我们再来安排一下软件实现。按键功能的基本需求有两个:一、短按;二、长按。所以,我们的设计方案也围绕这两个基本功能。
在FreeRTOS系统里面,我们使用一个task来实现按键扫描功能。嗯,是扫描功能!
这里的按键非紧急按键,仅为普通按键,因此使用扫描的获取方式。
我们将task的循环调用间隔设定为5ms,即每5ms采样一次引脚PC13的电平状态,以判断按键是否按下。我们再设计一个keypoll()的函数来执行与处理每次扫描后的按键状态,软件流程图如下图所示:
在软件流程设计里,我们使用了FreeRTOS的队列来发送按键键码,当然,我们又新建了一个task来处理按键的键码。在版主的示例里面,版主使用串口终端打印出来键码值。串口终端的打印图如下所示: