Cannot convert 'USBSerial*' to 'HardwareSerial*

Доброго времени…

Задачка следующая, на stm32 необходимо по условию читать из Serial или из Serial3. Хотел сделать по простому

HardwareSerial *MySerial;
if (a == 1) {
MySerial = &Serial;
}
else {
MySerial = &Serial3;
}

Но оказывается Serial это не HardwareSerial class.
Ругается Compilation error: cannot convert ‘USBSerial*’ to ‘HardwareSerial*’ in assignment

В интернете видел, делают свой класс с обертками над Stream. Может есть попроще способ?

Ну, Вы сообщение-то сами читали? Или только нам выложили?

Заменить у себя слово HardwareSerial на USBSerial мамка не велит? Или по уставу не положено?

Чушь не пишите

А какой у него тип? И какой тип у Serial3?

У Serial USBSerial, у Serial3 - HardwareSerial.

Замените HardwareSerial *MySerial; на Print *MySerial;

Может Вы имели в виду Stream?
Stream *MySerial;

У Print нет методов available и readBytes

А что у Вас за аддон?
На моем (первом, что попался под руки) пишет, что не знает вообще таких как Serial3…

sketch_may14a.ino.cpp:(.text.setup+0x24): undefined reference to `Serial3'

И что за плата? Я пробовал разные выбирать (синюю / черную таблетку, 40х серию, 70х серию). Скорее всего это проблема в аддоне.

Камень STM32F103

Print предок.

Я имел в виду то, что написал. Кто мешает вам попробовать Stream?

Notice

This software is experimental and a work in progress. Under no circumstances should these files be used in relation to any critical system(s). Use of these files is at your own risk.

Для моих нужд Stream оказалось достаточно.

1 лайк

Возможно, вы имели ввиду наоборот? Потому что вот такой код:

void setup() {
  HardwareSerial *MySerial1;
  MySerial1 = &Serial;

  MySerial1->println("MySerial1");
}

void loop() {

}

Отлично компилируется:

Скетч использует 7148 байт (10%) памяти устройства. Всего доступно 65536 байт.
Глобальные переменные используют 1076 байт (5%) динамической памяти, оставляя 19404 байт для локальных переменных. Максимум: 20480 байт.

У Вас наверное стоит другое ядро для stm, в котором Serial - наследник HardwareSerial

Возможно, я сильно в нем не копался.
У меня для STM32 используется STM32CubeIDE

А что это за stm у которого третий сериал есть?

Дык ТС уже писал, обычный F103, виртуальный порт поверх USB + три аппаратных.

g031 например два uart и один lpuart

Хрена, так себе. Ладно, не буду.