ESP32 Arduino未调用中断函数

问题描述 投票:0回答:1

我正在将ESP32开发板与Arduino配合使用,并希望使用中断来确定主设备是否已将Slave Select标志发送给ESP32。

这是到目前为止我尝试过的

1)

#define SS 34

void enableSend() {
    Serial.println("SS Enabled");
}

void setup(){
  pinMode(SS, INPUT);
  attachInterrupt(digitalPinToInterrupt(SS), enableSend, RISING);
}

2)

#define SS 34

void IRAM_ATTR enableSend() {
    Serial.println("SS Enabled");
}

void setup(){
  pinMode(SS, INPUT);
  attachInterrupt(digitalPinToInterrupt(SS), enableSend, RISING);
}

我使用了两个没有digitalPinToInterrupt的版本。

我需要做什么才能使中断起作用?当前,当引脚34设置为高电平时,enableSend功能不会被调用。

如果有帮助,here是我所拥有的ESP开发人员的引脚。

arduino hardware
1个回答
0
投票

您肯定需要IRAM_ATTR(请参阅2),以便将ISR(中断服务程序)放入ESP32的内部RAM(IRAM)中。

我认为您希望在ISR中执行的Serial.println("SS Enabled");对于ISR来说太复杂了。

ESP32停止执行ISR的常规执行流程,这应该是只需很少的CPU指令即可在最短的时间内执行。

通过串行端口发送数据需要花费相当多的毫秒,对于ISR来说太长了。

您可以使用ISR更改您在常规规则中求值的变量/标志执行流程,这样可以最大程度地降低混乱设备流程的风险执行...您可以从此处发送"SS Enabled"

© www.soinside.com 2019 - 2024. All rights reserved.