Я широко использовал связь UART RS232 между микроконтроллерами. Теперь мне нужно связать мой микроконтроллер STM32F407 по шине RS485 с устройствами. Я мало что понял о RS485, но не совсем понял некоторые моменты. Пожалуйста, поправьте меня, если я ошибаюсь в своем понимании:
С точки зрения прошивки MCU оба одинаковы, поскольку мы используем одни и те же контакты для RS232 или RS485.
Основное различие заключается в их уровнях напряжения сигнала и двухточечном (RS232) или многоточечном (RS485).
В основном правильно. Для определенных конфигураций полудуплексного RS485 с обнаружением коллизий требуется сигнал включения драйвера и изменения программного обеспечения для обнаружения коллизий, которые RS232 никогда не понадобятся. В RS485 также может быть аппаратно или программно реализована адресация, которой никогда не будет в RS232.
Но для двухточечной связи вы можете использовать один и тот же код как для RS232, так и для полнодуплексного RS485.
RS232 использует несбалансированные сигналы. RS485 имеет сбалансированные сигналы, что радикально повышает помехозащищенность.
Вы правы, что несколько устройств могут использовать одни и те же провода RS485. Конечно, только один из них может передавать одновременно, но все они могут передавать по очереди. RS232 не имеет такой возможности, у каждого провода есть отдельный передатчик. RS485 нуждается в каком-то сложном программном обеспечении для поддержания правопорядка, если на одной шине есть несколько возможных передатчиков. Это общая сетевая проблема, и у нее есть несколько общих решений.
RS232 определяет, как представляются передаваемые биты и символы (= синхронизация) и квитирование для управления потоком, RS485 определяет только уровни битового напряжения, можно использовать как сложные тайминги, как он хочет.
ОШИБКИ: в комментариях утверждается, что общий формат данных асинхронной связи с начальными и стоповыми битами не является частью спецификации RS232. Пользователь Sam Gibson проверил это по текущему стандарту, так что это факт, и я был неправ.
Крис Стрэттон