ESP32 Arduino 未调用中断函数

Interrupts function not called with ESP32 Arduino

我正在将 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 开发板的引出线。

您肯定需要 IRAM_ATTR(见 2)才能将 ISR(中断服务例程)放入 ESP32 的内部 RAM (IRAM)。

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

ESP32停止常规执行流程执行ISR,这应该是 可在最短时间内执行,仅需几条 CPU 条指令。

通过串行端口发送数据需要几毫秒,这对于 ISR 来说太长了。

您可以使用 ISR 来更改您在常规中评估的变量/标志 执行流程,这样你就可以最大限度地减少弄乱设备流程的风险 执行...您可以从那里发送 "SS Enabled"