ESP32 GPIO外部中断

ESP32 GPIO外部中断
中断服务写的是一个编码器
网上找了半天全是写了个wihile(1)在里面扫GPIO电平的骗子
.h就不贴了缺的#define自己补下就行


#include 
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include "freertos/queue.h"
#include "Encoder.h"

#define GPIO_INPUT_IO_0     13
#define GPIO_INPUT_IO_1     14
#define GPIO_INPUT_IO_2     27
#define GPIO_INPUT_PIN_SEL  ((1< 3)
		{
			encoder_add_flag = 0;
			encoder_sub_flag = 0;
		//	printf("add\n");
			return Encoder_add;
		}
		else if (encoder_sub_flag > 3)
		{
			encoder_sub_flag = 0;
			encoder_add_flag = 0;
		//	printf("sub\n");
			return Encoder_sub;
		}
		/***********************************/
		return 0;
	}
	return 0;
}

void Encoder_init()
{
	gpio_config_t io_conf;
	//定义一个gpio_config类型的结构体,下面的都算对其进行的配置
	//disable interrupt
	io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
	//set as output mode
	io_conf.mode = GPIO_MODE_OUTPUT;
	//bit mask of the pins that you want to set,e.g.GPIO18/19
	io_conf.pin_bit_mask = ((1 << GPIO_INPUT_IO_0) | (1 << GPIO_INPUT_IO_1) | (1 << GPIO_INPUT_IO_2));
	//disable pull-down mode
	io_conf.pull_down_en = 0;
	//disable pull-up mode
	io_conf.pull_up_en = 0;
	//configure GPIO with the given settings
	gpio_config(&io_conf);

	//interrupt of rising edge
	io_conf.intr_type = GPIO_PIN_INTR_POSEDGE;
	//bit mask of the pins, use GPIO4/5 here
	io_conf.pin_bit_mask = ((1 << GPIO_INPUT_IO_0) | (1 << GPIO_INPUT_IO_1) | (1 << GPIO_INPUT_IO_2));
	//set as input mode    
	io_conf.mode = GPIO_MODE_INPUT;
	//enable pull-up mode
	io_conf.pull_up_en = 1;
	gpio_config(&io_conf);

	//change gpio intrrupt type for one pin
	gpio_set_intr_type(GPIO_INPUT_IO_0, GPIO_INTR_ANYEDGE);
    //create a queue to handle gpio event from isr
	gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t));
	//install gpio isr service
    gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);
	//hook isr handler for specific gpio pin
	gpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void*) GPIO_INPUT_IO_0);
	//hook isr handler for specific gpio pin
	gpio_isr_handler_add(GPIO_INPUT_IO_1, gpio_isr_handler, (void*) GPIO_INPUT_IO_1);
	//hook isr handler for specific gpio pin
	gpio_isr_handler_add(GPIO_INPUT_IO_2, gpio_isr_handler, (void*) GPIO_INPUT_IO_2);
	

}

你可能感兴趣的:(ESP32 GPIO外部中断)