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