Перейти к содержанию

Интерфейс UART

UART - это простой последовательный интерфейс передачи данных между двумя устройствами. Расшифровка: Universal Asynchronous Receiver/Transmitter.

В практических проектах обычно говорят "UART", "serial", "TX/RX" или "UART-порт". Для новичка главное: UART передаёт данные по линии TX, принимает по линии RX, а для нормальной работы двум устройствам нужен общий GND.

Где UART используется

UART встречается почти везде:

  • отладочные логи микроконтроллера;
  • прошивка плат через USB-UART адаптер;
  • связь хоста с MCU в некоторых Klipper-сценариях;
  • GPS, RFID, fingerprint, датчики и другие модули;
  • настройка TMC-драйверов шаговых моторов;
  • связь двух микроконтроллеров;
  • сервисный порт на плате.

UART удобен тем, что требует мало проводов и хорошо подходит для простого обмена текстом, командами и диагностикой.

TX, RX и GND

Минимальное подключение:

  • TX - передача;
  • RX - приём;
  • GND - общий минус.

TX одного устройства подключают к RX другого:

Перекрёстное подключение TX/RX и общий GND при UART-соединении

Источник: SparkFun Electronics, CC BY-SA 4.0

Правило:

Device A TX -> Device B RX
Device A RX <- Device B TX
Device A GND -> Device B GND

Самая частая ошибка - соединить TX с TX и RX с RX. Иногда маркировка на модулях бывает запутанной, поэтому если связи нет, сначала перепроверь распиновку и документацию, а не меняй случайно все провода подряд.

UART, USB и USB-UART

UART - это не USB.

Компьютер обычно не имеет голых UART-пинов. Поэтому нужен USB-UART адаптер: он с одной стороны подключается к USB компьютера, а с другой даёт линии TX, RX, GND и иногда VCC, DTR, CTS.

Примеры:

  • компьютер читает логи с платы через USB-UART;
  • USB-UART прошивает плату без встроенного USB;
  • хост подключается к MCU по serial;
  • адаптер помогает восстановить плату после неудачной прошивки.

Не путай USB-разъём на плате и UART-пины на гребёнке. На некоторых платах USB уже подключён к встроенному USB-UART чипу, а на других USB идёт напрямую в микроконтроллер.

Уровни логики: 3.3V, 5V, RS-232

UART описывает способ передачи данных, но не гарантирует безопасный уровень напряжения.

В DIY-электронике чаще всего встречается TTL/CMOS UART:

  • 3.3V UART - ESP32, RP2040, STM32 и многие современные платы;
  • 5V UART - Arduino Uno/Nano и часть старых модулей.

Если подать 5V сигнал на вход 3.3V микроконтроллера, можно повредить плату. Для несовместимых уровней нужен преобразователь уровней или другая согласующая схема.

Отдельно существует RS-232. Это не "просто UART на разъёме DB9". У RS-232 другие уровни напряжения и другая электрическая логика. Нельзя подключать настоящий RS-232 порт напрямую к GPIO микроконтроллера. Нужен преобразователь уровня, например MAX232-подобная схема или готовый адаптер.

Скорость и формат

У UART должна совпадать скорость передачи. Частые значения:

9600
57600
115200
250000
1000000

Если скорость не совпадает, в терминале будет мусор или тишина.

Также есть формат передачи. Часто встречается 8N1:

  • 8 - 8 бит данных;
  • N - без parity;
  • 1 - один stop bit.

В большинстве простых задач достаточно выставить одинаковую скорость и стандартный 8N1, если документация модуля не требует другого.

UART в 3D-принтерах

В 3D-принтерах UART часто встречается в трёх разных ролях.

Связь хоста и платы

Некоторые платы могут общаться с хостом по serial/UART. В Klipper это описывается в секции [mcu] через serial.

Настройка драйверов TMC

У некоторых драйверов шаговых моторов UART используется для настройки тока, stealthChop/spreadCycle, диагностики и чтения статуса. Сам мотор при этом обычно управляется не UART, а сигналами STEP и DIR.

Отладка и прошивка

UART может использоваться для логов, bootloader-режима и восстановления платы через USB-UART адаптер.

Один UART - обычно два активных устройства

Классический UART - это связь между двумя устройствами. Нельзя бездумно подключать несколько передатчиков к одной RX линии.

Проблемы:

  • два устройства одновременно тянут линию TX;
  • данные смешиваются;
  • один модуль получает команды, предназначенные другому;
  • возможна электрическая конфликтная ситуация.

Иногда один TX можно слушать несколькими приёмниками, но это уже осознанное решение и не подходит как универсальное правило. Для новичка безопаснее считать: один UART-порт - одна пара устройств.

Что проверить перед подключением

Перед подключением UART проверь:

  • где TX, где RX;
  • нужен ли общий GND;
  • уровень логики: 3.3V или 5V;
  • это TTL UART или RS-232;
  • скорость передачи;
  • формат, если он указан;
  • не занят ли этот UART USB-логами или прошивкой;
  • не подключён ли к этой линии другой передатчик;
  • нужно ли подключать питание или только TX/RX/GND.

Питание с UART-адаптера подключают только если понятно, что плата должна питаться именно от него. Часто для диагностики нужны только TX, RX и GND.

Типовые ошибки

  • соединяют TX с TX, RX с RX;
  • забывают общий GND;
  • подают 5V UART на 3.3V вход;
  • путают TTL UART и RS-232;
  • выбирают неправильный baud rate;
  • подключают питание от USB-UART адаптера к уже запитанной плате;
  • используют UART-пины, занятые USB-логами или bootloader;
  • подключают несколько передатчиков к одной линии;
  • думают, что UART управляет мощной нагрузкой напрямую.

Главное

UART - простой интерфейс для обмена данными между двумя устройствами. Нужны перекрёстные TX/RX, общий GND, одинаковая скорость и совместимые уровни логики.

UART не служит питанием и не работает как силовой выход. Он передаёт данные, а не крутит моторы и не включает нагреватели напрямую.

Материалы по теме