Скорость UART, возможно, неправильно
-
26-09-2019 - |
Вопрос
Мой мозг жареный, поэтому я думал, что передаду этому к сообществу.
При отправке 1 символ в мою встроенную систему он последовательно думает, что он получает 2 символа. Первый принятый персонаж кажется отображением передаваемого персонажа (по-настоящему неизвестному способу), а второй принятый символ всегда является 0xFF.
Вот что я наблюдал:
Tx char (in hex) Rx character (in hex), I left out the second byte (always ff)
31 9D
32 9B
33 99
61 3D
62 3B
63 39
64 37
65 35
41 7D
42 7B
43 79
Я проверил мои часы, и они, кажется, в порядке. Единственное различие между этой неработающей версией и предыдущей версией состоит в том, что я сейчас использую чип RS485.
Я проследил сигнал вплоть до MCU, и он выглядит хорошо (подтвердило битное значение на RX PIN)
Решение
Первый принятый персонаж кажется отображением переданному характеру (в некотором бесканающем пути)
В каждом случае TX BYTE смещается влево 1 бит, затем перевернута.
Например:
31 = 00110001 9D = 10011101
0x31 << 1 = 01100010
Дополнение 01100010 - 0x9d
Я проверил пару других, выглядит то же самое для всех. Я не знаю, откуда подходит второй байт, но это может быть результатом вероятного инверсии сигнала, который продолжается.
RS485 использует дифференциальную сигнализацию. Он пахнет, как вы использовали перевернутый вывод чипа и подключен к входу RS232.
Я проследил сигнал вплоть до MCU, и он выглядит хорошо (подтвердило битное значение на RX PIN)
Какой сигнал вы использовали в качестве ссылки на землю?
Другие советы
RS485 сильно отличается от RS232 на электрическом уровне (дифференциальный по сравнению с одним концом и +/- 6 В против + 15 / -3V) - обе стороны вашей связи связи с использованием того же протокола?
Если это RS485, у вас правильно установлен «состояние по умолчанию» шины? Как насчет правильного количества остановок битов?