class UART – duplex soros kommunikációs busz¶
A UART a szabványos UART/USART duplex soros kommunikációs protokollt valósítja meg. Fizikai szinten 2 vonalból áll: RX és TX. A kommunikáció egysége egy karakter (nem összetévesztendő egy karakterlánc karakterével), amely 8 vagy 9 bit széles lehet.
A UART objektumokat a következőképpen lehet létrehozni és inicializálni:
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
A bitek száma 7, 8 vagy 9 lehet. A stopbit 1 vagy 2 lehet. A parity=None esetén csak a 8 és 9 bit támogatott. Engedélyezett paritás esetén csak a 7 és 8 bit támogatott.
A UART objektum úgy viselkedik, mint egy stream objektum, és az olvasás, valamint az írás a szabványos stream metódusokkal történik:
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
Konstruktorok¶
- 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)¶
Létrehoz egy UART objektumot az adott id alapján.
Metódusok¶
- 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¶
Inicializálja a UART buszt a megadott paraméterekkel:
A baudrate az órajel sebessége.
A bits a karakterenkénti bitek száma, 7, 8 vagy 9.
A parity a paritás,
None, 0 (páros) vagy 1 (páratlan).A stop a stopbitek száma, 1 vagy 2.
További, csak kulcsszóként megadható paraméterek, amelyeket egy port támogathat:
A tx megadja a használandó TX lábat.
Az rx megadja a használandó RX lábat.
Az rts megadja a hardveres fogadási folyamatvezérléshez használandó RTS (kimeneti) lábat.
A cts megadja a hardveres adási folyamatvezérléshez használandó CTS (bemeneti) lábat.
A txbuf megadja a TX puffer hosszát karakterekben.
Az rxbuf megadja az RX puffer hosszát karakterekben.
A timeout megadja az első karakterre való várakozás idejét (ms-ban).
A timeout_char megadja a karakterek közötti várakozás idejét (ms-ban).
Az invert megadja, mely vonalakat kell invertálni.
A
0nem invertálja a vonalakat (mindkét vonal nyugalmi állapota logikai magas).A
UART.INV_TXinvertálja a TX vonalat (a TX vonal nyugalmi állapota innentől logikai alacsony).A
UART.INV_RXinvertálja az RX vonalat (az RX vonal nyugalmi állapota innentől logikai alacsony).A
UART.INV_TX | UART.INV_RXmindkét vonalat invertálja (nyugalmi állapot logikai alacsonyon).
A flow megadja, mely hardveres folyamatvezérlő jeleket kell használni. Az érték egy bitmaszk.
A
0figyelmen kívül hagyja a hardveres folyamatvezérlő jeleket.A
UART.RTSengedélyezi a fogadási folyamatvezérlést az RTS kimeneti láb használatával, amely jelzi, hogy a fogadási FIFO-ban van-e elegendő hely további adatok fogadásához.A
UART.CTSengedélyezi az adási folyamatvezérlést azáltal, hogy szünetelteti az adást, amikor a CTS bemeneti láb jelzi, hogy a vevő puffertere kezd kifogyni.A
UART.RTS | UART.CTSmindkettőt engedélyezi a teljes hardveres folyamatvezérléshez.
Megjegyzés
Lehetséges az
init()többszöri meghívása ugyanazon az objektumon, hogy a UART menet közben újrakonfigurálható legyen. Ez lehetővé teszi egyetlen UART periféria használatát különböző GPIO lábakhoz csatlakoztatott különböző eszközök kiszolgálására. Ebben az esetben egyszerre csak egy eszköz szolgálható ki. Továbbá ne hívd meg adeinit()-et, mivel az megakadályozza azinit()újbóli meghívását.
- deinit() None¶
Kikapcsolja a UART buszt.
Megjegyzés
A
deinit()után nem tudod meghívni azinit()-et az objektumon. Ebben az esetben új példányt kell létrehozni.
- any() int¶
Egy egész számot ad vissza, amely megszámolja a blokkolás nélkül beolvasható karakterek számát. 0-t ad vissza, ha nincs elérhető karakter, és pozitív számot, ha vannak karakterek. A metódus akkor is visszaadhat 1-et, ha egynél több karakter is elérhető olvasásra.
Az elérhető karakterek kifinomultabb lekérdezéséhez használd a select.poll-t:
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
- read(nbytes: int | None = None, /) bytes | None¶
Karaktereket olvas be. Ha a
nbytesmeg van adva, akkor legfeljebb annyi bájtot olvas be, egyébként a lehető legtöbb adatot olvassa be. Hamarabb is visszatérhet, ha eléri az időtúllépést. Az időtúllépés a konstruktorban állítható be.Visszatérési érték: egy bytes objektum, amely a beolvasott bájtokat tartalmazza. Időtúllépés esetén
None-t ad vissza.
- readinto(buf: bytearray, nbytes: int | None = None, /) int | None¶
Bájtokat olvas be a
buf-ba. Ha anbytesmeg van adva, akkor legfeljebb annyi bájtot olvas be. Egyébként legfeljebblen(buf)bájtot olvas be. Hamarabb is visszatérhet, ha eléri az időtúllépést. Az időtúllépés a konstruktorban állítható be.Visszatérési érték: a
buf-ba beolvasott és eltárolt bájtok száma, vagyNoneidőtúllépés esetén.
- readline() bytes | None¶
Beolvas egy sort, amely sortörés karakterrel végződik. Hamarabb is visszatérhet, ha eléri az időtúllépést. Az időtúllépés a konstruktorban állítható be.
Visszatérési érték: a beolvasott sor, vagy
Noneidőtúllépés esetén.
- write(buf: bytes) int | None¶
Kiírja a bájtpuffert a buszra.
Visszatérési érték: a kiírt bájtok száma, vagy
Noneidőtúllépés esetén.
- sendbreak() None¶
Break feltételt küld a buszra – a TX-et egy karakteridőnél hosszabb ideig alacsonyan tartja. Elérhető STM32-n és mimxrt-n; alif-on nincs kitéve.
- readchar() int¶
Egyetlen karaktert olvas be a UART-ból, és egész számként adja vissza (vagy
-1-et időtúllépés esetén). Kisebb többletterheléssel jár, mint aread(1), mivel nem allokálbytesobjektumot. Csak STM32.
- writechar(char: int) None¶
Kiírja az egyetlen
charkaraktert (egy egész szám a0–255tartományban) a UART-ra. Kisebb többletterheléssel jár, mint awrite()egyetlen bájt küldéséhez. Csak STM32.
- flush() None¶
Blokkol, amíg az adópufferben jelenleg lévő összes bájt ki nem lett léptetve a TX-en. Időtúllépés esetén
OSErrorkivételt vált ki; az időtúllépés a TX puffer méretéből és a beállított átviteli sebességből (baud) származik, így hacsak a folyamatvezérlés nincs engedélyezve és a vevő nem akad el, a hívás jóval az időtúllépés előtt visszatér.
- txdone() bool¶
True-t ad vissza, amikor nincs folyamatban adás (a TX puffer üres és a léptetőregiszter kiürült), egyébkéntFalse-t. Hasznos aflush()nem blokkoló alternatívájaként.
- irq(handler: Callable[[UART], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Telepít egy visszahívást, amely UART eseményekre fut le.
A
handlera meghívandó függvény. Egyetlen argumentumként aUARTpéldányt kapja. Adj átNone-t egy korábban telepített kezelő eltávolításához.A
triggeregy bitmaszk egy vagy többIRQ_*konstansból (lásd alább a Konstansokat), amely kiválasztja, mely események váltsák ki a visszahívást.A
hard=Trueegy kemény megszakítás-kezelőt regisztrál (alacsonyabb késleltetés, de a kezelő nem allokálhat). Az alapértelmezett egy ütemezett visszahívás.Egy irq objektumot ad vissza.
Nem minden IRQ forrás érhető el minden porton – a portonkénti elérhetőségről lásd az egyes
IRQ_*konstansokat.
Konstansok¶
- RTS: int¶
Add át a
flow-nak az RTS hardveres folyamatvezérlés engedélyezéséhez a fogadási oldalon. Kombináld aCTS-szel OR művelettel mindkettő engedélyezéséhez.
- IRQ_RXIDLE: int¶
Az
irq()kioldó jelzője: egyszer lép működésbe, miután egy vagy több karakter beérkezett, és az RX vonal ezután nyugalmi állapotba kerül. Minden OpenMV porton elérhető.
- IRQ_RX: int¶
Az
irq()kioldó jelzője: minden beérkezett karakter után működésbe lép. Elérhető STM32-n és alif-on.