Регистры 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 и не поддерживают синхронный режим и смарт-карты.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| USART2 | 0x4000 4400 | всех |
| USART3 | 0x4000 4800 | всех |
| UART4 | 0x4000 4C00 | STM32L151xD/xDX/xE, STM32L152xD/xDX/xE, STM32L162xD/xDX/xE |
| UART5 | 0x4000 5000 | STM32L151xD/xDX/xE, STM32L152xD/xDX/xE, STM32L162xD/xDX/xE |
| USART1 | 0x4001 3800 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| USART_SR | 0x00 | Флаги приёма, передачи и ошибок | 0x00C0 0000 |
| USART_DR | 0x04 | Данные: передача и приём | 0xXXXX XXXX |
| USART_BRR | 0x08 | Делитель скорости обмена | 0x0000 0000 |
| USART_CR1 | 0x0C | Включение, формат кадра и прерывания | 0x0000 0000 |
| USART_CR2 | 0x10 | Стоп-биты, вывод CK и режим LIN | 0x0000 0000 |
| USART_CR3 | 0x14 | DMA, CTS и RTS, полудуплекс, IrDA и смарт-карта | 0x0000 0000 |
| USART_GTPR | 0x18 | Защитное время и предделитель | 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | CTS | LBD | TXE | TC | RXNE | IDLE | ORE | NE | FE | PE | |||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | DR | ||||||||||||||
- DR (биты 8:0) — Данные: запись — на передачу, чтение — принятый байт (9 бит при M = 1).
USART_BRR — делитель скорости обмена
Смещение 0x08, 32 бит, после сброса 0x0000 0000. В коде: USART2->BRR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DIV_Mantissa | DIV_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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OVER8 | — | UE | M | WAKE | PCE | PS | PEIE | TXEIE | TCIE | RXNEIE | IDLEIE | TE | RE | RWU | SBK |
- OVER8 (бит 15) — Передискретизация: 16 или 8 отсчётов на бит.
OVER8 Значение 0 16 отсчётов на бит 1 8 отсчётов на бит - UE (бит 13) — Включение USART.
- M (бит 12) — Длина слова: 8 или 9 бит данных.
M Значение 0 8 бит данных 1 9 бит данных - 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | LINEN | STOP | CLKEN | CPOL | CPHA | LBCL | — | LBDIE | LBDL | — | ADD | ||||
- LINEN (бит 14) — Режим LIN.
- STOP (биты 13:12) — Число стоп-битов.
STOP Значение 00 1 стоп-бит 01 0,5 стоп-бита (нет у UART) 10 2 стоп-бита 11 1,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 Значение 0 10 бит 1 11 бит - ADD (биты 3:0) — Адрес узла для многоточечной связи.
USART_CR3 — dMA, CTS и RTS, полудуплекс, IrDA и смарт-карта
Смещение 0x14, 32 бит, после сброса 0x0000 0000. В коде: USART2->CR3.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ONEBIT | CTSIE | CTSE | RTSE | DMAT | DMAR | SCEN | NACK | HDSEL | IRLP | IREN | EIE | |||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GT | PSC | ||||||||||||||
- 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 — как при обычном приёме байта.
Источники
- STMicroelectronics. RM0038: Reference manual (Rev 18) — раздел 27.6: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32L1Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_CIR, RCC_AHBRSTR, RCC_APB2RSTR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_MEMRMP, SYSCFG_PMC, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4
- EXTI — контроллер внешних прерываний и событийEXTI_IMR, EXTI_EMR, EXTI_RTSR, EXTI_FTSR, EXTI_SWIER, EXTI_PR
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_DR, I2C_SR1
- TIM — таймеры общего назначения и базовыеTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- DMA — контроллеры прямого доступа к памятиDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- АЦП — аналого-цифровой преобразовательADC_SR, ADC_CR1, ADC_CR2, ADC_SMPR1, ADC_SMPR2, ADC_SMPR3
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — блок вычисления CRCCRC_DR, CRC_IDR, CRC_CR
- DBGMCU — поддержка отладкиDBGMCU_IDCODE, DBGMCU_CR, DBGMCU_APB1_FZ, DBGMCU_APB2_FZ
- PWR — управление питаниемPWR_CR, PWR_CSR
- FLASH — интерфейс флеш-памяти и EEPROMFLASH_ACR, FLASH_PECR, FLASH_PDKEYR, FLASH_PEKEYR, FLASH_PRGKEYR, FLASH_OPTKEYR
- RTC — часы реального времениRTC_TR, RTC_DR, RTC_CR, RTC_ISR, RTC_PRER, RTC_WUTR
- ЦАП — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2