前言
最近在做一个按键检测,按键检测有两种方法,一种是轮询法,即在rtos中建立一个任务,然后在死循环中判断按键状态,还有一种方式是使用中断,注册一个事件,事件触发后,会向RTOS队列写入数据。
在官方示例examples\peripherals\gpio中有相关代码
流程
选定gpio
首先选定gpio,由于我使用4个按键,故需要四个gpio
#define INPUT_UP 34
#define INPUT_LEFT 35
#define INPUT_RIGHT 32
#define INPUT_DOWN 33
#define GPIO_INPUT_PIN_SEL ((1ULL<<INPUT_UP) | (1ULL<<INPUT_LEFT) | (1ULL<<INPUT_RIGHT) | (1ULL<<INPUT_DOWN))//选定gpio
#define ESP_INTR_FLAG_DEFAULT 0//设置一个flag标志位
static xQueueHandle gpio_evt_queue = NULL;//消息队列
gpio配置
首先初始化gpio结构体 gpio_config_t io_conf;
然后配置触发类型 io_conf.intr_type = GPIO_PIN_INTR_POSEDGE;
一共有一下类型
typedef enum {
GPIO_PIN_INTR_DISABLE = 0,//不使能
GPIO_PIN_INTR_POSEDGE =