【ESP32】Arduino开发 | 中断矩阵+按键输入中断例程

对于中断矩阵的详细介绍会放在ESP-IDF开发文章中,跳转栏目目录可以找到对应文章。

1. API

1.1 绑定GPIO中断

cpp 复制代码
attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode);
  • pin:管脚号;
  • handler:中断处理函数;
  • mode:中断触发模式。
中断模式 功能
RISING 上升沿触发
FALLING 下降沿触发
CHANGE 任意边沿触发
ONLOW 低电平触发
ONHIGH 高电平触发
ONLOW_WE 低电平唤醒触发
ONHIGH_WE 高电平唤醒触发

1.2 绑定GPIO中断(带参数)

cpp 复制代码
attachInterruptArg(uint8_t pin, voidFuncPtrArg handler, void * arg, int mode);
  • pin:管脚号;
  • handler:中断处理函数;
  • arg:中断处理函数用户参数;
  • mode:中断触发模式。

1.3 解绑GPIO中断

cpp 复制代码
detachInterrupt(uint8_t pin);
  • pin:管脚号。

2. 例程

例程实现一个按键的检测,使用中断的方式去判断。

cpp 复制代码
#include <Arduino.h>

static volatile int isr_flag = 0;

void ARDUINO_ISR_ATTR gpio_isr_handler()
{
    isr_flag = 1;
}

void setup()
{
    pinMode(0, INPUT_PULLUP);
    attachInterrupt(0, gpio_isr_handler, RISING);
    Serial.begin(115200);
}

void loop()
{
    if (isr_flag) {
        Serial.println("Key pressed");
        isr_flag = 0;
    }
}

我的开发板上的按键是连接到IO0上的,带外部上拉,所以GPIO配置成上拉输入模式;中断触发方式设置成上升沿触发,这样当按键释放的时候才会触发中断。

这里使用一个无用户参数的中断服务函数即可,函数定义加上ARDUINO_ISR_ATTR的标志。处理函数里面只是简单地把标志位置1,然后主循环中检查这个标志,如果为1就打印log,然后复位标志。

在ESP32中千万不要在中断函数中调用log打印相关的函数,会导致系统崩溃!!!

相关推荐
zlinear数据采集卡2 分钟前
模拟输入限流保护电路深度解析:从理论原理到ZLinear采集卡的实战设计
c语言·单片机·嵌入式硬件·fpga开发·自动化
j7~3 分钟前
MySQL C语言连接库和MYSQL连接池原理与简易数据网站数据流动是如何进行的
c语言·数据库·mysql·连接池·mysqlc语言连接库
踏着七彩祥云的小丑6 分钟前
嵌入式测试学习第 27 天:网络基础:IP、子网掩码、TCP/UDP基础
单片机·嵌入式硬件
SoftLipaRZC10 分钟前
C语言自定义类型:联合和枚举完全指南
c语言·算法
三佛科技-134163842122 小时前
PL3380 (PL338X系列)输出5V100MA非隔离AC-DC降压恒压输出芯片典型应用电路 与LP2601对比
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
DS小龙哥2 小时前
基于STM32设计的物联网智能插座
stm32·嵌入式硬件·物联网
全球通史9 小时前
Keil 配置 MSPM0G3507 开发环境避坑:SysConfig、msp.h 和 driverlib.a 报错完整解决记录
stm32·单片机·嵌入式硬件
secondyoung10 小时前
Cortex-R52学习:MPU内存保护机制
arm开发·单片机·学习·arm·mpu
iCxhust12 小时前
C# 命令行指令 查看二进制文件
开发语言·单片机·嵌入式硬件·c#·proteus·微机原理·8088单板机
芯岭技术郦15 小时前
集成 2.4G 射频收发器、MCU 及丰富外设的XL2417D透传模组
单片机·嵌入式硬件