长按 关机 短按开机 相关按键配置(低电平触发)



  • //============= 按钮任务函数,处理按钮事件 ===============
    static int user_task_func(os_event_t *param)
    {
    switch(param->event_id)
    {
    case USER_EVT_BUTTON:
    {
    struct button_msg_t *button_msg;
    const char *button_type_str[] = {
    "BUTTON_PRESSED",
    "BUTTON_RELEASED",
    "BUTTON_SHORT_PRESSED",
    "BUTTON_MULTI_PRESSED",
    "BUTTON_LONG_PRESSED",
    "BUTTON_LONG_PRESSING",
    "BUTTON_LONG_RELEASED",
    "BUTTON_LONG_LONG_PRESSED",
    "BUTTON_LONG_LONG_RELEASED",
    "BUTTON_COMB_PRESSED",
    "BUTTON_COMB_RELEASED",
    "BUTTON_COMB_SHORT_PRESSED",
    "BUTTON_COMB_LONG_PRESSED",
    "BUTTON_COMB_LONG_PRESSING",
    "BUTTON_COMB_LONG_RELEASED",
    "BUTTON_COMB_LONG_LONG_PRESSED",
    "BUTTON_COMB_LONG_LONG_RELEASED",
    };
    button_msg = (struct button_msg_t *)param->param;
    // co_printf("KEY 0x%08x, TYPE %s.\r\n", button_msg->button_index, button_type_str[button_msg->button_type]);

    							if(button_msg->button_type == BUTTON_PRESSED)		//短按按钮
    							{
    									//if(button_msg->button_index == GPIO_PD4 )					//Key1
    									{
    											co_printf("K2 Peleased A1\r\n");			Key_Num = 2;
    									}
    							}
    							else 
    									if(button_msg->button_type == BUTTON_LONG_PRESSING)			//长按按钮3S
    

    // if(button_msg->button_type == BUTTON_LONG_RELEASED) //长按后释放3S
    {
    //if(button_msg->button_index == GPIO_PD4 )
    {
    co_printf("K1 BUTTON_LONG_PRESSING 5\r\n"); Key_Num = 5;
    Power_OFF_After(); //关机前需要做的事
    system_power_off(0xc6); //进入关机模式,电流2uA;
    // system_sleep_enable(); //进入休眠;
    }
    }

            }
            break;
    }
    
    return EVT_CONSUMED;
    

    }

    GPIO初始化时如下配置:
    //---------按键初始化 按钮 PD4 ---------
    pmu_set_pin_dir(GPIO_PORT_D, BIT(4),GPIO_DIR_IN);
    pmu_port_wakeup_func_set(GPIO_PD4); //使能低功耗唤醒
    button_init(GPIO_PD4);