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

Регистры USART STM32F1

Регистры USART1–USART3, UART4 и UART5 STM32F1: флаги приёма и передачи, регистр данных, делитель скорости, длина слова, чётность, стоп-биты, прерывания, DMA, CTS и RTS, режимы LIN, IrDA и смарт-карты.

У STM32F103 до пяти последовательных портов: USART1 на шине APB2 и USART2, USART3, UART4, UART5 на APB1. Все работают в асинхронном режиме, полудуплексе по одному проводу, LIN и IrDA; синхронного режима с выводом CK, аппаратного управления потоком и режима смарт-карты у UART4 и UART5 нет, а UART5 не работает с DMA (RM0008, таблица режимов USART в главе 27).

Скорость задаёт регистр BRR: скорость = fCK / (16 × USARTDIV), где fCK — PCLK2 для USART1 и PCLK1 для остальных. USARTDIV — число с фиксированной точкой: целая часть в поле DIV_Mantissa, дробная в шестнадцатых — в DIV_Fraction. Например, 115 200 бит/с при 72 МГц: USARTDIV = 39,0625, BRR = 0x271.

Флаги ошибок ORE, NE, FE и PE и флаг паузы IDLE сбрасываются чтением SR и следом DR, RXNE — чтением DR, TC — чтением SR и записью DR или записью нуля, CTS и LBD — записью нуля. Перед выключением передатчика или переключением драйвера RS-485 на приём ждут TC, а не TXE: TXE означает лишь, что байт перешёл в сдвиговый регистр.

ЭкземплярБазовый адресЕсть у
USART20x4000 4400всех
USART30x4000 4800STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107
UART40x4000 4C00STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107
UART50x4000 5000STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107
USART10x4001 3800всех

Регистры блока

РегистрСмещениеНазначениеПосле сброса
USART_SR0x00Флаги приёма, передачи и ошибок0x00C0
USART_DR0x04Данные: передача и приёмне определено
USART_BRR0x08Делитель скорости обмена0x0000
USART_CR10x0CВключение, формат кадра и прерывания0x0000
USART_CR20x10Стоп-биты, вывод CK и режим LIN0x0000
USART_CR30x14DMA, CTS и RTS, полудуплекс, IrDA и смарт-карта0x0000
USART_GTPR0x18Защитное время и предделитель0x0000

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x000000C0

0000 0000 0000 0000 0000 0000 1100 0000

USART2->SR = 0x000000C0;

USART_SR — флаги приёма, передачи и ошибок

Смещение 0x00, 32 бит, после сброса 0x00C0. В коде: USART2->SR.

31302928272625242322212019181716
—
1514131211109876543210
—CTSLBDTXETCRXNEIDLEORENEFEPE
  • CTS (бит 9) — Изменился сигнал nCTS; сбрасывается записью 0 (нет у UART).
  • LBD (бит 8) — Обнаружен разрыв LIN; сбрасывается записью 0.
  • TXE (бит 7) — Регистр данных пуст: можно записать следующий байт.
  • TC (бит 6) — Передача завершена целиком, включая стоп-биты.
  • RXNE (бит 5) — Принят байт: данные ждут в DR, флаг сбрасывается чтением DR.
  • IDLE (бит 4) — На линии приёма пауза: линия свободна после кадра.
  • ORE (бит 3) — Переполнение: новый байт пришёл, пока прежний не прочитан.
  • NE (бит 2) — Шум на линии при приёме кадра.
  • FE (бит 1) — Ошибка кадра: на месте стоп-бита нет высокого уровня.
  • PE (бит 0) — Ошибка чётности.

USART_DR — данные: передача и приём

Смещение 0x04, 32 бит, после сброса не определено. В коде: USART2->DR.

31302928272625242322212019181716
—
1514131211109876543210
—DR
  • DR (биты 8:0) — Данные: запись — на передачу, чтение — принятый байт (9 бит при M = 1).

USART_BRR — делитель скорости обмена

Смещение 0x08, 32 бит, после сброса 0x0000. В коде: USART2->BRR.

31302928272625242322212019181716
—
1514131211109876543210
DIV_MantissaDIV_Fraction
  • DIV_Mantissa (биты 15:4) — Целая часть делителя USARTDIV.
  • DIV_Fraction (биты 3:0) — Дробная часть USARTDIV в шестнадцатых.

USART_CR1 — включение, формат кадра и прерывания

Смещение 0x0C, 32 бит, после сброса 0x0000. В коде: USART2->CR1.

31302928272625242322212019181716
—
1514131211109876543210
—UEMWAKEPCEPSPEIETXEIETCIERXNEIEIDLEIETERERWUSBK
  • UE (бит 13) — Включение USART.
  • M (бит 12) — Длина слова: 8 или 9 бит данных.
    MЗначение
    08 бит данных
    19 бит данных
  • WAKE (бит 11) — Выход из режима ожидания адреса: по паузе на линии или по адресной метке.
    WAKEЗначение
    0По паузе на линии
    1По адресной метке
  • PCE (бит 10) — Включение контроля чётности.
  • PS (бит 9) — Вид чётности.
    PSЗначение
    0Чётность (even)
    1Нечётность (odd)
  • PEIE (бит 8) — Прерывание по ошибке чётности.
  • TXEIE (бит 7) — Прерывание по флагу TXE.
  • TCIE (бит 6) — Прерывание по завершении передачи.
  • RXNEIE (бит 5) — Прерывание по приёму байта и по переполнению.
  • IDLEIE (бит 4) — Прерывание по паузе на линии.
  • TE (бит 3) — Включение передатчика.
  • RE (бит 2) — Включение приёмника.
  • RWU (бит 1) — Приёмник в режиме ожидания адреса (mute).
  • SBK (бит 0) — Отправка разрыва (break).

