Idle line detection (UART)
Een UART-functie die afgaat wanneer de ontvangstlijn een volledige tekentijd stil is geweest: de manier van de hardware om te zeggen dat een bericht is afgelopen.
DMA is uitstekend voor het ontvangen van seriële data zonder dat de CPU elke byte aanraakt, maar DMA wil vooraf de lengte weten. Een GPS-module of een antwoord op een AT-commando stuurt regels van onbekende lengte. Idle line detection lost dat op: zodra de lijn na het laatste teken een heel frame lang inactief (hoog) is geweest, zet de UART een vlag en kan hij een interrupt geven. Op STM32 heet dit IDLE.
Het resulterende patroon is circulaire DMA naar een ringbuffer plus drie interrupts: half-transfer, wrap-around en idle. In de handler lees je hoever de DMA-teller is opgeschoven en weet je precies welke bytes nieuw zijn. Het addertje: het idle-venster is slechts één teken lang, en een zender die midden in een pakket pauzeert levert twee halve berichten op. Nieuwere types voegen daarom ook een instelbare receiver timeout toe.