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

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):

скорость=256⋅fCKLPUARTDIV,LPUARTDIV≥0x300.\text{скорость} = \frac{256 \cdot f_\text{CK}}{\text{LPUARTDIV}}, \qquad \text{LPUARTDIV} \ge \text{0x300}.

Регистр LPUART_BRR 20-битный, значения меньше 0x300 запрещены, а такт f_CK должен лежать в пределах от 3 до 4096 скоростей.

ТактСкоростьBRRОшибка
LSE 32,768 кГц9600 бод0x3690,093 %
LSE 32,768 кГц300 бод0x6D3A0
32 МГц115 200 бод0x115C70,0001 %
32 МГц921 600 бод0x22B80,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.

Источники

  1. 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 %
  2. 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

Нашли ошибку?