Мой мозг пожарен, таким образом, я думал, что передам этого сообществу.
При отправке 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),
Кажется, что первый полученный символ отображается на переданный символ ( каким-то неизвестным образом)
В каждом случае байт TX является сдвигается влево на 1 бит, затем инвертируется.
Например:
31 = 00110001 9D = 10011101
0x31 << 1 = 01100010
дополнение 01100010 равно 0x9D
Я проверил пару других, смотрит быть одинаковым для всех. Я не знаю, откуда берется второй байт, но это может быть результатом вероятной инверсии сигнала, которая происходит.
RS485 использует дифференциальную сигнализацию. Пахнет так, как будто вы использовали перевернутый выход микросхемы и подключили к входу RS232.
Я проследил сигнал на всем пути до MCU, и он выглядит нормально (подтвердил значение бита на выводе rx )
Какой сигнал вы используете в качестве ориентира?
RS485 сильно отличается от RS232 на электрическом уровне (дифференциальный по сравнению с несимметричным и +/- 6 В по сравнению с + 15 / -3 В) - это обе стороны вашего канала связи, использующие тот же протокол?
Если это RS485, правильно ли установлено "состояние по умолчанию" шины? Как насчет правильного количества стоповых битов?