class UART – kaksisuuntainen sarjaliikenneväylä¶
UART toteuttaa tavanomaisen UART/USART-kaksisuuntaisen sarjaliikenneprotokollan. Fyysisellä tasolla se koostuu kahdesta linjasta: RX ja TX. Liikenteen yksikkö on merkki (ei pidä sekoittaa merkkijonon merkkiin), joka voi olla 8 tai 9 bittiä leveä.
UART-objekteja voi luoda ja alustaa seuraavasti:
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
Bittejä voi olla 7, 8 tai 9. Stop-bittejä voi olla 1 tai 2. Arvolla parity=None tuetaan vain 8 ja 9 bittiä. Kun pariteetti on käytössä, tuetaan vain 7 ja 8 bittiä.
UART-objekti toimii kuten stream-objekti, ja lukeminen ja kirjoittaminen tapahtuvat tavanomaisilla stream-metodeilla:
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
Konstruktorit¶
- 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)¶
Luo annetulla tunnuksella määritetyn UART-objektin.
Metodit¶
- 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¶
Alusta UART-väylä annetuilla parametreilla:
baudrate on kellotaajuus.
bits on merkin bittien lukumäärä, 7, 8 tai 9.
parity on pariteetti,
None, 0 (parillinen) tai 1 (pariton).stop on stop-bittien lukumäärä, 1 tai 2.
Lisäparametrit, jotka annetaan vain avainsanalla ja joita portti voi tukea:
tx määrittää käytettävän TX-nastan.
rx määrittää käytettävän RX-nastan.
rts määrittää RTS-nastan (lähtö), jota käytetään laitteistopohjaiseen vastaanoton vuonohjaukseen.
cts määrittää CTS-nastan (tulo), jota käytetään laitteistopohjaiseen lähetyksen vuonohjaukseen.
txbuf määrittää TX-puskurin pituuden merkkeinä.
rxbuf määrittää RX-puskurin pituuden merkkeinä.
timeout määrittää ensimmäisen merkin odotusajan (millisekunteina).
timeout_char määrittää merkkien välisen odotusajan (millisekunteina).
invert määrittää, mitkä linjat invertoidaan.
0ei invertoi linjoja (molempien linjojen lepotila on looginen ykkönen).UART.INV_TXinvertoi TX-linjan (TX-linjan lepotila on nyt looginen nolla).UART.INV_RXinvertoi RX-linjan (RX-linjan lepotila on nyt looginen nolla).UART.INV_TX | UART.INV_RXinvertoi molemmat linjat (lepotila loogisessa nollassa).
flow määrittää, mitä laitteistovuonohjauksen signaaleja käytetään. Arvo on bittimaski.
0jättää laitteistovuonohjauksen signaalit huomiotta.UART.RTSottaa käyttöön vastaanoton vuonohjauksen käyttämällä RTS-lähtönastaa ilmaisemaan, onko vastaanotto-FIFO:ssa riittävästi tilaa ottaa vastaan lisää dataa.UART.CTSottaa käyttöön lähetyksen vuonohjauksen keskeyttämällä lähetyksen, kun CTS-tulonasta ilmaisee, että vastaanottimen puskuritila on käymässä vähiin.UART.RTS | UART.CTSottaa käyttöön molemmat, jolloin saadaan täysi laitteistovuonohjaus.
Muista
On mahdollista kutsua
init()useita kertoja samalle objektille, jotta UART voidaan konfiguroida uudelleen lennossa. Tämä mahdollistaa yhden UART-oheislaitteen käyttämisen eri GPIO-nastoihin kytkettyjen eri laitteiden palvelemiseen. Tällöin vain yhtä laitetta voidaan palvella kerrallaan. Älä myöskään kutsudeinit(), koska se estääinit()-kutsun uudelleen.
- deinit() None¶
Sammuta UART-väylä.
Muista
Et voi kutsua
init()objektilledeinit()-kutsun jälkeen. Tällöin on luotava uusi instanssi.
- any() int¶
Palauttaa kokonaisluvun, joka ilmaisee niiden merkkien lukumäärän, jotka voidaan lukea ilman estymistä. Palauttaa 0, jos merkkejä ei ole saatavilla, ja positiivisen luvun, jos merkkejä on. Metodi voi palauttaa 1, vaikka luettavissa olisi useampi kuin yksi merkki.
Saatavilla olevien merkkien kehittyneempään kyselyyn käytä select.poll:
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
- read(nbytes: int | None = None, /) bytes | None¶
Lue merkkejä. Jos
nbyteson määritetty, luetaan enintään niin monta tavua, muutoin luetaan niin paljon dataa kuin mahdollista. Metodi voi palata aiemmin, jos aikakatkaisu saavutetaan. Aikakatkaisu on konfiguroitavissa konstruktorissa.Paluuarvo: bytes-objekti, joka sisältää luetut tavut. Palauttaa
Noneaikakatkaisun yhteydessä.
- readinto(buf: bytearray, nbytes: int | None = None, /) int | None¶
Lue tavuja kohteeseen
buf. Josnbyteson määritetty, luetaan enintään niin monta tavua. Muutoin luetaan enintäänlen(buf)tavua. Metodi voi palata aiemmin, jos aikakatkaisu saavutetaan. Aikakatkaisu on konfiguroitavissa konstruktorissa.Paluuarvo: kohteeseen
bufluettujen ja tallennettujen tavujen lukumäärä taiNoneaikakatkaisun yhteydessä.
- readline() bytes | None¶
Lue rivi, joka päättyy rivinvaihtomerkkiin. Metodi voi palata aiemmin, jos aikakatkaisu saavutetaan. Aikakatkaisu on konfiguroitavissa konstruktorissa.
Paluuarvo: luettu rivi tai
Noneaikakatkaisun yhteydessä.
- write(buf: bytes) int | None¶
Kirjoita tavupuskuri väylälle.
Paluuarvo: kirjoitettujen tavujen lukumäärä tai
Noneaikakatkaisun yhteydessä.
- sendbreak() None¶
Lähetä break-tila väylälle – pidä TX matalalla yhtä merkkiaikaa pidempään. Saatavilla STM32:lla ja mimxrt:llä; ei käytettävissä alif:lla.
- readchar() int¶
Lue yksittäinen merkki UART:sta ja palauta se kokonaislukuna (tai
-1aikakatkaisun yhteydessä). Pienempi yleisrasite kuinread(1), koskabytes-objektia ei varata. Vain STM32.
- writechar(char: int) None¶
Kirjoita yksittäinen merkki
char(kokonaisluku välillä0–255) UART:iin. Pienempi yleisrasite kuinwrite()yksittäisen tavun lähetyksissä. Vain STM32.
- flush() None¶
Estä suoritus, kunnes jokainen lähetyspuskurissa parhaillaan oleva tavu on kellotettu ulos TX:llä. Nostaa
OSErroraikakatkaisun yhteydessä; aikakatkaisu johdetaan TX-puskurin koosta ja konfiguroidusta siirtonopeudesta, joten ellei vuonohjaus ole käytössä ja vastaanotin pysähdy, kutsu palaa hyvissä ajoin ennen aikakatkaisua.
- txdone() bool¶
Palauttaa
True, kun lähetys ei ole käynnissä (TX-puskuri on tyhjä ja siirtorekisteri on tyhjentynyt), muutoinFalse. Hyödyllinen estymättömänä vaihtoehtonaflush()-metodille.
- irq(handler: Callable[[UART], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Asenna takaisinkutsu, joka laukeaa UART-tapahtumista.
handleron kutsuttava funktio. Se saa ainoana argumenttinaanUART-instanssin. AnnaNonepoistaaksesi aiemmin asennetun käsittelijän.triggeron bittimaski yhdestä tai useammastaIRQ_*-vakiosta (katso Vakiot alla), joka valitsee, mitkä tapahtumat laukaisevat takaisinkutsun.hard=Truerekisteröi kovan keskeytyksen käsittelijän (pienempi viive, mutta käsittelijä ei saa varata muistia). Oletus on ajoitettu takaisinkutsu.Palauttaa irq-objektin.
Kaikki IRQ-lähteet eivät ole saatavilla kaikissa porteissa – katso porttikohtainen saatavuus yksittäisistä
IRQ_*-vakioista.
Vakiot¶
- RTS: int¶
Anna
flow-parametrille ottaaksesi käyttöön RTS-laitteistovuonohjauksen vastaanottopuolella. YhdistäCTS:hen OR-operaatiolla ottaaksesi molemmat käyttöön.
- IRQ_RXIDLE: int¶
irq()-laukaisulippu: laukeaa kerran, kun yksi tai useampi merkki on vastaanotettu ja RX-linja siirtyy sitten lepotilaan. Saatavilla kaikissa OpenMV-porteissa.
- IRQ_RX: int¶
irq()-laukaisulippu: laukeaa jokaisen vastaanotetun merkin jälkeen. Saatavilla STM32:lla ja alif:lla.