cubemx的配置:
首先要找到原理图中对应的按键引脚
可以通过原理图观察到,按键所对应的引脚是PB0、PB1、PB2、PA0。因此在cubemx中需要将这些对应的引脚配置成输入模式。
之后需要对GPIO进行相应的配置(也可以不用进行配置)
按键程序的编写:
可以编写.c文件便于分类,也可以直接在主函数中进行子函数的编写。
uint8_t key_scan(void)
{
uint8_t KEY_reavalue;
KEY_reavalue=0;
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)
KEY_reavalue=1;
else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)
KEY_reavalue=2;
else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)
KEY_reavalue=3;
else if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)
KEY_reavalue=4;
return KEY_reavalue;
}
之后调用该函数对按键进行处理。
if(uwTick-key_slown_value<=150) return;
key_slown_value=uwTick;
key_value=key_scan();
key_down=key_value&(key_value^key_old);
key_up=~key_value&(key_value^key_old);
key_old=key_value;
if(key_down)//开始计时
{
key_clock_short_count=key_clock_long_count;
}
if(key_clock_long_count-key_clock_short_count<800)
{
switch (key_up)
{
case 1:
{
}
break;
case 2:
{
}break;
case 3:
{
}break;
case 4:
{
}
else{
if(key_old==3)//快速增加
{
}break;
case 2:
{
}break;
case 3:
{
}break;
case 4:
{
}break;
}
}
该段代码是通过内部的滴答定时器计数,来使得实现按键的长短按。
该代码的核心是三段代码将按键的下降沿、上升沿、和长按时保持不变的值。
key_value=key_scan();
key_down=key_value&(key_value^key_old);//下降沿
key_up=~key_value&(key_value^key_old);//上升沿
key_old=key_value;//上一次的读取值
之后是通过内部的滴答定时变量
uwTick
来进行计时
当key_down发生变化时(按下按键,有下降沿)便开始赋值给计时变量。之后在800ms内部属于短按,进行相应的操作,否则的话就是进行长按,长按可以进行上升沿检测。
之后再进行相应的代码操作。