提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、外部中断概念
- 二、配置外部中断
- 1.编写中断服务函数
- 2.配置中断
- 总结
提示:以下是本篇文章正文内容
一、外部中断概念外部中断是单片机实时地处理外部事件的一种内部机制
当外部事件发生后,单片机判断外部事件是否符合条件,如果符合外部中断条件,则停止CPU正在执行的程序,转而进行中断事件的处理;中断处理完毕后,又返回被中断的程序处,继续执行
ESP32 Arduino 有以下触发方式:
LOW 低电平触发 CHANGE 电平变化 RISING 上升沿触发 FALLING 下降沿触发 HIGH 高电平触发
二、配置外部中断 1.编写中断服务函数除了设置中断模式外,还需要编写一个响应中断的处理程序——中断服务函数,当中断被触发后,便可以让ESP运行该中断函数
中断函数就是当中断被触发后要去执行的函数,该函数不能带有任何参数,且返回类型为空
设置一个外部中断的中断服务函数
void TouchEvent()
{
Serial.printf("Touch Event.\r\n");
}
2.配置中断
在定义中断服务函数后,需要在 setup 函数配置中断服务函数
主要函数是:attachInterrupt(pin, intRoutine, mode)
中断发生时指定特定名称的中断服务程序 pin 外部事件对应的引脚 intRoutine 处理外部事件的函数名 mode 中断模式(触发方式)
eg:
void setup()
{
// put your setup code here, to run once:
Serial.begin(115200);
#if 1 == EXT_ISR_MODE // 触摸中断
// Pin: T0(GPIO4), 函数指针:TouchEvent, 阈值: 40
touchAttachInterrupt(T0, TouchEvent, 40);
#elif 2 == EXT_ISR_MODE // 下降沿触发
pinMode(0, INPUT_PULLUP);
attachInterrupt(0, PinIntEvent, FALLING);
#endif
}
touchAttachInterrupt() 设置触摸板值下降时调用的函数,低于给定的阈值。使用touchRead来确定,接触和未接触状态之间的适当阈值
代码示例:
#include
// 定义外部中断的Mode
// 0: 无中断,读取Touch值
// 1:Touch中断,执行 TouchEvent()
// 2: 外部IO的中断
#define EXT_ISR_MODE 1
void TouchEvent()
{
Serial.printf("Touch Event.\r\n");
}
void PinIntEvent()
{
Serial.printf("PinInt Event.\r\n");
}
void setup()
{
// put your setup code here, to run once:
Serial.begin(115200);
#if 1 == EXT_ISR_MODE // 触摸中断
// Pin: T0(GPIO4), 函数指针:TouchEvent, 阈值: 40
touchAttachInterrupt(T0, TouchEvent, 40);
#elif 2 == EXT_ISR_MODE // 下降沿触发
pinMode(0, INPUT_PULLUP); //设置引脚0位外部中断引脚
attachInterrupt(0, PinIntEvent, FALLING);
#endif
}
void loop()
{
// put your main code here, to run repeatedly:
#if 0 == EXT_ISR_MODE
Serial.printf("touch:%d\r\n", touchRead(T0));
#endif
delay(200);
}
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?