• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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();
}
 
Сверху Снизу