ESP32 - получить данные по RS232 в сериал и вывести в монитор порта

Связь через Serial Port Monitor работает. Команды уходят - ответ приходит. Устройство реагирует штатно.

ТС, ты уверен что параметры порта:

7 data bit, even parity, 4800 bd, 1 stop bit, Xon/Xoff

? Ибо Serial Port Monitor, если тот что в Arduino IDE, ничего про Xon/Xoff и 7 data bit не зает.

Ну а если всё же действительно “7 data bit, even parity, 4800 bd, 1 stop bit, Xon/Xoff”, то могу помочь тыщи за 3.

А ему Монитор и не нужен. А сам Сериал вполне может быть настроен на 7бит, учите матчасть

В чем @rkit прав - заниматься этим, не имея в руках живого девайса с таким протоколом - онанизм.
@Hatber - готовы выслать вашу консоль исполнителю почтой для тестов?

это описано в топике. В самой задаче.
общение с устройством через указанные параметры.
То, что присылает устройство - выводим в монитор.

Почтой нет, устройство переносимое, но нужно для работы. Территориально Москва, готов встретиться физически вместе с устройством и показать все. Москва и МО.

Serial Port Monitor - это софтина на ПК. Там гибко всё настраивается.
А в ардуино иде да, там нет такого.

ключевое слово “просто перенести”
фактически переписка с нуля логики работы с портом
бизнес-логику, может и можно перенести без проблем

Вот это я и спрашивал, какая софтина.

да какая там “логика” - одна строчка всего. Если в буфере есть место - запихнули байт и ждем, пока уйдет.
Другой вопрос, конечно хотелось бы все готовое :slight_smile:

ты вообще не понимаешь, что такое Xon/Xoff

думаешь?
Xon/Xoff - система, когда приемник управляет передатчиком, отсылая ему контрольный байт Xoff когда нужно прекратить передачу и байт Xon - когда возобновить.
Что тут не понимать-то?

Ну вот теперь я не понимаю, каким образом твое “есть/нет места в буфере” является обработкой этих контрольных байтов.

никаким. В этой строчке описан УАРТ без Xon/Xoff .
Это просто к тому, что сам УАРТ - система элементарнейшая, добавить к ней логику “есть Xoff - ждем, нет - отправляем” не должно быть сложно

Нет, милый. Есть Xoff - отключаем передатчик, иначе передача продолжится из программного буфера Serial. И не теряем символ, лежащий в буфере передатчика. И еще надо самому эти коды отправлять, если есть такая необходимость. Короче весь класс Serial надо модифицировать.

Одну единственную низкоуровневую функцию write(char). Все остальные функции вывода Serial работают через нее.

И каким местом твоя функция “write” должна реагировать на Xoff? В прерываниях это делается.

Тут зависит от устройства УАРТа в конкретном МК. То что я видел, работает так:

В прерываниях отсылаются байты из аппаратного FIFO. А write() кладет туда байты из программного буфера Сериал.
Прерывания не помеха - если в FIFO байты не класть, они и не отправятся.

Если это аппаратный fifo, то ему не нужны никакие прерывания по определению.

А вот это делает прерывание по опустошению аппаратного fifo. А если есть программный буфер, то write кладет байты именно в него.

Но ничего из этого не имеет никакого отношения к обработке ВХОДЯЩЕГО Xoff, и последующее отключение передатчика.

Я бы попробовал настроить прерывание RX по приему каждого байта (при скорости 4800 бод это не проблема) и в прерывании анализировать принятый байт.

В конце концов, чтоб не возится с аппаратными регистрами - есть же либа SoftwareSerial, где все делается программно. Ее-то хакнуть точно можно.

Xon/Xoff или что другое -вот в чем вопрос! Дело в пресловутой XY-проблеме, о которой совсем недавно на тут трындели, когда требуется убедиться, что требуется решить именно то, о чем ТС пишет, а не ваще хз какую фигню.

вот же что ТС выдал -

а потом оказывается, -

ну и…, больше совсем нет инфы?
Получается что далее с ТС надо вытрясти настройки этого самого Serial Port Monitor, потом, при жалении, с ним можно еще поэкспериментировать или опробовать тоже самое на другой софтине с большими возможностями, если у текущей не хватает возможностей для детализации настроек.