Официальный сайт компании Arduino по адресу arduino.cc
Сторонний терминал COM-порта
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Добрый день. Столкнулся с проблемой, прошу помощи.
Я делаю устройство (на 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 очень мало, задача не принципиальная, просто интересно. Ни у кого подобных проблем не было?
Ни у кого подобных проблем не было?
Не, не было - всё работает норм: как отправляется, так и принимается. Вот буквально сейчас мучаю NodeMCU с новым софтом, который пишется для конфигурации прошивки - всё прекрасно гоняется туда/сюда.
Я решил для отладки поработать с дефолтным uart (тот который rx0 - tx0)...
Подключаю через usb-uart к ноуту...
На "дефолном uart" уже есть свой usb-uart, подключать параллельно ему второй - внешний не следует.
Ну зачем тогда на плате есть пины Rx0 и Tx0?
Я в прошивке использую serial1 и serial2. Serial (дефолтный) использовался исключительно ради удобной отладки. Когда код заработал, он был дважды закопипастен с переименованием serial в serial1 и в serial2, изменились лишь набор символьных команд.
Если Вы используете только Serial1 и Serial2, зачем тогда пишете про tx0 и rx0?
Я делаю устройство (на stm), которое принимает данные с от двух других устройств по uart. Поначалу я написал в c# небольшую программу, которая на мои запросы отвечала по определенному протоколу. Всё ничего, но меня постоянно напрягало 2 переходника usb-uart, которые постоянно должны быть воткнуты в ноут. И тут я вспомнил про пылившуюся в закромах arduino mega, и решил реализовать на ней - и usb сэкономлю, и отвлекусь от основной работы.
что-то какая-то ерунда получается... Нафига Мега, если есть СТМ? Если это СТМ32, то практически на всех чипах линейки 2-3 и более uart
Если вы внимательно читали, то я этообъясняю. Есть два модуля, которые присылают мне данные по uart(на stm), я их обрабатываю и отсылаю на компьютер. У меня нет этих двух модулей, но я знаю протокол. У меня нет под рукой отладочной платы stm (только моя собственная) и для имитации я использовал написаное мною приложение на шарпе. Для упрощения я решил использовать валяющуюся без дела мегу. Если вы ничего не поняли, то я не буду вам что-то разжевывать.
В общем, проблема решена. В наборе функций Serial на сайте нет описания функций readString( с помощью нее я всё решил), которую я где-то встретил на просторах интернета, в h файлах мне копаться было неинтересно и неохота. Как работает стандартный Serial.read я разбираться не хочу.
Иногда голый C проще, чем все эти функции arduino. Надо отправить один байт? Отправляй. Надо несколько? Отправляй в цикле по одному байту. Надо ascii символы? itoa в помощь.
В наборе функций Serial на сайте нет описания функций readString( с помощью нее я всё решил), которую я где-то встретил на просторах интернета, в h файлах мне копаться было неинтересно и неохота. Как работает стандартный Serial.read я разбираться не хочу.
А у меня почему-то есть: Serial.readString() , Serial
В общем, проблема решена. В наборе функций Serial на сайте нет описания функций readString( с помощью нее я всё решил), которую я где-то встретил на просторах интернета, в h файлах мне копаться было неинтересно и неохота. Как работает стандартный Serial.read я разбираться не хочу.
Напоминает "...функцию, как умножить три на пять - я где-то встретил на просторах интернета... а в таблице умножения мне копаться неинтересно, да и неохота..." :)))
С таким отношением я почти уверен, что функцией readString() вы пользуетесь неправильно, не понимая, как она работает. Во всяком случае она не делает ничего такого, что нельзя было бы сделать функцией read() - поэтому заявление "с функцией readString() я все решил" выглядит глупо и смешно.
Уж поверьте мне я знаю, как работает функция read, не капайте мне на мозг, и лучше потратьте свои добрые милые советы на кого-нибудь другого. А вот китайцы не знают, как маркируются выводы. UART1 и UART2 на моей плате отмаркированы неправильно, т.е. наоборот(RX перепутаны с TX) Работая с функцией readString я работал с 3им uart'ом и правильной маркировкой. Всё работало. Заметив ошибку, я вернул старый код c read, и как ни странно всё заработало. Ариведерчи.
Ни на одном тех форуме (вру конечно, но для трагичности момента надо так сказать), так много воды и оффтопа не льется, вопросы и претензии не по делу. Т.е. ни одного совета, который, конечно, всё равно бы никуда меня не привел (спешл сэнкс ту чайнис спешиалистс), но факт.
сначала было это
Как работает стандартный Serial.read я разбираться не хочу.
а теперь
Уж поверьте мне я знаю, как работает функция read,
ну видимо с того времени вы все-таки чему-то научились, похвально :)
А что касается форума - вы рассчитывали. что мы вам перепутанную на вашей плате маркировку через призму интернета разглядим?