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

Регистры USART STM32F0

Регистры USART1–USART8 STM32F0: включение и формат кадра, отдельные регистры приёма RDR и передачи TDR, флаги ISR и их сброс записью в ICR, делитель скорости, управление драйвером RS-485, автоопределение скорости и тайм-аут приёма.

USART STM32F0 — новый блок, не такой, как у STM32F1 и F4: вместо регистров SR и DR есть ISR, ICR, RDR и TDR. Флаги ошибок сбрасываются записью 1 в ICR, а не чтением SR и DR; RXNE сбрасывается чтением RDR, TXE — записью TDR. Перед изменением формата кадра и скорости блок выключают битом UE (RM0091, раздел 27.8).

Скорость: USARTDIV = fCK / скорость при OVER8 = 0 и 2 × fCK / скорость при OVER8 = 1; в последнем случае младшие биты записываются в BRR со сдвигом. Источник fCK для USART1 (а у части линеек и USART2, USART3) выбирается в RCC_CFGR3: PCLK, SYSCLK, HSI или LSE — от LSE порт работает на 9600 бит/с и будит микроконтроллер из Stop.

Биты DEM, DEP, DEAT и DEDT управляют выводом DE драйвера RS-485 без программных задержек. Полный набор функций — LIN, IrDA, смарт-карта, автоопределение скорости — есть у USART1 и у части остальных портов; таблица возможностей каждого USART — в разделе 27.4 RM0091.

ЭкземплярБазовый адресЕсть у
USART20x4000 4400STM32F042, STM32F048, STM32F051, STM32F058, STM32F071, STM32F072, STM32F078, STM32F091, STM32F098
USART30x4000 4800STM32F071, STM32F072, STM32F078, STM32F091, STM32F098
USART40x4000 4C00STM32F071, STM32F072, STM32F078, STM32F091, STM32F098
USART50x4000 5000STM32F091, STM32F098
USART60x4001 1400STM32F091, STM32F098
USART70x4001 1800STM32F091, STM32F098
USART80x4001 1C00STM32F091, STM32F098
USART10x4001 3800всех

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

РегистрСмещениеНазначениеПосле сброса
USART_CR10x00Включение, формат кадра и прерывания0x0000 0000
USART_CR20x04Стоп-биты, синхронный режим, LIN, автоопределение скорости0x0000 0000
USART_CR30x08DMA, управление потоком, RS-485, полудуплекс, IrDA0x0000 0000
USART_BRR0x0CДелитель скорости0x0000 0000
USART_GTPR0x10Предделитель и защитное время (IrDA, смарт-карта)0x0000 0000
USART_RTOR0x14Тайм-аут приёма и длина блока0x0000 0000
USART_RQR0x18Запросы: пауза, автоскорость, сброс данных0x0000 0000
USART_ISR0x1CФлаги состояния и прерываний0x0200 00C0
USART_ICR0x20Сброс флагов0x0000 0000
USART_RDR0x24Принятые данные0x0000 0000
USART_TDR0x28Данные для передачи0x0000 0000

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

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

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

USART2->CR1 = 0x00000000;

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

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

31302928272625242322212019181716
—M1EOBIERTOIEDEATDEDT
1514131211109876543210
OVER8CMIEMMEMWAKEPCEPSPEIETXEIETCIERXNEIEIDLEIETEREUESMUE
  • M1 (бит 28) — Длина слова, старший бит: M1 M0 = 00 — 8 бит, 01 — 9 бит, 10 — 7 бит (только у STM32F042, STM32F048, STM32F071, STM32F072, STM32F078, STM32F091, STM32F098).
  • EOBIE (бит 27) — Прерывание по концу блока (смарт-карта).
  • RTOIE (бит 26) — Прерывание по тайм-ауту приёма.
  • DEAT (биты 25:21) — Задержка включения DE до старт-бита, в 1/16 или 1/8 бита (RS-485).
  • DEDT (биты 20:16) — Задержка выключения DE после стоп-бита, в 1/16 или 1/8 бита (RS-485).
  • OVER8 (бит 15) — Передискретизация: 16 или 8 отсчётов на бит.
    OVER8Значение
    016 отсчётов на бит
    18 отсчётов на бит
  • CMIE (бит 14) — Прерывание по совпадению символа с ADD.
  • MME (бит 13) — Разрешение немого режима приёмника (mute).
  • M (бит 12) — Длина слова: 8 или 9 бит данных (только у STM32F031, STM32F038, STM32F051, STM32F058).
  • M0 (бит 12) — Длина слова, младший бит (вместе с M1) (только у STM32F042, STM32F048, STM32F071, STM32F072, STM32F078, STM32F091, STM32F098).
  • WAKE (бит 11) — Выход из немого режима: по паузе на линии или по адресу.
  • PCE (бит 10) — Контроль чётности.
  • PS (бит 9) — Чётность: чёт или нечет.
    PSЗначение
    0Чётность (even)
    1Нечётность (odd)
  • PEIE (бит 8) — Прерывание по ошибке чётности.
  • TXEIE (бит 7) — Прерывание: регистр передачи пуст (в режиме FIFO — FIFO передатчика не полон).
  • TCIE (бит 6) — Прерывание по окончании передачи.
  • RXNEIE (бит 5) — Прерывание: приняты данные (в режиме FIFO — FIFO приёмника не пуст).
  • IDLEIE (бит 4) — Прерывание по паузе на линии приёма.
  • TE (бит 3) — Включение передатчика.
  • RE (бит 2) — Включение приёмника.
  • UESM (бит 1) — Работа в режиме Stop: USART может разбудить микроконтроллер.
  • UE (бит 0) — Включение USART.

