UART står for Universal Asynchronous Receiver/Transmitter. Det er en meget almindelig og enkel måde at sende tekst, kommandoer og data mellem mikrokontrollere og eksterne moduler.
Den simple forbindelse
UART er normalt en punkt-til-punkt-forbindelse. De to enheder krydser TX og RX:
TX fra den ene enhed forbindes til RX på den anden, og omvendt. GND skal være fælles.
TX til RX
RX til TX
GND til GND
Forsyning efter enhedernes spændingskrav
UART har ikke en fælles clockledning. Sender og modtager skal derfor bruge samme serielle hastighedsindstilling og frame-format, for eksempel 9600, 8 databits, ingen paritet og 1 stopbit.
Hvad UART gør
UART sender data serielt, typisk en byte ad gangen.
Det bruger normalt to ledninger: TX og RX.
Kommunikationen er asynkron, så sender og modtager skal bruge samme serielle hastighedsindstilling og signalformat.
Hvorfor bruges UART?
Kommunikation med GPS-moduler, Bluetooth-moduler og andre serielle enheder
Debugging via Serial Monitor
Overførsel af kommandoer mellem mikrocontrollere
På Arduino Uno
Arduino Uno har typisk hardware-UART på digital pin 0 og 1.
Pin 0 er RX, pin 1 er TX.
Disse pins bruges ofte til seriell kommunikation og kan også være i konflikt med USB-tilslutning, hvis du samtidig bruger Serial Monitor.
Vigtige begreber
Seriel hastighedsindstilling – ofte kaldet baudrate; fx 9600 eller 115200. Byte-raten er lavere på grund af frame-overhead.
TX – transmit, send videre
RX – receive, modtag
En UART-frame
En byte sendes som en sekvens af bits. En typisk frame består af et startbit, 8 databits, eventuelt et paritetsbit og et eller to stopbits.
UART-frame-formatet fra Arduino’s officielle UART-guide. Startbit og stopbit markerer rammen, mens databits bærer indholdet.
Startbit – normalt logisk lav og markerer begyndelsen.
Databits – ofte 8 bits, sendt én ad gangen.
Paritet – valgfri enkel fejlkontrol.
Stopbit – normalt logisk høj og markerer slutningen.
Indstillingerne skal passe sammen
Hvis de to enheder bruger forskellige UART-indstillinger, bliver data fortolket forkert. Den serielle hastighedsindstilling, antal databits, paritet og antal stopbits skal derfor passe sammen.
Seriel indstilling: for eksempel 9600 eller 115200
Databits: ofte 8
Paritet: ingen, lige eller ulige
Stopbits: ofte 1
Hastighed i byte
Med den almindelige indstilling 8N1 bruger hver data-byte 10 sendeslots: ét startbit, 8 databits og ét stopbit. Derfor bliver byte-raten cirka en tiendedel af den valgte serielle indstilling:
9600-indstilling: ca. 960 byte/s
57600-indstilling: ca. 5,8 kB/s
115200-indstilling: ca. 11,5 kB/s
Paritet, ekstra stopbit, linjepauser og tekstens linjeskift bruger yderligere kapacitet. Derfor er den mængde nyttedata, programmet modtager, typisk lidt lavere.
Husk
UART er meget brugt, men den er typisk point-to-point mellem to enheder.
Hvis du vil have flere enheder på samme bus, er I2C eller SPI ofte mere praktiske.