欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > HAL-按键-MultiButton使用记录

HAL-按键-MultiButton使用记录

2025/6/8 10:37:22 来源:https://blog.csdn.net/xiaodududao/article/details/139879692  浏览:    关键词:HAL-按键-MultiButton使用记录

title: HAL-按键-MultiButton使用记录
tags:

  • STM32
  • Hal
  • Cubemax

文章目录

  •   HAL-按键-MultiButton使用记录
        • 值得注意的是注意源函数里面有个类似“心跳“的东西
      • 往期内容
          • 基础库
          • HAL+ cubemax + VSCODE + GCC

  HAL-按键-MultiButton使用记录

  • MultiButton 是一个开源的轻量的按键判断的函数 如下使该函数的开源链接:

    0x1abin/MultiButton: Button driver for embedded system (github.com)

    如何使用这个库里面已经是写的很清楚了

    事件说明
    PRESS_DOWN按键按下,每次按下都触发
    PRESS_UP按键弹起,每次松开都触发
    PRESS_REPEAT重复按下触发,变量repeat计数连击次数
    SINGLE_CLICK单击按键事件
    DOUBLE_CLICK双击按键事件
    LONG_PRESS_START达到长按时间阈值时触发一次
    LONG_PRESS_HOLD长按期间一直触发

    本人自己再封装了一遍两个按键

    button.c文件

    #include "button.h"enum Button_IDs
    {start_key,Estop_key,
    };struct Button btn1;
    struct Button btn2;
    static void BTN1_PRESS_DOWN_Handler(void *btn)
    {printf("BTN1_PRESS_DOWN_Handler\r\n");
    }static void BTN2_PRESS_DOWN_Handler(void *btn)
    {printf("BTN2_PRESS_DOWN_Handler\r\n");
    }static uint8_t read_button_GPIO(uint8_t button_id)
    {// you can share the GPIO read function with multiple Buttonsswitch (button_id){case start_key:return HAL_GPIO_ReadPin(start_GPIO_Port, start_Pin);case Estop_key: return HAL_GPIO_ReadPin(Estop_GPIO_Port, Estop_Pin);default:return 0;}
    }
    // 按键注册
    void button_register()
    {  // 按键初始化button_init(&btn1, read_button_GPIO, 0, start_key);button_init(&btn2, read_button_GPIO, 0, Estop_key);// 绑定到回调函数button_attach(&btn1, SINGLE_CLICK, BTN1_PRESS_DOWN_Handler);button_attach(&btn2, SINGLE_CLICK, BTN2_PRESS_DOWN_Handler);button_start(&btn1);button_start(&btn2);
    }

    button.h文件

    #ifndef __BUTTON_H_
    #define __BUTTON_H_#include "global.h"#include "multi_button.h"void button_register();#endif
    
值得注意的是注意源函数里面有个类似“心跳“的东西
void button_ticks(void);

你得5ms执行一下
可以放while主循环里面

while (1){button_ticks();HAL_Delay(5);}

也可以放在定时器中断里面

  void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){//5msif (htim->Instance == TIM7) //{button_ticks();}}

还有一点就是需要再执行主函数之前把按键注册什么函数初始化一遍

button_init(&btn1, read_button_GPIO, 0, start_key);

第三个参数是按键高电平还是低电平有效


往期内容

基础库

01VScode开发stm32环境搭建

02点亮一个LED

03按键控制LED

HAL+ cubemax + VSCODE + GCC

HAL PWM 配置 占空比 频率

HAL-DMA中断空闲接受不定长数据

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词