ESP32 GPIO外部中断

本文详细介绍了如何在ESP32中使用GPIO实现外部中断,特别关注了中断服务例程(ISR)在处理编码器信号的应用。不同于网上的常见教程,该文提供了一种避免持续扫描GPIO电平的有效方法。
摘要由CSDN通过智能技术生成

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


#include <stdio.h>
#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<<GPIO_INPUT_IO_0) | (1<<GPIO_INPUT_IO_1)| (1<<GPIO_INPUT_IO_2)))
#define ESP_INTR_FLAG_DEFAULT 0//定义默认的中断标志为0



static xQueueHandle gpio_evt_queue = NULL; //定义一个队列返回变量
int Encoder_recoginze(unsigned char state);

static void IRAM_ATTR gpio_isr_handler(void* arg)
{
//	uint32_t gpio_num = (uint32_t) arg;
	Encoder_recoginze(start);
}


int Encoder_recoginze(unsigned char state)
{
	static unsigned char encoder_add_flag;
	static unsigned char encoder_sub_flag;
	static bool Encoder_A, Encoder_B;
	/
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Arduino ESP32上使用外部中断是一种常见的方式来处理外部事件,比如按钮按下、传感器触发等。ESP32具有多个GPIO引脚可用于外部中断,并且支持上升沿、下降沿和任意电平触发。 以下是使用Arduino代码配置和使用ESP32外部中断的示例: 首先,确定要用作外部中断GPIO引脚。假设我们选择使用GPIO2作为外部中断引脚。 1. 在setup()函数中,使用pinMode()函数将GPIO2配置为输入模式: ```cpp pinMode(2, INPUT); ``` 2. 使用attachInterrupt()函数来配置外部中断。在这个函数中,您需要指定要触发中断的引脚、中断处理函数和触发类型。以下是一个例子,当GPIO2上的电平发生上升沿时触发中断: ```cpp attachInterrupt(digitalPinToInterrupt(2), interruptHandler, RISING); ``` 其中,digitalPinToInterrupt(2)将引脚号转换为对应的外部中断编号。interruptHandler是您自己定义的中断处理函数。RISING表示上升沿触发,您还可以选择使用FALLING(下降沿触发)或CHANGE(任意电平变化触发)。 3. 编写您自己的中断处理函数。这个函数将在中断发生时被调用。以下是一个简单的示例: ```cpp void interruptHandler() { // 在这里处理中断事件 } ``` 通过这个简单的示例,您可以开始使用外部中断来处理各种事件。请注意,ESP32具有多个GPIO引脚可用于外部中断,您可以根据自己的需求选择合适的引脚和触发类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值