LPUART (low-power UART)
Чтобы микроконтроллер на батарейке спал и при этом не пропускал команды по последовательному порту, в STM32L0, STM32H7 и многих других семействах есть LPUART — UART, которому для 9600 бод хватает часового кварца 32,768 кГц.
Обновлено Редакция GAW
LPUART (low-power UART) — блок последовательного порта STM32 с малым потреблением. По RM0377 ему достаточно такта LSE 32,768 кГц для связи до 9600 бод, а в режиме Stop он может ждать входящий кадр и будить микроконтроллер. В остальном это почти обычный UART: полный дуплекс, 7–9 бит данных, 1 или 2 стоп-бита, чётность, CTS/RTS, однопроводной полудуплекс, DMA.
Скорость и регистр BRR
В отличие от обычного USART, у LPUART делитель с коэффициентом 256 (RM0377, разд. 25.4.4):
Регистр LPUART_BRR 20-битный, значения меньше 0x300 запрещены, а такт f_CK должен лежать в пределах от 3 до 4096 скоростей.
| Такт | Скорость | BRR | Ошибка |
|---|---|---|---|
| LSE 32,768 кГц | 9600 бод | 0x369 | 0,093 % |
| LSE 32,768 кГц | 300 бод | 0x6D3A | 0 |
| 32 МГц | 115 200 бод | 0x115C7 | 0,0001 % |
| 32 МГц | 921 600 бод | 0x22B8 | 0,01 % |
От LSE (часового кварца) предел — 9600 бод; при такте 32 МГц — до 10 Мбод. Подобрать делитель и оценить ошибку можно в калькуляторе скорости UART.
Зачем два тактовых домена
Регистры LPUART живут на шине APB, а приёмник тактируется отдельно — от LSE, HSI16 или системного такта. Поэтому скорость не меняется при перенастройке PCLK, а при остановленной шине в Stop приёмник продолжает работать. В STM32H743 LPUART1 находится в домене D3 и может через BDMA писать данные в SRAM4, пока ядро спит (RM0433, рис. 39). Настройка UART в STM32 — в статье «UART в STM32».
Частые вопросы
Какую скорость даёт LPUART от кварца 32,768 кГц?
До 9600 бод. По RM0377 диапазон от этого такта — 300–9600 бод, а для 9600 в регистр LPUART_BRR записывают 0x369: фактическая скорость 9608,94 бод, ошибка 0,093 %. Для больших скоростей LPUART тактируют от HSI16 или системного такта: от 32 МГц — до 10 Мбод.
Как рассчитать LPUART_BRR?
По формуле RM0377: скорость = 256 · fCK / BRR, то есть BRR = 256 · fCK / скорость, округлённое до целого. Регистр 20-битный, значения меньше 0x300 запрещены, а fCK должна быть от 3 до 4096 скоростей. Например, 256 · 32 768 / 9600 ≈ 873,8 → 873 = 0x369 (наш расчёт совпадает с табл. 127).
Может ли LPUART разбудить STM32 из режима Stop?
Да: у LPUART два тактовых домена, и при такте от LSE или HSI16 он ждёт кадр в режиме Stop с очень малым потреблением, а по приёму будит микроконтроллер. Так устройство на батарейке спит, пока к нему не обратятся по UART.
Источники
- STMicroelectronics. RM0377: Ultra-low-power STM32L0x1 advanced Arm-based 32-bit MCUs. Reference manual, Rev 10 — разд. 25.1: LPUART — UART с полным дуплексом и малым потреблением; для связи до 9600 бод достаточно такта LSE 32,768 кГц, более высокие скорости — от других источников; в режиме Stop LPUART может ждать входящий кадр с крайне малым потреблением; полудуплекс по одному проводу, модемные сигналы CTS/RTS, многопроцессорная связь, DMA; разд. 25.2: скорость 300–9600 бод от 32,768 кГц, два тактовых домена — работа и пробуждение из Stop, скорость не зависит от перенастройки PCLK; 7, 8 или 9 бит данных, MSB или LSB первым, 1 или 2 стоп-бита, перестановка Tx/Rx, флаги ошибок переполнения, шума, кадра и чётности; разд. 25.4.4: скорость = 256 · fCK / LPUARTDIV, LPUARTDIV в LPUART_BRR (20 бит), значения меньше 0x300 записывать запрещено, fCK должна лежать в диапазоне от 3 до 4096 скоростей; от LSE максимум 9600 бод, от системного такта 32 МГц — до 10 Мбод; табл. 127: при 32,768 кГц для 9600 бод BRR = 0x369, фактически 9608,94 бод, ошибка 0,093 %; табл. 128: при 32 МГц 115 200 бод — 0x115C7, ошибка 0,0001 %
- STMicroelectronics. RM0433: STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — гл. 49 Low-power universal asynchronous receiver transmitter (LPUART); табл. 128 — запросы lpuart1_rx_dma и lpuart1_tx_dma идут через DMAMUX2 к BDMA домена D3; рис. 39 — передача SRAM4 → LPUART1 через BDMA
Нашли ошибку?
Смотрите также
- UART STM32BRR и OVER8, допуск по частоте, флаги, прерывания, DMA с IDLE, полудуплекс, RS-485
- UARTКадр 8N1, скорость и допуск, TX и RX, уровни, USB–UART, AVR и STM32
- Скорость UARTUBRR, BRR, TH1 и ошибка скорости
- Режим StopРежим низкого потребления STM32: такты остановлены, ОЗУ и регистры сохранены
- Скорость передачи (бод)Бит/с и бод: стандартные скорости и допуск UART
- Часовой кварц 32 768 ГцКамертонный кварц для RTC: 2¹⁵ Гц, малая нагрузка
- STM32L0Cortex-M0+, до 32 МГц, малое потребление: L010, L0x1, L0x2 с USB, L0x3 с ЖКИ — линейки и распиновки