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

Регистры USART STM32L1

Регистры USART1, USART2, USART3, UART4 и UART5 STM32L1: флаги состояния SR, данные DR, делитель скорости BRR, настройка кадра и прерываний в CR1–CR3, защитный интервал и предделитель GTPR.

USART STM32L1 — того же поколения, что у STM32F1 и STM32F4: флаги в регистре SR, данные в одном регистре DR, скорость BRR = fCK / скорость при передискретизации 16 (OVER8 = 0). USART1 тактируется от APB2, остальные порты — от APB1 (RM0038, раздел 27.6).

Флаги ошибок ORE, NE и FE сбрасываются последовательностью «чтение SR, затем чтение DR». UART4 и UART5 есть у STM32L1xxxD, xDX и xE и не поддерживают синхронный режим и смарт-карты.

ЭкземплярБазовый адресЕсть у
USART20x4000 4400всех
USART30x4000 4800всех
UART40x4000 4C00STM32L151xD/xDX/xE, STM32L152xD/xDX/xE, STM32L162xD/xDX/xE
UART50x4000 5000STM32L151xD/xDX/xE, STM32L152xD/xDX/xE, STM32L162xD/xDX/xE
USART10x4001 3800всех

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

РегистрСмещениеНазначениеПосле сброса
USART_SR0x00Флаги приёма, передачи и ошибок0x00C0 0000
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. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x00C00000

0000 0000 1100 0000 0000 0000 0000 0000

USART2->SR = 0x00C00000;

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

Смещение 0x00, 32 бит, после сброса 0x00C0 0000. В коде: 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 в режиме пониженного потребления или тактирования смарт-карты.

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

Как задать 115200 бод на USART2 STM32L1 при 32 МГц?

При OVER8 = 0: USARTDIV = 32 000 000 / (16 × 115 200) ≈ 17,36, то есть мантисса 17 и дробь 6 (0,36 × 16): BRR = 0x116. Ошибка скорости около 0,08 %.

Почему прерывание USART вызывается снова и снова?

Скорее всего, установлен ORE: при RXNEIE он тоже вызывает прерывание. Сбросьте его чтением SR и затем DR — как при обычном приёме байта.

Источники

  1. STMicroelectronics. RM0038: Reference manual (Rev 18) — раздел 27.6: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-l1 v2.3.4: заголовки CMSIS stm32l100xb.h, stm32l100xba.h, stm32l100xc.h, stm32l151xb.h, stm32l151xba.h, stm32l151xc.h, stm32l151xca.h, stm32l151xd.h, stm32l151xdx.h, stm32l151xe.h, stm32l152xb.h, stm32l152xba.h, stm32l152xc.h, stm32l152xca.h, stm32l152xd.h, stm32l152xdx.h, stm32l152xe.h, stm32l162xc.h, stm32l162xca.h, stm32l162xd.h, stm32l162xdx.h, stm32l162xe.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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