USART_CR2 — стоп-биты, синхронный режим, LIN, автоопределение скорости

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

31302928272625242322212019181716
ADDRTOENABRMODEABRENMSBFIRSTDATAINVTXINVRXINV
1514131211109876543210
SWAPLINENSTOPCLKENCPOLCPHALBCL—LBDIELBDLADDM7—
  • ADD (биты 31:24) — Адрес узла или символ для сравнения (флаг CMF).
  • RTOEN (бит 23) — Включение тайм-аута приёма.
  • ABRMODE (биты 22:21) — Способ автоопределения скорости: по старт-биту, по фронтам, по символу 0x7F или 0x55.
  • ABREN (бит 20) — Автоопределение скорости по первому принятому символу.
  • MSBFIRST (бит 19) — Порядок битов: старшим вперёд.
  • DATAINV (бит 18) — Инверсия данных: единицы передаются низким уровнем.
  • TXINV (бит 17) — Инверсия уровня на выводе TX.
  • RXINV (бит 16) — Инверсия уровня на выводе RX.
  • SWAP (бит 15) — Обмен функций выводов TX и RX.
  • LINEN (бит 14) — Режим LIN.
  • STOP (биты 13:12) — Число стоп-битов: 1, 0,5, 2 или 1,5.
    STOPЗначение
    001 стоп-бит
    010,5 стоп-бита
    102 стоп-бита
    111,5 стоп-бита
  • CLKEN (бит 11) — Вывод тактового сигнала CK (синхронный режим).
  • CPOL (бит 10) — Уровень CK в паузе.
  • CPHA (бит 9) — Фронт CK, по которому захватываются данные.
  • LBCL (бит 8) — Тактовый импульс для последнего бита данных.
  • LBDIE (бит 6) — Прерывание по обнаружению паузы LIN (break).
  • LBDL (бит 5) — Длина паузы LIN: 10 или 11 бит.
  • ADDM7 (бит 4) — Длина адреса для пробуждения: 4 или 7 бит.

USART_CR3 — dMA, управление потоком, RS-485, полудуплекс, IrDA

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

31302928272625242322212019181716
—WUFIEWUSSCARCNT—
1514131211109876543210
DEPDEMDDREOVRDISONEBITCTSIECTSERTSEDMATDMARSCENNACKHDSELIRLPIRENEIE
  • WUFIE (бит 22) — Прерывание пробуждения из режима Stop.
  • WUS (биты 21:20) — Событие пробуждения из Stop: совпадение адреса, старт-бит или приём байта.
  • SCARCNT (биты 19:17) — Число повторов передачи в режиме смарт-карты.
  • DEP (бит 15) — Полярность сигнала DE.
  • DEM (бит 14) — Сигнал DE на выводе RTS для драйвера RS-485.
  • DDRE (бит 13) — Отключение DMA при ошибке приёма.
  • OVRDIS (бит 12) — Запрет флага переполнения: новые данные затирают RDR.
  • ONEBIT (бит 11) — Выборка бита по одному отсчёту вместо трёх.
  • CTSIE (бит 10) — Прерывание по изменению CTS.
  • CTSE (бит 9) — Аппаратное управление потоком по входу CTS.
  • RTSE (бит 8) — Аппаратное управление потоком по выходу RTS.
  • DMAT (бит 7) — DMA при передаче.
  • DMAR (бит 6) — DMA при приёме.
  • SCEN (бит 5) — Режим смарт-карты.
  • NACK (бит 4) — Ответ NACK при ошибке чётности (смарт-карта).
  • HDSEL (бит 3) — Полудуплекс по одному проводу TX.
  • IRLP (бит 2) — Пониженное потребление IrDA.
  • IREN (бит 1) — Режим IrDA SIR.
  • EIE (бит 0) — Прерывание по ошибкам: кадра (FE), переполнения (ORE) и шума (NE).

USART_BRR — делитель скорости

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

31302928272625242322212019181716
—
1514131211109876543210
DIV_MANTISSADIV_FRACTION
  • DIV_MANTISSA (биты 15:4) — Делитель скорости USARTDIV, биты 15:4.
  • DIV_FRACTION (биты 3:0) — Делитель скорости USARTDIV, биты 3:0 (при OVER8 = 1 — биты 3:1, сдвинутые вправо).

USART_GTPR — предделитель и защитное время (IrDA, смарт-карта)

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

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

USART_RTOR — тайм-аут приёма и длина блока

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

