UART osztály – 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ő a sztring karakterrel), amely 8 vagy 9 bit széles lehet.
UART objektumok az alábbi módon hozhatók létre és inicializálhatók:
from pyb import UART
# init with the given baudrate
uart = UART(3, 9600, timeout_char=1000)
# init with explicit parameters
uart.init(9600, bits=8, parity=None, stop=1, timeout_char=1000)
A bitek száma 7, 8 vagy 9 lehet. A paritás None, 0 (páros) vagy 1 (páratlan) lehet. A stop bitek száma 1 vagy 2 lehet.
Megjegyzés: parity=None esetén csak 8 és 9 bit támogatott. Engedélyezett paritás mellett csak 7 és 8 bit támogatott.
A UART objektum úgy viselkedik, mint egy stream objektum, és az olvasás és í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
Az egyes karakterek az alábbi módon olvashatók/írhatók:
uart.readchar() # read 1 character and returns it as an integer
uart.writechar(42) # write 1 character
Annak ellenőrzéséhez, hogy van-e bármi olvasnivaló, használja:
uart.any() # returns the number of characters waiting
Megjegyzés: A read, write stb. stream függvények a MicroPython v1.3.4 verzióban újdonságok. A korábbi verziók a uart.send és uart.recv függvényeket használják.
Konstruktorok¶
- class pyb.UART(bus: int | str, *args, **kwargs)¶
Létrehoz egy UART objektumot a megadott
busbuszon (egész szám periféria-index, pl.3aUART3esetén). További paraméterek nélkül az objektum létrejön, de nem inicializálódik (megőrzi a busz korábbi beállításait, ha vannak); ha további argumentumokat ad meg, a busz inicializálódik. Az elérhető paraméterekért lásd:init().A
UART(3)minden STM32 alapú OpenMV Cam esetében ugyanazokra a fejléc-lábakra van bekötve:Jel
Fejléc-láb
TXP4RXP5Egyes lapokon további UART buszok is elérhetők:
Busz
TX láb
RX láb
Elérhető a következőkön
UART(1)P1P0OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal
UART(4)P2P3OpenMV Cam N6
UART(7)P14P13OpenMV Cam N6
Metódusok¶
- init(baudrate: int, bits: int = 8, parity: int | None = None, stop: int = 1, *, timeout: int = 1000, flow: int = 0, timeout_char: int = 0, read_buf_len: int = 64) None¶
Inicializálja a UART buszt a megadott paraméterekkel:
A
baudrateaz órajel sebessége.A
bitsa karakterenkénti bitek száma: 7, 8 vagy 9.A
paritya paritás:None, 0 (páros) vagy 1 (páratlan).A
stopa stop bitek száma: 1 vagy 2.A
flowaz áramlásvezérlés típusát állítja be. Lehet 0,UART.RTS,UART.CTSvagyUART.RTS | UART.CTS.A
timeoutaz első karakter írására/olvasására való várakozás időkorlátja milliszekundumban.A
timeout_charaz írás vagy olvasás közben a karakterek közötti várakozás időkorlátja milliszekundumban.A
read_buf_lenaz olvasási puffer karakterhossza (0 a letiltáshoz).
Ez a metódus kivételt vált ki, ha a baud sebességet nem sikerült a kívánt érték 5%-án belül beállítani.
Megjegyzés: parity=None esetén csak 8 és 9 bit támogatott. Engedélyezett paritás mellett csak 7 és 8 bit támogatott.
- read(nbytes: int | None = None) bytes | None¶
Karaktereket olvas be. Ha a
nbytesmeg van adva, akkor legfeljebb annyi bájtot olvas be. Hanbytesrendelkezésre áll a pufferben, azonnal visszatér, ellenkező esetben akkor tér vissza, amikor elegendő karakter érkezik, vagy lejár az időkorlát.Ha a
nbytesnincs megadva, akkor a metódus a lehető legtöbb adatot olvassa be. Az időkorlát lejárta után tér vissza.Megjegyzés: 9 bites karakterek esetén minden karakter két bájtot foglal el, a
nbytesértékének párosnak kell lennie, a karakterek száma pedignbytes/2.Visszatérési érték: egy bytes objektum, amely a beolvasott bájtokat tartalmazza. Időtúllépés esetén
Noneértéket ad vissza.
- readchar() int¶
Egyetlen karaktert fogad a buszon.
Visszatérési érték: a beolvasott karakter egész számként. Időtúllépés esetén -1 értéket ad vissza.
- readinto(buf: bytearray, nbytes: int | None = None) int | None¶
Bájtokat olvas be a
bufpufferbe. Ha anbytesmeg van adva, akkor legfeljebb annyi bájtot olvas be. Ellenkező esetben legfeljebblen(buf)bájtot olvas be.Visszatérési érték: a beolvasott és a
bufpufferbe tárolt bájtok száma, vagyNoneidőtúllépés esetén.
- readline() bytes | None¶
Beolvas egy sort, amely újsor karakterrel végződik. Ha ilyen sor létezik, a visszatérés azonnali. Ha lejár az időkorlát, az összes rendelkezésre álló adat visszaadásra kerül, függetlenül attól, hogy van-e benne újsor karakter.
Visszatérési érték: a beolvasott sor, vagy
Noneidőtúllépés esetén, ha nincs elérhető adat.
- write(buf: bytes | bytearray | str) int | None¶
A bájtokból álló puffert a buszra írja. Ha a karakterek 7 vagy 8 bit szélesek, akkor minden bájt egy karakter. Ha a karakterek 9 bit szélesek, akkor minden karakterhez két bájt használatos (little endian), és a
bufpuffernek páros számú bájtot kell tartalmaznia.Visszatérési érték: a kiírt bájtok száma. Ha időtúllépés következik be, és egyetlen bájt sem került kiírásra,
Noneértéket ad vissza.
Konstansok¶
Áramlásvezérlés¶
A UART(3) támogatja az RTS/CTS hardveres áramlásvezérlést. Az OpenMV Cam M7, H7, H7 Plus és Pure Thermal modelleken az áramlásvezérlési lábak a következők:
(TX, RX, nRTS, nCTS) = (P4, P5, P1, P2)
Az OpenMV Cam N6-on csak a nRTS érhető el (a P7 fejléc-lábon); a nCTS nincs az I/O fejlécre kivezetve.
A következő bekezdésekben a „cél” kifejezés a UART-hoz csatlakoztatott eszközre utal.
Amikor a UART init() metódusát úgy hívják meg, hogy a flow a UART.RTS és UART.CTS egyikére vagy mindkettőre van állítva, a megfelelő áramlásvezérlési lábak konfigurálódnak. A nRTS egy aktív-alacsony kimenet, a nCTS pedig egy aktív-alacsony bemenet engedélyezett felhúzással. Az áramlásvezérlés bekötéséhez csatlakoztassa az OpenMV Cam nCTS lábát a cél nRTS lábához, az OpenMV Cam nRTS lábát pedig a cél nCTS lábához.
CTS: a cél vezérli az OpenMV Cam adóját¶
Ha a CTS áramlásvezérlés engedélyezve van, az írási viselkedés a következő:
Ha az OpenMV Cam UART.write(buf) metódusát meghívják, az adás minden olyan időszakra leáll, amikor a nCTS értéke False. Ez időtúllépést eredményez, ha a teljes puffer nem került átvitelre az időkorláton belül. A metódus visszaadja a kiírt bájtok számát, lehetővé téve, hogy a felhasználó szükség esetén kiírja az adatok hátralévő részét. Időtúllépés esetén egy karakter a UART-ban marad, a nCTS jelre várva. Az ezt a karaktert alkotó bájtok száma is szerepel a visszatérési értékben.
Ha a UART.writechar() metódust akkor hívják meg, amikor a nCTS értéke False, a metódus időtúllépésig vár, hacsak a cél nem érvényesíti időben a nCTS jelet. Ha időtúllépés következik be, OSError 116 kivétel keletkezik. A karakter azonnal átvitelre kerül, amint a cél érvényesíti a nCTS jelet.
RTS: az OpenMV Cam vezérli a cél adóját¶
Ha az RTS áramlásvezérlés engedélyezve van, a viselkedés a következő:
Ha pufferelt bemenetet használnak (read_buf_len > 0), a bejövő karakterek pufferelődnek. Ha a puffer megtelik, a következő beérkező karakter hatására a nRTS False állapotba kerül: a célnak abba kell hagynia az adást. A nRTS True állapotba kerül, amikor karaktereket olvasnak ki a pufferből.
Vegye figyelembe, hogy az any() metódus a pufferben lévő bájtok számát adja vissza. Tegyük fel, hogy a puffer hossza N bájt. Ha a puffer megtelik, és újabb karakter érkezik, a nRTS False állapotba kerül, és az any() az N értéket adja vissza. Amikor karaktereket olvasnak ki, a további karakter a pufferbe kerül, és egy későbbi any() hívás eredményében szerepelni fog.
Ha nem használnak pufferelt bemenetet (read_buf_len == 0), egy karakter beérkezése a nRTS False állapotba kerülését okozza, amíg a karaktert ki nem olvassák.