main函数
uint8_t uckey;
GPIO中的函数,读取按键(单击)
uint8_t key_read(void)
{
uint8_t key_value=0;
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
key_value=1;
}
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0)
key_value=2;
}
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0)
key_value=3;
}
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)
key_value=4;
}
return(key_value);
}
main.c中函数
void key_proc(void); /* 按键处理 */
按键功能函数
void key_proc()
{
uint8_t key;
key = key_read();
if((key != uckey)) //保证不重复进行
uckey = key; //保证不重复进行
else //保证不重复进行
key = 0; //保证不重复进行
switch(key)
{
case 1:
break ;
case 2:
break ;
case 3:
break ;
case 4:
break ;
}
}
双击
启用定时器,定时10ms
在这里插入代码片
这篇博客介绍了如何使用STM32的GPIO进行按键检测,并通过HAL库实现防抖动处理。主要涉及HAL_GPIO_ReadPin()函数读取按键状态,HAL_Delay()实现延时,以及在main.c中的key_proc()函数处理按键事件,防止按键抖动导致误触发。同时,还提及了启用定时器来实现10ms的周期检查,以支持双击等复杂按键操作。
5174

被折叠的 条评论
为什么被折叠?



