这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【Mini-F5375-OB】移植按键驱动

共1条 1/1 1 跳转至

【Mini-F5375-OB】移植按键驱动

助工
2025-01-31 17:08:44     打赏

在编码器中,有一个按键,为了方便的驱动这个按键,我找到了一个开源的按键驱动https://github.com/jiejieTop/ButtonDrive。

Button_drive是一个小巧的按键驱动,支持单击、双击、长按、连续触发等(后续可以在按键控制块中添加触发事件),理论上可无限量扩展Button,Button_drive采用按键触发事件回调方式处理业务逻辑,支持在RTOS中使用,作者仅在RT-Thread上测试过。 写按键驱动的目的是想要将用户按键逻辑与按键处理事件分离,用户无需处理复杂麻烦的逻辑事件。这次我在FreeRTOS上驱证,是可以正常驱动的。

【移植方法】

1、下载源码到本地。

2、在https://forum.eepw.com.cn/thread/389953/1 这篇工程的基础上,添加一个button的工程目录,将下载的源码,除去main.c外,添加进工程中,如下图所示:

image.png

2、添加key.c/h

首先加入头文件的引用:

#include "key.h"
#include "button.h"
#include "platform.h"
#include "FreeRTOS.h"  
#include "task.h"

接着实例化按键

Button_t Button1;

按键GPIO的Init,把PB0初始化为上拉输入模式:

void GPIO_Configure(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

    /* K1->PB0  K2->PB1 */
    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_Init(GPIOB, &GPIO_InitStruct);

}

编写按键状态的获取函数:

uint8_t Read_Button1_Level(void)
{
  return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0);
}

注册一个单击的回调按函数,这里打印出单击:

void Btn1_Dowm_CallBack(void *btn)
{
  PRINT_INFO("Button1 单击!");
}

编写一个任务函数,用于FreeRTOS创建任务:

void key_task(void *pvParameters)  
{  
    static uint8_t KeyState[4] =
    {
        0, 0, 0, 0
    };
    static uint8_t KeyCount[4] =
    {
        0, 0, 0, 0
    };

    void GPIO_Configure();
  
    Button_Create("Button1",
                &Button1, 
                Read_Button1_Level, 
                0);
    Button_Attach(&Button1,BUTTON_DOWM,Btn1_Dowm_CallBack);                       //单击
    Get_Button_Event(&Button1);
    while(1)  
    {  
      Button_Process();
     vTaskDelay(20);  
    }  
}

在任务创建函数中,添加任务的创建 :

    xTaskCreate((TaskFunction_t )key_task,       
                (const char*    )"key_task",     
                (uint16_t       )LED2_STK_SIZE,   
                (void*          )NULL,  
                (UBaseType_t    )LED2_TASK_PRIO,  
                (TaskHandle_t*  )&keyTask_Handler);

下载后,实现效果:

image.png

按下编码器的按键后就可以成功的在串口中输出了单击的铵键效果。

当然我们也可以通过添加双击,长按等来定义更多的按键效果,这里我只需要单击的效果。




关键词: MacOS     MM32F5370     GCC     Butto    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]