前节回顾
上节主要介绍了如何配置一个基础的工程以及如何翻转LED,本节内容是上节内容的延续,在LED灯的基础上,再添加按键部分,用按键控制LED的亮灭。
系统工程创建
打开上节配置完毕的系统工程,我们查看原理图。找到按键接在哪些引脚下面。
这里我们用到的按键是KEY0,LEY1所以我们要在工程中使能2个GPIO,将PE3,PE4使能,并且配置为输入模式。
点击GPIO,配置PE3,PE4具体特性,选择输入,上拉模式(因为根据原理图,按键的另外一端是接地的,所以低电平有效,当我们按下按键的时候就是低电平,电路导通,按键触发),并且进行Label说明,在这里进行说明之后,生成的文件会自动对GPIO进行宏定义。
由此,我们整个系统就配置完毕了,紧接着,我们打开MDK-ARM的keil进行代码编写。
系统代码编写
在main.c
添加如下代码
/* USER CODE BEGIN 3 */
if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)==0)//读取引脚电平,若为低低电平则语句有效
{
HAL_Delay(200);//延时消抖
if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)==0)
HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_RESET);//写入引脚电平
}
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0)
{
HAL_Delay(200);
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0)
HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);//翻转LED0电平
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);//翻转LED1电平
}
注释:这里有两个小细节。第一个细节,用了两遍if判断语句是为了延时消抖,我们知道当按键按下时,会产生波动并且产生的效果很差,为了确定是人为按下的按键,我们用延时函数。
第二个细节:用到了延时函数的消抖,我之前配置延时函数消抖时间为500,也就是0.5S,瞬间按下按键没反应,程序查找半天,没有发现问题,后来对照程序,发现是延时函数设定的时间过长,要按下0.5S才会有反应,因此,设置按键控制LED灯的瞬时亮灭,延时时间不得过长,这里选择的是200ms,也不能过短(如10ms),否则一直检测到低电平,无法达到预期效果。
下载验证
将代码下载到开发板,效果如程序所示,实验完成。
结语
本节介绍了按键&LED灯联合实验,通过开发板上的按键来控制LED的亮灭。这里用到了三个GPIO函数分别是
HAL_GPIO_ReadPin(); HAL_GPIO_WritePin(); HAL_GPIO_TogglePin()
读取GPIO电平,写入GPIO电平以及翻转GPIO电平。实验符合预期效果。
码字不易,点个赞再走吧~