USART_CR2 — стоп-биты, вывод CK и режим LIN

Смещение 0x10, 32 бит, после сброса 0x0000. В коде: USART2->CR2.

31302928272625242322212019181716
—
1514131211109876543210
—LINENSTOPCLKENCPOLCPHALBCL—LBDIELBDL—ADD
  • LINEN (бит 14) — Режим LIN.
  • STOP (биты 13:12) — Число стоп-битов.
    STOPЗначение
    001 стоп-бит
    010,5 стоп-бита (нет у UART)
    102 стоп-бита
    111,5 стоп-бита (нет у UART)
  • CLKEN (бит 11) — Включение вывода CK для синхронного режима (нет у UART).
  • CPOL (бит 10) — Уровень CK вне передачи.
    CPOLЗначение
    0Низкий уровень
    1Высокий уровень
  • CPHA (бит 9) — Фронт CK, по которому захватываются данные.
    CPHAЗначение
    0Первый фронт CK
    1Второй фронт CK
  • LBCL (бит 8) — Импульс CK для последнего бита данных.
  • LBDIE (бит 6) — Прерывание по разрыву LIN.
  • LBDL (бит 5) — Длина разрыва LIN.
    LBDLЗначение
    010 бит
    111 бит
  • ADD (биты 3:0) — Адрес узла для многоточечной связи.

USART_CR3 — dMA, CTS и RTS, полудуплекс, IrDA и смарт-карта

Смещение 0x14, 32 бит, после сброса 0x0000. В коде: USART2->CR3.

31302928272625242322212019181716
—
1514131211109876543210
—CTSIECTSERTSEDMATDMARSCENNACKHDSELIRLPIRENEIE
  • CTSIE (бит 10) — Прерывание по изменению nCTS.
  • CTSE (бит 9) — Управление потоком по входу nCTS: передача только при низком nCTS.
  • RTSE (бит 8) — Управление потоком по выходу nRTS: низкий уровень — приёмник готов.
  • DMAT (бит 7) — DMA при передаче.
  • DMAR (бит 6) — DMA при приёме.
  • SCEN (бит 5) — Режим смарт-карты.
  • NACK (бит 4) — Ответ NACK при ошибке чётности в режиме смарт-карты.
  • HDSEL (бит 3) — Полудуплекс по одному проводу.
  • IRLP (бит 2) — IrDA с пониженным потреблением.
  • IREN (бит 1) — Режим IrDA.
  • EIE (бит 0) — Прерывание по ошибкам FE, ORE и шума при приёме через DMA.

USART_GTPR — защитное время и предделитель

Смещение 0x18, 32 бит, после сброса 0x0000. В коде: USART2->GTPR.

31302928272625242322212019181716
—
1514131211109876543210
GTPSC
  • GT (биты 15:8) — Защитное время режима смарт-карты, в периодах скорости обмена.
  • PSC (биты 7:0) — Предделитель: частота IrDA в режиме пониженного потребления или тактирования смарт-карты.

Частые вопросы

Как настроить USART1 STM32F103 на 115 200 бит/с?

Включите тактирование USART1 и порта A битами USART1EN и IOPAEN в RCC_APB2ENR. PA9 (TX) настройте как альтернативный двухтактный выход (CNF = 10, MODE = 11), PA10 (RX) оставьте входом. При PCLK2 = 72 МГц запишите USART1->BRR = 0x271 и включите блок: USART1->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE.

Почему приём останавливается после ошибки переполнения?

Флаг ORE ставится, когда новый байт пришёл, а прежний ещё не прочитан из DR. Новые данные при этом теряются, пока флаг не сброшен. Сбросьте его чтением SR, затем DR — например, в обработчике прерывания всегда читайте DR, даже если байт не нужен.

Чем флаг TXE отличается от TC?

TXE = 1 — регистр данных пуст, можно записать следующий байт, хотя предыдущий ещё передаётся. TC = 1 — передача закончена целиком, включая стоп-биты. По TXE удобно подавать поток данных, по TC — выключать передатчик или переключать направление RS-485.

Источники

  1. STMicroelectronics. RM0008: Reference manual (Rev 21) — раздел 27.6: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f1 v4.3.5: заголовки CMSIS stm32f101x6.h, stm32f101xb.h, stm32f101xe.h, stm32f101xg.h, stm32f102x6.h, stm32f102xb.h, stm32f103x6.h, stm32f103xb.h, stm32f103xe.h, stm32f103xg.h, stm32f105xc.h, stm32f107xc.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры STM32F1

Калькуляторы и статьи