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.

    • 0 ei invertoi linjoja (molempien linjojen lepotila on looginen ykkönen).

    • UART.INV_TX invertoi TX-linjan (TX-linjan lepotila on nyt looginen nolla).

    • UART.INV_RX invertoi RX-linjan (RX-linjan lepotila on nyt looginen nolla).

    • UART.INV_TX | UART.INV_RX invertoi molemmat linjat (lepotila loogisessa nollassa).

  • flow määrittää, mitä laitteistovuonohjauksen signaaleja käytetään. Arvo on bittimaski.

    • 0 jättää laitteistovuonohjauksen signaalit huomiotta.

    • UART.RTS ottaa 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.CTS ottaa 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.CTS ottaa 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 kutsu deinit(), koska se estää init()-kutsun uudelleen.

deinit() None

Sammuta UART-väylä.

Muista

Et voi kutsua init() objektille deinit()-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 nbytes on 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 None aikakatkaisun yhteydessä.

readinto(buf: bytearray, nbytes: int | None = None, /) int | None

Lue tavuja kohteeseen buf. Jos nbytes on määritetty, luetaan enintään niin monta tavua. Muutoin luetaan enintään len(buf) tavua. Metodi voi palata aiemmin, jos aikakatkaisu saavutetaan. Aikakatkaisu on konfiguroitavissa konstruktorissa.

Paluuarvo: kohteeseen buf luettujen ja tallennettujen tavujen lukumäärä tai None aikakatkaisun 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 None aikakatkaisun yhteydessä.

write(buf: bytes) int | None

Kirjoita tavupuskuri väylälle.

Paluuarvo: kirjoitettujen tavujen lukumäärä tai None aikakatkaisun 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 -1 aikakatkaisun yhteydessä). Pienempi yleisrasite kuin read(1), koska bytes-objektia ei varata. Vain STM32.

writechar(char: int) None

Kirjoita yksittäinen merkki char (kokonaisluku välillä 0255) UART:iin. Pienempi yleisrasite kuin write() yksittäisen tavun lähetyksissä. Vain STM32.

flush() None

Estä suoritus, kunnes jokainen lähetyspuskurissa parhaillaan oleva tavu on kellotettu ulos TX:llä. Nostaa OSError aikakatkaisun 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), muutoin False. Hyödyllinen estymättömänä vaihtoehtona flush()-metodille.

irq(handler: Callable[[UART], None] | None = None, trigger: int = 0, hard: bool = False) None

Asenna takaisinkutsu, joka laukeaa UART-tapahtumista.

handler on kutsuttava funktio. Se saa ainoana argumenttinaan UART-instanssin. Anna None poistaaksesi aiemmin asennetun käsittelijän.

trigger on bittimaski yhdestä tai useammasta IRQ_*-vakiosta (katso Vakiot alla), joka valitsee, mitkä tapahtumat laukaisevat takaisinkutsun.

hard=True rekisterö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.

CTS: int

Anna flow-parametrille ottaaksesi käyttöön CTS-laitteistovuonohjauksen lähetyspuolella.

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.

IRQ_TXIDLE: int

irq()-laukaisulippu: laukeaa, kun lähetyksen viimeinen merkki on kellotettu ulos. Saatavilla mimxrt:llä ja alif:lla.

IRQ_BREAK: int

irq()-laukaisulippu: laukeaa, kun RX:ssä havaitaan break-tila. Ei saatavilla missään OpenMV-portissa.