31302928272625242322212019181716
BLENRTO
1514131211109876543210
RTO
  • BLEN (биты 31:24) — Длина блока (смарт-карта).
  • RTO (биты 23:0) — Тайм-аут приёма в битах.

USART_RQR — запросы: пауза, автоскорость, сброс данных

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

31302928272625242322212019181716
—
1514131211109876543210
—TXFRQRXFRQMMRQSBKRQABRRQ
  • TXFRQ (бит 4) — Запрос: сбросить передаваемые данные.
  • RXFRQ (бит 3) — Запрос: сбросить принятые данные (флаг RXNE).
  • MMRQ (бит 2) — Запрос: перевести приёмник в немой режим.
  • SBKRQ (бит 1) — Запрос: передать паузу (break).
  • ABRRQ (бит 0) — Запрос: новое автоопределение скорости.

USART_ISR — флаги состояния и прерываний

Смещение 0x1C, 32 бит, после сброса 0x0200 00C0. В коде: USART2->ISR.

31302928272625242322212019181716
—REACKTEACKWUFRWUSBKFCMFBUSY
1514131211109876543210
ABRFABRE—EOBFRTOFCTSCTSIFLBDFTXETCRXNEIDLEORENEFEPE
  • REACK (бит 22) — Приёмник включён (подтверждение RE).
  • TEACK (бит 21) — Передатчик включён (подтверждение TE).
  • WUF (бит 20) — Пробуждение из режима Stop.
  • RWU (бит 19) — Приёмник в немом режиме.
  • SBKF (бит 18) — Идёт передача паузы.
  • CMF (бит 17) — Принят символ, равный ADD.
  • BUSY (бит 16) — Идёт приём.
  • ABRF (бит 15) — Автоопределение скорости завершено.
  • ABRE (бит 14) — Ошибка автоопределения скорости.
  • EOBF (бит 12) — Конец блока (смарт-карта).
  • RTOF (бит 11) — Тайм-аут приёма.
  • CTS (бит 10) — Уровень на входе CTS (инвертированный).
  • CTSIF (бит 9) — Изменение уровня CTS.
  • LBDF (бит 8) — Обнаружена пауза LIN.
  • TXE (бит 7) — Регистр TDR пуст — можно писать следующий символ (в режиме FIFO — FIFO не полон).
  • TC (бит 6) — Передача завершена: сдвиговый регистр пуст.
  • RXNE (бит 5) — В RDR есть принятые данные (в режиме FIFO — FIFO не пуст).
  • IDLE (бит 4) — Пауза на линии приёма.
  • ORE (бит 3) — Переполнение: принят новый символ, а RDR не прочитан.
  • NE (бит 2) — Шум при приёме.
  • FE (бит 1) — Ошибка кадра: нет стоп-бита.
  • PE (бит 0) — Ошибка чётности.

USART_ICR — сброс флагов

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

31302928272625242322212019181716
—WUCF—CMCF—
1514131211109876543210
—EOBCFRTOCF—CTSCFLBDCF—TCCF—IDLECFORECFNCFFECFPECF
  • WUCF (бит 20) — Сброс флага WUF записью 1.
  • CMCF (бит 17) — Сброс флага CMF записью 1.
  • EOBCF (бит 12) — Сброс флага EOBF записью 1.
  • RTOCF (бит 11) — Сброс флага RTOF записью 1.
  • CTSCF (бит 9) — Сброс флага CTSIF записью 1.
  • LBDCF (бит 8) — Сброс флага LBDF записью 1.
  • TCCF (бит 6) — Сброс флага TC записью 1.
  • IDLECF (бит 4) — Сброс флага IDLE записью 1.
  • ORECF (бит 3) — Сброс флага ORE записью 1.
  • NCF (бит 2) — Сброс флага NE записью 1.
  • FECF (бит 1) — Сброс флага FE записью 1.
  • PECF (бит 0) — Сброс флага PE записью 1.

USART_RDR — принятые данные

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

1514131211109876543210
—RDR
  • RDR (биты 8:0) — Принятый символ.

USART_TDR — данные для передачи

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

1514131211109876543210
—TDR
  • TDR (биты 8:0) — Символ для передачи.

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

Как рассчитать BRR для 115 200 бит/с при 48 МГц на STM32F0?

При OVER8 = 0: BRR = 48 000 000 / 115 200 ≈ 416,7 — записывают 417 (0x1A1). Реальная скорость 115 108 бит/с, ошибка −0,08 %.

Как сбросить ошибку переполнения ORE на STM32F0?

Запишите 1 в бит ORECF регистра USART_ICR. Пока ORE установлен, приём новых символов не идёт. Если переполнения в вашем протоколе допустимы, бит OVRDIS в CR3 отключает их обнаружение.

Источники

  1. STMicroelectronics. RM0091: Reference manual (Rev 10) — раздел 27.8: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f0 v2.3.8: заголовки CMSIS stm32f031x6.h, stm32f038xx.h, stm32f042x6.h, stm32f048xx.h, stm32f051x8.h, stm32f058xx.h, stm32f071xb.h, stm32f072xb.h, stm32f078xx.h, stm32f091xc.h, stm32f098xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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