Обнаружение простоя линии (UART idle line)
Функция UART, срабатывающая, когда линия приёма молчала целое время символа, — способ железа сообщить, что сообщение закончилось.
DMA отлично принимает последовательные данные без участия процессора, но ему нужно знать длину заранее. GPS-модуль или ответ на AT-команду присылают строки неизвестной длины. Обнаружение простоя решает задачу: когда после последнего символа линия простояла в покое (высокий уровень) целый кадр, UART выставляет флаг и может вызвать прерывание. В STM32 это называется IDLE.
Получается шаблон: циклический DMA в кольцевой буфер плюс три прерывания — половина передачи, оборот буфера и простой. В обработчике читают, насколько продвинулся счётчик DMA, и точно знают, какие байты новые. Подвох в том, что окно простоя длится всего один символ: отправитель, сделавший паузу посреди пакета, породит два полусообщения. Поэтому новые чипы добавляют ещё и настраиваемый таймаут приёмника.