Скорость UART возможно неправильная - PullRequest
6 голосов
/ 14 апреля 2010

У меня зажарен мозг, поэтому я решил передать его сообществу.

При отправке 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.

Я проследил сигнал до микроконтроллера, и он выглядит хорошо (подтвердил значение бита на выводе RX)

Ответы [ 3 ]

9 голосов
/ 14 апреля 2010

Первый полученный персонаж, кажется, сопоставить передаваемому персонажу (в какой-то неизвестный способ)

В каждом случае байт TX сдвигается влево на 1 бит, а затем инвертируется.

Например:

31 = 00110001 9D = 10011101

0x31 << 1 = 01100010 </p>

дополнение 01100010 - 0x9D

Я проверил пару других, похоже, одинаков для них всех. Я не знаю, откуда поступает второй байт, но это может быть результатом вероятной инверсии сигнала.

RS485 использует дифференциальную сигнализацию. Он пахнет так, как будто вы использовали инвертированный выход микросхемы и подключили его к входу RS232.

Я проследил сигнал полностью до MCU и выглядит нормально (подтвердил значение бита на RX контактный)

Какой сигнал вы использовали в качестве наземного ориентира?

1 голос
/ 14 апреля 2010

Если это RS485, правильно ли вы установили «состояние по умолчанию» шины? Как насчет правильного количества стоп-битов?

1 голос
/ 14 апреля 2010

RS485 довольно сильно отличается от RS232 на электрическом уровне (дифференциальный по сравнению с односторонним и +/- 6 В по сравнению с + 15 / -3 В) - обе стороны вашей линии связи используют один и тот же протокол?

...