Регистры 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 означает лишь, что байт перешёл в сдвиговый регистр.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| USART2 | 0x4000 4400 | всех |
| USART3 | 0x4000 4800 | STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107 |
| UART4 | 0x4000 4C00 | STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107 |
| UART5 | 0x4000 5000 | STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107 |
| USART1 | 0x4001 3800 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| USART_SR | 0x00 | Флаги приёма, передачи и ошибок | 0x00C0 |
| USART_DR | 0x04 | Данные: передача и приём | не определено |
| USART_BRR | 0x08 | Делитель скорости обмена | 0x0000 |
| USART_CR1 | 0x0C | Включение, формат кадра и прерывания | 0x0000 |
| USART_CR2 | 0x10 | Стоп-биты, вывод CK и режим LIN | 0x0000 |
| USART_CR3 | 0x14 | DMA, CTS и RTS, полудуплекс, IrDA и смарт-карта | 0x0000 |
| USART_GTPR | 0x18 | Защитное время и предделитель | 0x0000 |
Конструктор значения
Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.
Значение: 0x000000C0
0000 0000 0000 0000 0000 0000 1100 0000
USART2->SR = 0x000000C0;USART_SR — флаги приёма, передачи и ошибок
Смещение 0x00, 32 бит, после сброса 0x00C0. В коде: 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 бит, после сброса не определено. В коде: 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. В коде: 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 в шестнадцатых.
USART_CR1 — включение, формат кадра и прерывания
Смещение 0x0C, 32 бит, после сброса 0x0000. В коде: 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 |
| — | UE | M | WAKE | PCE | PS | PEIE | TXEIE | TCIE | RXNEIE | IDLEIE | TE | RE | RWU | SBK | |
- 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. В коде: 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. В коде: 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 |
| — | CTSIE | CTSE | RTSE | DMAT | DMAR | SCEN | NACK | HDSEL | IRLP | IREN | EIE | ||||
- 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.
| 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 в режиме пониженного потребления или тактирования смарт-карты.
Частые вопросы
Как настроить 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.
Источники
- STMicroelectronics. RM0008: Reference manual (Rev 21) — раздел 27.6: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32F1Блоки периферии и заголовки CMSIS
- RCC — сброс и тактированиеRCC_CR, RCC_CFGR, RCC_CIR, RCC_APB2RSTR, RCC_APB1RSTR, RCC_AHBENR
- GPIO — порты ввода-выводаGPIOx_CRL, GPIOx_CRH, GPIOx_IDR, GPIOx_ODR, GPIOx_BSRR, GPIOx_BRR
- AFIO — переназначение функций и выбор входов EXTIAFIO_EVCR, AFIO_MAPR, AFIO_EXTICR1, AFIO_EXTICR2, AFIO_EXTICR3, AFIO_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 — аналого-цифровые преобразователиADC_SR, ADC_CR1, ADC_CR2, ADC_SMPR1, ADC_SMPR2, ADC_JOFR1
- 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