Регистры 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 переключает выборку бита с трёх отсчётов на один — флаг шума тогда не работает.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| USART2 | 0x4000 4400 | всех |
| USART3 | 0x4000 4800 | всех |
| UART4 | 0x4000 4C00 | всех |
| UART5 | 0x4000 5000 | всех |
| UART7 | 0x4000 7800 | STM32F427, STM32F429, STM32F437, STM32F439 |
| UART8 | 0x4000 7C00 | STM32F427, STM32F429, STM32F437, STM32F439 |
| USART1 | 0x4001 1000 | всех |
| USART6 | 0x4001 1400 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| USART_SR | 0x00 | Флаги приёма, передачи и ошибок | 0x0000 00C0 (в описании регистра напечатано 0x000C0 00C0; значение — по карте регистров на с. 1013) |
| 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. Поля, которые вы не меняете, берутся из значения после сброса.
Значение: 0x000000C0
0000 0000 0000 0000 0000 0000 1100 0000
USART2->SR = 0x000000C0;USART_SR — флаги приёма, передачи и ошибок
Смещение 0x00, 32 бит, после сброса 0x0000 00C0 (в описании регистра напечатано 0x000C0 00C0; значение — по карте регистров на с. 1013). В коде: 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 в режиме пониженного потребления или тактирования смарт-карты.
Частые вопросы
Как рассчитать 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 и при ошибке.
Источники
- STMicroelectronics. RM0090: Reference manual (Rev 22) — раздел 30.6: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32F4Блоки периферии и заголовки CMSIS
- RCC — сброс и тактированиеRCC_CR, RCC_PLLCFGR, RCC_CFGR, RCC_CIR, RCC_AHB1RSTR, RCC_AHB2RSTR
- 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_LISR, DMA_HISR, DMA_LIFCR, DMA_HIFCR, DMA_SxCR, DMA_SxNDT
- 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, DBGMCU_APB1_FZ, DBGMCU_APB2_FZ