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

Регистры USART STM32F4

Регистры USART1, USART2, USART3, USART6 и UART4, UART5, UART7, UART8 STM32F4: флаги, регистр данных, делитель скорости с передискретизацией 16 или 8, формат кадра, прерывания, DMA, CTS и RTS, LIN, IrDA и смарт-карта.

У STM32F4 шесть или восемь последовательных портов: USART1 и USART6 на шине APB2, USART2, USART3, UART4 и UART5 на APB1, у STM32F42x/43x ещё UART7 и UART8. Синхронного режима, аппаратного управления потоком и режима смарт-карты у UART нет (RM0090, таблица режимов USART в главе 30).

Скорость = fCK / (8 × (2 − OVER8) × USARTDIV), где fCK — PCLK2 для USART1 и USART6 и PCLK1 для остальных. При OVER8 = 0 блок берёт 16 отсчётов на бит и дробная часть USARTDIV задаётся в шестнадцатых, при OVER8 = 1 — 8 отсчётов, дробь в восьмых, а бит 3 регистра BRR должен быть нулём. Передискретизация на 8 поднимает предельную скорость до fCK / 8, но снижает допуск приёмника к расхождению частот; в режимах LIN, IrDA и смарт-карты OVER8 принудительно равен 0.

Флаги ошибок ORE, NF, FE и PE и флаг паузы IDLE сбрасываются чтением SR и следом DR, RXNE — чтением DR, TC — чтением SR и записью DR или записью нуля. Бит ONEBIT в CR3 переключает выборку бита с трёх отсчётов на один — флаг шума тогда не работает.

ЭкземплярБазовый адресЕсть у
USART20x4000 4400всех
USART30x4000 4800всех
UART40x4000 4C00всех
UART50x4000 5000всех
UART70x4000 7800STM32F427, STM32F429, STM32F437, STM32F439
UART80x4000 7C00STM32F427, STM32F429, STM32F437, STM32F439
USART10x4001 1000всех
USART60x4001 1400всех

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

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

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

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

Значение: 0x000000C0

0000 0000 0000 0000 0000 0000 1100 0000

USART2->SR = 0x000000C0;

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

Смещение 0x00, 32 бит, после сброса 0x0000 00C0 (в описании регистра напечатано 0x000C0 00C0; значение — по карте регистров на с. 1013). В коде: 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 бит, после сброса 0xXXXX XXXX. В коде: USART2->DR.

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

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

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

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

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

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

31302928272625242322212019181716
—
1514131211109876543210
OVER8—UEMWAKEPCEPSPEIETXEIETCIERXNEIEIDLEIETERERWUSBK
  • OVER8 (бит 15) — Передискретизация: 16 или 8 отсчётов на бит.
    OVER8Значение
    016 отсчётов на бит
    18 отсчётов на бит
  • 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 0000. В коде: 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 0000. В коде: USART2->CR3.

31302928272625242322212019181716
—
1514131211109876543210
—ONEBITCTSIECTSERTSEDMATDMARSCENNACKHDSELIRLPIRENEIE
  • ONEBIT (бит 11) — Выборка бита: три отсчёта или один (без флага шума).
    ONEBITЗначение
    0Три отсчёта
    1Один отсчёт
  • 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 0000. В коде: USART2->GTPR.

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

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

Как рассчитать BRR для 115 200 бит/с на STM32F407?

Для USART2 при PCLK1 = 42 МГц и OVER8 = 0: USARTDIV = 42 000 000 / (16 × 115 200) ≈ 22,786. Целая часть 22, дробь 0,786 × 16 ≈ 13 — BRR = (22 << 4) | 13 = 0x16D. Фактическая скорость 115 068 бит/с, ошибка −0,11 %.

Когда включать OVER8?

Когда нужна скорость выше fCK / 16, например 5,25 Мбит/с от 42 МГц. При OVER8 = 1 приёмник менее терпим к неточности частоты передатчика, поэтому на обычных скоростях оставляют передискретизацию 16.

Как сбросить флаг ORE на STM32F4?

Прочитайте USART_SR, затем USART_DR. Флаг ORE вызывает прерывание вместе с RXNE, если установлен RXNEIE, поэтому обработчик должен читать DR и при ошибке.

Источники

  1. STMicroelectronics. RM0090: Reference manual (Rev 22) — раздел 30.6: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f4 v2.6.11: заголовки CMSIS stm32f405xx.h, stm32f407xx.h, stm32f415xx.h, stm32f417xx.h, stm32f427xx.h, stm32f429xx.h, stm32f437xx.h, stm32f439xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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