klasa UART – dvosmjerna serijska komunikacijska sabirnica¶
UART implementira standardni UART/USART dvosmjerni serijski komunikacijski protokol. Na fizičkoj razini sastoji se od 2 linije: RX i TX. Jedinica komunikacije je znak (ne treba ga miješati sa znakom u nizu) koji može biti širine 8 ili 9 bitova.
UART objekti mogu se stvoriti i inicijalizirati pomoću:
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
Broj bitova može biti 7, 8 ili 9. Stop bitova može biti 1 ili 2. Uz parity=None podržano je samo 8 i 9 bitova. Kada je paritet omogućen, podržano je samo 7 i 8 bitova.
UART objekt ponaša se poput stream objekta, a čitanje i pisanje obavljaju se pomoću standardnih metoda toka:
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
Konstruktori¶
- 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)¶
Stvara UART objekt sa zadanim id-om.
Metode¶
- 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¶
Inicijalizira UART sabirnicu sa zadanim parametrima:
baudrate je brzina takta.
bits je broj bitova po znaku, 7, 8 ili 9.
parity je paritet,
None, 0 (parni) ili 1 (neparni).stop je broj stop bitova, 1 ili 2.
Dodatni parametri koji se zadaju samo kao ključne riječi i koje pojedini port može podržavati su:
tx određuje koji TX pin koristiti.
rx određuje koji RX pin koristiti.
rts određuje koji RTS (izlazni) pin koristiti za hardversku kontrolu toka prijema.
cts određuje koji CTS (ulazni) pin koristiti za hardversku kontrolu toka slanja.
txbuf određuje duljinu TX međuspremnika u znakovima.
rxbuf određuje duljinu RX međuspremnika u znakovima.
timeout određuje vrijeme čekanja na prvi znak (u ms).
timeout_char određuje vrijeme čekanja između znakova (u ms).
invert određuje koje linije invertirati.
0neće invertirati linije (mirno stanje obje linije je logička jedinica).UART.INV_TXinvertirat će TX liniju (mirno stanje TX linije sada je logička nula).UART.INV_RXinvertirat će RX liniju (mirno stanje RX linije sada je logička nula).UART.INV_TX | UART.INV_RXinvertirat će obje linije (mirno stanje na logičkoj nuli).
flow određuje koje signale hardverske kontrole toka koristiti. Vrijednost je bitmaska.
0će zanemariti signale hardverske kontrole toka.UART.RTSomogućit će kontrolu toka prijema koristeći RTS izlazni pin za signaliziranje ima li prijemni FIFO dovoljno mjesta za prihvat dodatnih podataka.UART.CTSomogućit će kontrolu toka slanja pauziranjem prijenosa kada CTS ulazni pin signalizira da prijemniku ponestaje prostora u međuspremniku.UART.RTS | UART.CTSomogućit će oboje, za potpunu hardversku kontrolu toka.
Napomena
Moguće je pozvati
init()više puta na istom objektu kako bi se UART rekonfigurirao u hodu. To omogućuje korištenje jedne UART periferije za posluživanje različitih uređaja spojenih na različite GPIO pinove. U tom se slučaju u jednom trenutku može posluživati samo jedan uređaj. Također nemojte pozivatideinit()jer će to spriječiti ponovni pozivinit().
- deinit() None¶
Isključuje UART sabirnicu.
Napomena
Nećete moći pozvati
init()na objektu nakondeinit(). U tom slučaju treba stvoriti novu instancu.
- any() int¶
Vraća cijeli broj koji broji koliko se znakova može pročitati bez blokiranja. Vratit će 0 ako nema dostupnih znakova, a pozitivan broj ako znakova ima. Metoda može vratiti 1 čak i ako je za čitanje dostupno više od jednog znaka.
Za sofisticiraniji upit o dostupnim znakovima koristite select.poll:
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
- read(nbytes: int | None = None, /) bytes | None¶
Čita znakove. Ako je navedeno
nbytes, čita najviše toliko bajtova, inače čita što više podataka. Može se vratiti i ranije ako se dosegne istek vremena. Istek vremena podesiv je u konstruktoru.Povratna vrijednost: bytes objekt koji sadrži pročitane bajtove. Vraća
Nonepri isteku vremena.
- readinto(buf: bytearray, nbytes: int | None = None, /) int | None¶
Čita bajtove u
buf. Ako je navedenonbytes, čita najviše toliko bajtova. Inače čita najvišelen(buf)bajtova. Može se vratiti i ranije ako se dosegne istek vremena. Istek vremena podesiv je u konstruktoru.Povratna vrijednost: broj bajtova pročitanih i spremljenih u
bufiliNonepri isteku vremena.
- readline() bytes | None¶
Čita liniju koja završava znakom novog reda. Može se vratiti i ranije ako se dosegne istek vremena. Istek vremena podesiv je u konstruktoru.
Povratna vrijednost: pročitana linija ili
Nonepri isteku vremena.
- write(buf: bytes) int | None¶
Zapisuje međuspremnik bajtova na sabirnicu.
Povratna vrijednost: broj zapisanih bajtova ili
Nonepri isteku vremena.
- sendbreak() None¶
Šalje break uvjet na sabirnicu – drži TX nisko dulje od trajanja jednog znaka. Dostupno na STM32 i mimxrt; nije izloženo na alif.
- readchar() int¶
Čita jedan znak iz UART-a i vraća ga kao cijeli broj (ili
-1pri isteku vremena). Manji troškovi negoread(1)jer se ne alocirabytesobjekt. Samo STM32.
- writechar(char: int) None¶
Zapisuje jedan znak
char(cijeli broj u rasponu0–255) u UART. Manji troškovi negowrite()za slanje jednog bajta. Samo STM32.
- flush() None¶
Blokira dok svaki bajt koji je trenutno u međuspremniku za slanje ne bude poslan na TX. Podiže
OSErrorpri isteku vremena; istek vremena izveden je iz veličine TX međuspremnika i konfigurirane brzine prijenosa, pa se, osim ako je omogućena kontrola toka i prijemnik zastane, poziv vraća znatno prije isteka vremena.
- txdone() bool¶
Vraća
Truekada nije u tijeku nikakav prijenos (TX međuspremnik je prazan i pomačni registar je ispražnjen), inačeFalse. Korisno kao neblokirajuća alternativa metodiflush().
- irq(handler: Callable[[UART], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Instalira povratni poziv koji se aktivira pri UART događajima.
handlerje funkcija koja se poziva. PrimaUARTinstancu kao svoj jedini argument. ProslijediteNoneza uklanjanje prethodno instaliranog rukovatelja.triggerje bitmaska jedne ili višeIRQ_*konstanti (vidjeti Konstante u nastavku) koja odabire koji događaji aktiviraju povratni poziv.hard=Trueregistrira rukovatelja tvrdog prekida (manje kašnjenje, ali rukovatelj ne smije alocirati). Zadano je zakazani povratni poziv.Vraća irq objekt.
Nije svaki izvor IRQ-a dostupan na svakom portu – vidjeti pojedine
IRQ_*konstante za dostupnost po portovima.
Konstante¶
- RTS: int¶
Proslijedite u
flowza omogućavanje RTS hardverske kontrole toka na strani prijema. Kombinirajte sCTSputem OR-a za omogućavanje oboje.
- IRQ_RXIDLE: int¶
Zastavica okidača metode
irq(): aktivira se jednom nakon što je primljen jedan ili više znakova, a RX linija zatim prijeđe u mirovanje. Dostupno na svim OpenMV portovima.
- IRQ_RX: int¶
Zastavica okidača metode
irq(): aktivira se nakon svakog primljenog znaka. Dostupno na STM32 i alif.