• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Прерывание на UART ESP32

workpage

New member
Что-то не гуглится готовых(рабочих) решений для arduino.
Как сделать прерывание на UART в ESP32?
 

workpage

New member
Спасибо. Полезная ссылка.
А есть конкретные примеры использования?
 

aZholtikov

Active member
Спасибо. Полезная ссылка.
А есть конкретные примеры использования?
Код:
void IRAM_ATTR serialEvent(){
while(Serial.available())
  Serial.print((char)Serial.read());
if(!Serial.available())
  Serial.print('1');
}
void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
Serial.print("test");
Serial.setInterrupt(&serialEvent);

}
String x = "";

void loop() {
  // put your main code here, to run repeatedly:
 //serialEvent();
}
 

aZholtikov

Active member
Не компилируется.
Ругается на
Serial.setInterrupt(&serialEvent);
Пардон. Первый попавшийся пример взял. Это не для ESP32...

Для ESP32 нужно Serial.onReceive(callback). Почитай описание функции - когда и как она срабатывает и как настраивать параметры.
 

workpage

New member
Тэкс. Всё работает.
Уточнение для следующих поколений.
В новой версии SDK изменилось имя подпрограммы вызова serial.
void IRAM_ATTR serialEventRun()

Serial.onReceive(&serialEventRun); можно не объявлять. Всё и без него работает.
Однако если добавить эту строчку в код, ИНОГДА после полезной информации Serial.read() выдаёт символ 255.
Финальный код такой:
Код:
void IRAM_ATTR serialEventRun(){
while(Serial.available())
  Serial.print((char)Serial.read());
}
void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
Serial.print("test");
//Serial.onReceive(&serialEventRun);
}

void loop() {
  // put your main code here, to run repeatedly:
 //serialEvent();
}
 
Сверху Снизу