作者介绍
刘懿宵,男,西安工程大学电子信息学院,2017级本科生。
专业:通信工程
电子邮件:yixiao_liu1999@163.com
开发板上的按键

确定按键引脚
根据原理图:
1)PC13为LED控制引脚;
2)PB2为KEY1引脚;
3)PB3为KEY2引脚。JTDO-TRACE SWO/PB3
循环查询实现按键
选择引脚和配置时钟
配置按键引脚PB2和PB3为输入模式通过读取引脚电平信号来判断按键是否按下。
配置LED引脚PC13为输出模式。
详细配置GPIO




编写代码
# 代码编写说明
1、按键KEY1和按键KEY2对应的引脚PB2和PB3为GPIO输入模式。
2、按键KEY1按下,PB2查询到低电平时,蓝色LED灯亮。
3、按键KEY2按下,PB3查询到低电平时,蓝色LED灯灭。
4、调用函数有:
void HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
void HAL_Delay(uint32_t Delay);
5、引脚定义名称:
#define LED_Pin GPIO_PIN_13 //LED灯引脚号PC13
#define LED_GPIO_Port GPIOC //LED灯端口GPIOC
#define KEY1_Pin GPIO_PIN_2 //按键KEY1引脚PB2
#define KEY1_GPIO_Port GPIOB //按键KEY1端口GPIOB
#define KEY2_Pin GPIO_PIN_3 //按键KEY2引脚PB3
#define KEY2_GPIO_Port GPIOB //按键KEY2端口GPIOB
# 按键代码编写实现
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET)//查询按键KEY1低电平
{
HAL_Delay(10);//消抖
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET)//查询按键KEY1低电平
{
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);//灯亮
}
}
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET)//查询按键KEY1低电平
{
HAL_Delay(10);//消抖
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET)//查询按键KEY1低电平
{
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);//灯灭
}
}
下载烧录
测试结果与编程相符
外部中断实现按键
选择引脚和配置时钟
配置按键引脚PB2和PB3为输入模式通过读取引脚电平信号来判断按键是否按下。
配置LED引脚PC13为输出模式。
详细配置GPIO



使能中断


编写代码
# 代码编写说明
1、按键KEY1和按键KEY2对应的引脚PB2和PB3为GPIO外部中断输入模式:
2、按键KEY1按下,PB2检测到外部中断信号输入,蓝色LED灯亮或灭。
3、按键KEY2按下,PB3检测到外部中断信号输入,蓝色LED灯灭或亮。
4、调用函数有:
1)在stm32l4xx_it.c文件中的EXTI2_IRQHandler(void);和EXTI3_IRQHandler(void);两个函数来点亮LED灯。由于这两个中断函数最终都是调用的 HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);这个外部中断回调函数,所以可以把应用程序放在这回调函数中运行,集中管理代码。
2)void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
3)void HAL_Delay(uint32_t Delay);
# 按键代码编写实现
int main(void)函数中循环:
while(1)
{
HAL_Delay(5000);//检测演示是否影响中断检测
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_PIN)
{
if(GPIO_PIN==KEY1_Pin)//检测是否为外部中断2
{
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}
if(GPIO_PIN==KEY2_Pin)//检测是否为外部中断3
{
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}
}
下载烧录
测试结果与编程相符
往期回顾
版权声明:本文为qq_42754570原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。