前言
单片机最为核心的内容,应该就是中断了吧(个人认为)。相较于其他的单片机而言,ESP32的外部中断是十分强大的,因为其每个引脚均可以设置为外部中断的触发引脚。
相关API
中断初始化
attachInterrupt(uint8_t pin, std::function<void ()> intRoutine, int mode)
函数功能:配置初始化外部中断
参数1:pin,外部中断所使用的引脚,ESP32所有引脚均可以配置为外部中断引脚
参数2:中断服务函数,此处填写函数名即可
参数3:中断触发方式,支持以下触发方式:
-LOW 低电平触发
-CHANGE 电平变化
-RISING 上升沿触发
-FALLING 下降沿触发
-HIGH 高电平触发
相关实现
将按键所在引脚配置为外部中断引脚,通过按键按下来触发外部中断。
1、使用下降沿触发:
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(2,OUTPUT);
digitalWrite(2,LOW);
attachInterrupt(0,INTfunction,FALLING );
}
void loop() {
}
ICACHE_RAM_ATTR void INTfunction()
{
digitalWrite(2,!digitalRead(2));
}
注意点:经过测试发现,ESP32不能在中断中使用串口打印,当使用串口打印函数(println)时,会导致ESP32重启,查阅资料觉得原因应该是println过于耗时,而我们对中断函数的要求应该是快进快出。
参考文章