STM32系列——独立按键的开发基础(按键扫描)

1.按键扫描的基本原理

  • 一般独立按键的原理图:
  • 按键信号的识别:

一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地。在没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平。通过反复读取按键输入引脚的信号,然后识别高低电平来判断是否有按键触发。

  • 按键去抖动的必要性:

有按键按下,也许是干扰信号,因此,需要通过去抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。

  • 如何去抖动:

首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如还是低电平,则确认为按键触发信号;否则,判断为干扰信号,不予处理。

2.HAL库中关于按键的常用函数

  • 电平输出函数
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
  • 电平翻转函数
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
  • 电平输入函数
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
例题:

判断PB1引脚的输入信号,若为高电平,则将PB10引脚控制的LED灯的开关状态切换。

if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_SET)
{
    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);
}

3.实训案例:

在STM32F103C8T6开发板上, 利用STM32CubeMX和Keil5协同开发, 完成以下的功能:按下按键(PB1),切换PB10的电平。(独立按键原理图见文首)

(1)CubeMX配置

将PB1配置为上拉输入模式,并将用户名修改为KEY。

(2)Keil5编写代码

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#define KEY HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
void Scan_Key()
{
    if(KEY == GPIO_PIN_RESET)
    {
        HAL_Delay(5);
        if(KEY == GPIO_PIN_RESET)
        {
            HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);
        }
        while(KEY == GPIO_PIN_RESET);
    }
}
/* USER CODE END 0 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    Scan_Keys();
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

猜你喜欢

转载自blog.csdn.net/weixin_62261692/article/details/129433322
今日推荐