Сторонний терминал COM-порта

asadmasad
Offline
Зарегистрирован: 08.10.2018

Добрый день. Столкнулся с проблемой, прошу помощи.

Я делаю устройство (на stm), которое принимает данные с от двух других устройств по uart. Поначалу я написал в c# небольшую программу, которая на мои запросы отвечала по определенному протоколу. Всё ничего, но меня постоянно напрягало 2 переходника usb-uart, которые постоянно должны быть воткнуты в ноут. И тут я вспомнил про пылившуюся в закромах arduino mega, и решил реализовать на ней - и usb сэкономлю, и отвлекусь от основной работы. Но получился конфуз. Я решил для отладки поработать с дефолтным uart (тот который rx0 - tx0). Всё настроил, всё написал. Через монитор порта я отпраляю команду на arduino, она мне отвечает как положено (да, перевод строки и возврат каретки отключены). Подключаю через usb-uart к ноуту, с помощью самой известной утилиты Terminal подключаюсь к com-порту отправляю запрос - arduino мне не отвечает.

Дописал в скетч функцию эхо (вижу, какую команду я посылаю на arduino). Я цепляюсь опять штатным кабелем (usb) к платке и работаю через монитор порта - всё ок, вижу и запрос и ответ. Параллельно накидываю провода к пинам Rx0 Tx0, смотрю через Terminal. Я вижу и запрос от Монитора порта, и ответ arduino в Terminal'е, но команды от самого Terminal'a arduino не видит.

Настройки Terminal'a верны и такие же, как и на Arduino - 115200, 8N1, строки без переносов. При замыкании rx и tx самого переходника данные идут, т.е. линия tx исправна.

Опыта с arduino очень мало, задача не принципиальная, просто интересно. Ни у кого подобных проблем не было?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

asadmasad пишет:

Ни у кого подобных проблем не было?

Не, не было - всё работает норм: как отправляется, так и принимается. Вот буквально сейчас мучаю NodeMCU с новым софтом, который пишется для конфигурации прошивки - всё прекрасно гоняется туда/сюда.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

asadmasad пишет:

Я решил для отладки поработать с дефолтным uart (тот который rx0 - tx0)...

Подключаю через usb-uart к ноуту...

На "дефолном uart" уже есть свой usb-uart, подключать параллельно ему второй - внешний не следует.

asadmasad
Offline
Зарегистрирован: 08.10.2018

Ну зачем тогда на плате есть пины Rx0 и Tx0?

Я в прошивке использую serial1 и serial2. Serial (дефолтный) использовался исключительно ради удобной отладки. Когда код заработал, он был дважды закопипастен с переименованием serial в serial1 и в serial2, изменились лишь набор символьных команд.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

asadmasad пишет:
Ну зачем тогда на плате есть пины Rx0 и Tx0?
Для тех, кто знает, как ими пользоваться.

Если Вы используете только Serial1 и Serial2, зачем тогда пишете про tx0 и rx0?

b707
Онлайн
Зарегистрирован: 26.05.2017

asadmasad пишет:

Я делаю устройство (на stm), которое принимает данные с от двух других устройств по uart. Поначалу я написал в c# небольшую программу, которая на мои запросы отвечала по определенному протоколу. Всё ничего, но меня постоянно напрягало 2 переходника usb-uart, которые постоянно должны быть воткнуты в ноут. И тут я вспомнил про пылившуюся в закромах arduino mega, и решил реализовать на ней - и usb сэкономлю, и отвлекусь от основной работы.

что-то какая-то ерунда получается... Нафига Мега, если есть СТМ? Если это СТМ32, то практически на всех чипах линейки 2-3 и более uart

asadmasad
Offline
Зарегистрирован: 08.10.2018

Если вы внимательно читали, то я этообъясняю. Есть два модуля, которые присылают мне данные по uart(на stm), я их обрабатываю и отсылаю на компьютер. У меня нет этих двух модулей, но я знаю протокол. У меня нет под рукой отладочной платы stm (только моя собственная) и для имитации я использовал написаное мною приложение на шарпе. Для упрощения я решил использовать валяющуюся без дела мегу. Если вы ничего не поняли, то я не буду вам что-то разжевывать.

В общем, проблема решена. В наборе функций Serial на сайте нет описания функций readString( с помощью нее я всё решил), которую я где-то встретил на просторах интернета, в h файлах мне копаться было неинтересно и неохота. Как работает стандартный Serial.read я разбираться не хочу.

Иногда голый C проще, чем все эти функции arduino. Надо отправить один байт? Отправляй. Надо несколько? Отправляй в цикле по одному байту.  Надо ascii символы? itoa в помощь.

kalapanga
Offline
Зарегистрирован: 23.10.2016

asadmasad пишет:

В наборе функций Serial на сайте нет описания функций readString( с помощью нее я всё решил), которую я где-то встретил на просторах интернета, в h файлах мне копаться было неинтересно и неохота. Как работает стандартный Serial.read я разбираться не хочу.

А у меня почему-то есть: Serial.readString() , Serial

b707
Онлайн
Зарегистрирован: 26.05.2017

asadmasad пишет:

В общем, проблема решена. В наборе функций Serial на сайте нет описания функций readString( с помощью нее я всё решил), которую я где-то встретил на просторах интернета, в h файлах мне копаться было неинтересно и неохота. Как работает стандартный Serial.read я разбираться не хочу.

Напоминает "...функцию, как умножить три на пять - я где-то встретил на просторах интернета... а в таблице умножения мне копаться неинтересно, да и неохота..." :)))

С таким отношением я почти уверен, что функцией readString() вы пользуетесь неправильно, не понимая, как она работает. Во всяком случае она не делает ничего такого, что нельзя было бы сделать функцией read() - поэтому заявление "с функцией readString() я все решил" выглядит глупо и смешно.

asadmasad
Offline
Зарегистрирован: 08.10.2018

Уж поверьте мне я знаю, как работает функция read, не капайте мне на мозг, и лучше потратьте свои добрые милые советы на кого-нибудь другого. А вот китайцы не знают, как маркируются выводы. UART1 и UART2 на моей плате отмаркированы неправильно, т.е. наоборот(RX перепутаны с TX) Работая с функцией readString я работал с 3им uart'ом и правильной маркировкой. Всё работало. Заметив ошибку, я вернул старый код c read, и как ни странно всё заработало. Ариведерчи.

 

Ни на одном тех форуме (вру конечно, но для трагичности момента надо так сказать), так много воды и оффтопа не льется, вопросы и претензии не по делу. Т.е. ни одного совета, который, конечно, всё равно  бы никуда меня не привел (спешл сэнкс ту чайнис спешиалистс), но факт.

b707
Онлайн
Зарегистрирован: 26.05.2017

сначала было это

asadmasad пишет:

Как работает стандартный Serial.read я разбираться не хочу.

а теперь

asadmasad пишет:

Уж поверьте мне я знаю, как работает функция read,

ну видимо с того времени вы все-таки чему-то научились, похвально :)

А что касается форума - вы рассчитывали. что мы вам перепутанную на вашей плате маркировку через призму интернета разглядим?