class UART – duplex seriell kommunikationsbuss¶
UART implementerar det vanliga UART/USART-protokollet för duplex seriell kommunikation. På den fysiska nivån består det av 2 ledningar: RX och TX. Kommunikationsenheten är ett tecken (inte att förväxla med ett strängtecken) som kan vara 8 eller 9 bitar brett.
UART-objekt kan skapas och initieras med:
from machine import UART
uart = UART(3, 9600) # init with given baudrate
uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters
Bits kan vara 7, 8 eller 9. Stop kan vara 1 eller 2. Med parity=None stöds endast 8 och 9 bitar. Med paritet aktiverad stöds endast 7 och 8 bitar.
Ett UART-objekt fungerar som ett stream-objekt och läsning och skrivning sker med de vanliga strömmetoderna:
uart.read(10) # read 10 characters, returns a bytes object
uart.read() # read all available characters
uart.readline() # read a line
uart.readinto(buf) # read and store into the given buffer
uart.write('abc') # write the 3 characters
Konstruktorer¶
- class machine.UART(id: int, baudrate: int = 9600, bits: int = 8, parity: int | None = None, stop: int = 1, *, tx: Pin | None = None, rx: Pin | None = None, rts: Pin | None = None, cts: Pin | None = None, txbuf: int | None = None, rxbuf: int | None = None, timeout: int | None = None, timeout_char: int | None = None, invert: int = 0, flow: int = 0)¶
Konstruera ett UART-objekt med det angivna id:t.
Metoder¶
- init(baudrate: int = 9600, bits: int = 8, parity: int | None = None, stop: int = 1, *, tx: Pin | None = None, rx: Pin | None = None, rts: Pin | None = None, cts: Pin | None = None, txbuf: int | None = None, rxbuf: int | None = None, timeout: int | None = None, timeout_char: int | None = None, invert: int = 0, flow: int = 0) None¶
Initiera UART-bussen med de angivna parametrarna:
baudrate är klockfrekvensen.
bits är antalet bitar per tecken, 7, 8 eller 9.
parity är pariteten,
None, 0 (jämn) eller 1 (udda).stop är antalet stoppbitar, 1 eller 2.
Ytterligare parametrar (endast nyckelord) som kan stödjas av en port är:
tx anger vilket TX-stift som ska användas.
rx anger vilket RX-stift som ska användas.
rts anger vilket RTS-stift (utgång) som ska användas för hårdvarustyrd flödeskontroll vid mottagning.
cts anger vilket CTS-stift (ingång) som ska användas för hårdvarustyrd flödeskontroll vid sändning.
txbuf anger längden i tecken på TX-bufferten.
rxbuf anger längden i tecken på RX-bufferten.
timeout anger tiden att vänta på det första tecknet (i ms).
timeout_char anger tiden att vänta mellan tecken (i ms).
invert anger vilka ledningar som ska inverteras.
0inverterar inga ledningar (viloläget för båda ledningarna är logisk hög).UART.INV_TXinverterar TX-ledningen (viloläget för TX-ledningen är nu logisk låg).UART.INV_RXinverterar RX-ledningen (viloläget för RX-ledningen är nu logisk låg).UART.INV_TX | UART.INV_RXinverterar båda ledningarna (viloläge vid logisk låg).
flow anger vilka hårdvarusignaler för flödeskontroll som ska användas. Värdet är en bitmask.
0ignorerar hårdvarusignaler för flödeskontroll.UART.RTSaktiverar flödeskontroll vid mottagning genom att använda RTS-utgångsstiftet för att signalera om mottagnings-FIFO:n har tillräckligt med utrymme för att ta emot mer data.UART.CTSaktiverar flödeskontroll vid sändning genom att pausa överföringen när CTS-ingångsstiftet signalerar att mottagaren håller på att få slut på buffertutrymme.UART.RTS | UART.CTSaktiverar båda, för fullständig hårdvarustyrd flödeskontroll.
Anteckning
Det är möjligt att anropa
init()flera gånger på samma objekt för att omkonfigurera UART under drift. Det gör det möjligt att använda en enda UART-kringutrustning för att betjäna olika enheter anslutna till olika GPIO-stift. Endast en enhet kan betjänas åt gången i det fallet. Anropa inte hellerdeinit()eftersom det förhindrar attinit()anropas igen.
- deinit() None¶
Stäng av UART-bussen.
Anteckning
Du kommer inte att kunna anropa
init()på objektet efterdeinit(). En ny instans måste skapas i det fallet.
- any() int¶
Returnerar ett heltal som räknar antalet tecken som kan läsas utan blockering. Det returnerar 0 om inga tecken är tillgängliga och ett positivt tal om det finns tecken. Metoden kan returnera 1 även om det finns fler än ett tecken tillgängligt för läsning.
För mer avancerad förfrågan om tillgängliga tecken, använd select.poll:
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
- read(nbytes: int | None = None, /) bytes | None¶
Läs tecken. Om
nbytesanges läses som mest så många byte, annars läses så mycket data som möjligt. Det kan returnera tidigare om en timeout nås. Timeouten kan konfigureras i konstruktorn.Returvärde: ett bytes-objekt som innehåller de inlästa byten. Returnerar
Nonevid timeout.
- readinto(buf: bytearray, nbytes: int | None = None, /) int | None¶
Läs byte in i
buf. Omnbytesanges läses som mest så många byte. Annars läses som mestlen(buf)byte. Det kan returnera tidigare om en timeout nås. Timeouten kan konfigureras i konstruktorn.Returvärde: antalet byte som lästs och lagrats i
bufellerNonevid timeout.
- readline() bytes | None¶
Läs en rad som avslutas med ett radslutstecken. Det kan returnera tidigare om en timeout nås. Timeouten kan konfigureras i konstruktorn.
Returvärde: den inlästa raden eller
Nonevid timeout.
- write(buf: bytes) int | None¶
Skriv bytebufferten till bussen.
Returvärde: antalet skrivna byte eller
Nonevid timeout.
- sendbreak() None¶
Skicka ett break-tillstånd på bussen – dra TX låg under längre tid än en teckentid. Tillgänglig på STM32 och mimxrt; exponeras inte på alif.
- readchar() int¶
Läs ett enstaka tecken från UART och returnera det som ett heltal (eller
-1vid timeout). Lägre omkostnad änread(1)eftersom ingetbytes-objekt allokeras. Endast STM32.
- writechar(char: int) None¶
Skriv det enstaka tecknet
char(ett heltal i intervallet0–255) till UART. Lägre omkostnad änwrite()för sändningar av en enda byte. Endast STM32.
- flush() None¶
Blockera tills varje byte som för närvarande finns i sändningsbufferten har klockats ut på TX. Utlöser
OSErrorvid timeout; timeouten härleds från TX-buffertens storlek och den konfigurerade baudhastigheten, så om inte flödeskontroll är aktiverad och mottagaren stannar, returnerar anropet långt innan timeouten.
- txdone() bool¶
Returnerar
Truenär ingen överföring pågår (TX-bufferten är tom och skiftregistret har tömts),Falseannars. Användbart som ett icke-blockerande alternativ tillflush().
- irq(handler: Callable[[UART], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Installera ett återanrop som ska utlösas vid UART-händelser.
handlerär funktionen som ska anropas. Den fårUART-instansen som sitt enda argument. SkickaNoneför att ta bort en tidigare installerad hanterare.triggerär en bitmask av en eller fleraIRQ_*-konstanter (se Konstanter nedan) som väljer vilka händelser som utlöser återanropet.hard=Trueregistrerar en hård-avbrottshanterare (lägre latens, men hanteraren får inte allokera). Standardvärdet är ett schemalagt återanrop.Returnerar ett irq-objekt.
Inte alla IRQ-källor är tillgängliga på alla portar – se de enskilda
IRQ_*-konstanterna för tillgänglighet per port.
Konstanter¶
- RTS: int¶
Skicka till
flowför att aktivera RTS-hårdvaruflödeskontroll på mottagningssidan. Kombinera medCTSvia OR för att aktivera båda.
- IRQ_RXIDLE: int¶
irq()-utlösningsflagga: utlöses en gång efter att ett eller flera tecken har tagits emot och RX-ledningen sedan går i viloläge. Tillgänglig på alla OpenMV-portar.
- IRQ_RX: int¶
irq()-utlösningsflagga: utlöses efter varje mottaget tecken. Tillgänglig på STM32 och alif.