[STM32F1] [二]使用b_button功能模块

[复制链接]
682|6
 楼主| liklon 发表于 2020-3-9 22:51 | 显示全部楼层 |阅读模式
本帖最后由 liklon 于 2020-3-9 22:55 编辑

STM32CUBE增加4个按键
按键名引脚
KEY_1PC4
KEY_2PB10
KEY_3PC13
WAKEUPPA0

key.jpg

配置b_config.h
    本次实验测试b_button功能,使能Thirdparty里面的FlexibleButton
button.jpg
添加Flexiblebutton代码
    添加BabyOS\bos\core\thirdparty\FlexibleButton\目录所有文件,添加头文件路径
    hbutton.jpg
设置按键ID及按下时的逻辑电平
  1. //b_button.h内添加
  2. typedef enum
  3. {
  4.     USER_BUTTON_1,
  5.     USER_BUTTON_2,
  6.     USER_BUTTON_3,
  7.     USER_BUTTON_WAKEUP,
  8.     USER_BUTTON_MAX
  9. }bBUTTON_ID_t;

  10. //b_button.c内添加按下后的逻辑电平
  11. static flex_button_t bButtonList[USER_BUTTON_MAX] = {
  12.     [USER_BUTTON_1] = {
  13.         .pressed_logic_level = 0,
  14.     },
  15.     [USER_BUTTON_2] = {
  16.         .pressed_logic_level = 0,
  17.     },
  18.     [USER_BUTTON_3] = {
  19.         .pressed_logic_level = 0,
  20.     },
  21.     [USER_BUTTON_WAKEUP] = {
  22.         .pressed_logic_level = 0,
  23.     },     
  24. };

添加读取按键值和回调

  1. //main.c添加
  2. /* USER CODE BEGIN 0 */
  3. uint8_t bButtonRead(void *p)
  4. {
  5.     uint8_t tmp = 1;
  6.     flex_button_t *btn = (flex_button_t *)p;
  7.     switch(btn->id)
  8.     {
  9.         case USER_BUTTON_1:
  10.             tmp = HAL_GPIO_ReadPin(KEY_1_GPIO_Port, KEY_1_Pin);
  11.             break;
  12.         case USER_BUTTON_2:
  13.             tmp = HAL_GPIO_ReadPin(KEY_2_GPIO_Port, KEY_2_Pin);
  14.             break;
  15.         case USER_BUTTON_3:
  16.             tmp = HAL_GPIO_ReadPin(KEY_3_GPIO_Port, KEY_3_Pin);
  17.             break;
  18.         case USER_BUTTON_WAKEUP:
  19.             tmp = HAL_GPIO_ReadPin(WAKEUP_GPIO_Port, WAKEUP_Pin);
  20.             break;         
  21.     }
  22.     return tmp;
  23. }


  24. void bButtonCallback(void *p)
  25. {
  26.     flex_button_t *btn = (flex_button_t *)p;
  27.     switch(btn->id)
  28.     {
  29.         case USER_BUTTON_1:
  30.             b_log("key_1  event: [%d]\r\n", btn->event);
  31.             break;
  32.         case USER_BUTTON_2:
  33.             b_log("key_2  event: [%d]\r\n", btn->event);
  34.             break;
  35.         case USER_BUTTON_3:
  36.             b_log("key_3  event: [%d]\r\n", btn->event);
  37.             break;
  38.         case USER_BUTTON_WAKEUP:
  39.             b_log("wakeup  event: [%d]\r\n", btn->event);
  40.             break;
  41.     }
  42.    
  43. }
  44. /* USER CODE END 0 */

调用bButtonInit
  1. /* USER CODE BEGIN WHILE */
  2.   bInit();
  3.   bButtonInit();
  4.   while (1)
  5.   {
  6.       bExec();
  7.   /* USER CODE END WHILE */

  8.   /* USER CODE BEGIN 3 */

  9.   }
  10.   /* USER CODE END 3 */


开始测试
1.按键各按一次
2.key_1长按

测试结果:
kre.jpg


子模块采用BabyOS master分支 https://gitee.com/notrynohigh/BabyOS


mmuuss586 发表于 2020-3-18 10:04 | 显示全部楼层
感谢分享
晓伍 发表于 2020-4-3 17:54 | 显示全部楼层
非常感谢楼主分享
八层楼 发表于 2020-4-3 17:55 | 显示全部楼层
非常感谢楼主分享
观海 发表于 2020-4-3 17:55 | 显示全部楼层
非常感谢楼主分享
guanjiaer 发表于 2020-4-3 17:55 | 显示全部楼层
非常感谢楼主分享
heimaojingzhang 发表于 2020-4-3 17:55 | 显示全部楼层
非常感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

50

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部