登录/注册

stm32cubemx长短按键

更多

在 STM32CubeMX 中实现长按和短按按键检测,需结合 GPIO 中断和定时器进行时间判定。以下是具体步骤:


1. 硬件配置


2. 代码实现

按键中断处理

stm32fxx_it.c 中编写 EXTI 中断服务函数,调用 HAL 库函数:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  if (GPIO_Pin == KEY_Pin) {  // 替换为你的按键引脚
    if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) {
      // 按键按下(下降沿)
      HAL_TIM_Base_Start_IT(&htim2);  // 启动定时器
    } else {
      // 按键释放(上升沿)
      HAL_TIM_Base_Stop_IT(&htim2);   // 停止定时器
      uint32_t press_time = timer_counter;  // 获取计时值
      timer_counter = 0;

      // 判断长短按
      if (press_time > 1000) {  // 假设长按阈值 1000ms
        // 长按处理
      } else if (press_time > 10) {  // 短按阈值(需大于防抖时间)
        // 短按处理
      }
    }
  }
}

定时器中断处理

在定时器中断中累计按键按下时间:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
  if (htim->Instance == TIM2) {
    timer_counter++;  // 每 1ms 增加一次
  }
}

3. 防抖处理


4. 注意事项


示例代码片段

volatile uint32_t timer_counter = 0;  // 按键按下时间计数器

// 定时器中断回调
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
  if (htim->Instance == TIM2) {
    timer_counter++;
  }
}

// EXTI 中断回调
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  if (GPIO_Pin == KEY_Pin) {
    if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) {
      HAL_TIM_Base_Start_IT(&htim2);  // 按下时启动计时
    } else {
      HAL_TIM_Base_Stop_IT(&htim2);
      uint32_t time = timer_counter;
      timer_counter = 0;

      if (time > 1000) {
        // 长按逻辑
      } else if (time > 10) {
        // 短按逻辑
      }
    }
  }
}

通过上述方法,即可在 STM32CubeMX 中实现灵活的长短按检测功能。

STM8CubeMXSTM32CubeMX功能一样吗?

STM8CubeMX和STM32CubeMX功能一样吗?

2023-10-31 16:59:05

基于STM32U5 的 STM32CubeMX环境搭建

基于STM32U5 的 STM32CubeMX环境搭建

2023-09-21 17:35:00

STM32CubeMx入门教程(4):PWM应用

导语“使用STM32CubeMx配置定时器输出PWM波,生成初始化代码。”

2023-07-11 15:23:59

STM32CubeMX用户手册

STM32CubeMX用户手册免费下载。

资料下载 freelab2021 2022-02-22 14:03:54

STM32CubeMX 窗口及工具介绍

STM32CubeMX 系列教程之 STM32CubeMX 窗口及 STM32PackCreator 工具介绍,内附详细图文介绍。

资料下载 佚名 2021-12-14 18:51:19

STM32学习之STM32cubeMX软件安装与使用(附STM32cubeMX5.2.1下载地址)

STM32学习之STM32cubeMX软件安装与使用(附STM32cubeMX5.2.1下载地址)

资料下载 佚名 2021-12-07 11:51:06

STM32CubeMX安装与使用——实现流水灯

STM32CubeMX安装与使用——实现流水灯

资料下载 敷衍作笑谈 2021-12-07 10:06:13

STM32cubeMX的串口使用教程免费下载

本文档的主要内容详细介绍的是STM32cubeMX的串口使用教程免费下载。

资料下载 佚名 2019-12-03 11:31:50

STM32CUBEMX(1)--PWM

本篇文章主要介绍如何使用STM32CubeMX输出PWM,并制作呼吸灯效果。

2022-11-14 15:29:15

独立按键长短按的代码分享

独立按键长短按的代码分享

2022-01-20 07:52:48

stm32f103按键长短按得识别原理是什么

stm32f103按键长短按得识别原理需要一个定时器,用来计算按键按下的

2022-01-06 07:03:45

单片机经典长短按程序的按键接法是什么

单片机经典长短按程序是怎么样实现我们的目的的呢?单片机经典长短按程序的按键接法是什么?

2021-09-23 08:12:20

浅谈stm32cubemx安装教程

STM32CubeMX介绍、下载与安装

2020-03-25 10:57:42

STM32CubeMX介绍、 下载与安装

STM32CubeMX介绍、下载与安装

2020-03-24 10:57:12

关于STM32CubeMX重大升级

STM32CubeMX重大升级

2020-03-04 14:05:12

7天热门专题 换一换
相关标签