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 brkati sa znakom niza) koji može biti širok 8 ili 9 bitova.
UART objekti mogu se stvoriti i inicijalizirati pomoću:
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)
Bits može biti 7, 8 ili 9. Parity može biti None, 0 (parno) ili 1 (neparno). Stop može biti 1 ili 2.
Napomena: uz parity=None, podržani su samo 8 i 9 bitova. Kada je parnost omogućena, podržani su 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
Pojedinačni znakovi mogu se čitati/pisati pomoću:
uart.readchar() # read 1 character and returns it as an integer
uart.writechar(42) # write 1 character
Da biste provjerili ima li čega za čitanje, koristite:
uart.any() # returns the number of characters waiting
Napomena: Funkcije toka read, write itd. nove su u MicroPython v1.3.4. Ranije verzije koriste uart.send i uart.recv.
Konstruktori¶
- class pyb.UART(bus: int | str, *args, **kwargs)¶
Konstruira UART objekt na zadanoj sabirnici
bus(cjelobrojni indeks periferije, npr.3zaUART3). Bez dodatnih parametara objekt se stvara, ali ne inicijalizira (zadržava prethodne postavke sabirnice, ako postoje); ako se navedu dodatni argumenti, sabirnica se inicijalizira. Pogledajteinit()za dostupne parametre.UART(3)je ožičen na iste pinove zaglavlja na svakoj STM32 OpenMV Cam:Signal
Pin zaglavlja
TXP4RXP5Dodatne UART sabirnice dostupne su na nekim pločama:
Sabirnica
TX pin
RX pin
Dostupno na
UART(1)P1P0OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal
UART(4)P2P3OpenMV Cam N6
UART(7)P14P13OpenMV Cam N6
Metode¶
- 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¶
Inicijalizira UART sabirnicu sa zadanim parametrima:
baudrateje brzina takta.bitsje broj bitova po znaku, 7, 8 ili 9.parityje parnost,None, 0 (parno) ili 1 (neparno).stopje broj stop bitova, 1 ili 2.flowpostavlja vrstu kontrole protoka. Može biti 0,UART.RTS,UART.CTSiliUART.RTS | UART.CTS.timeoutje istek vremena u milisekundama za čekanje na pisanje/čitanje prvog znaka.timeout_charje istek vremena u milisekundama za čekanje između znakova tijekom pisanja ili čitanja.read_buf_lenje duljina međuspremnika za čitanje u znakovima (0 za onemogućavanje).
Ova metoda će izazvati iznimku ako brzina prijenosa (baud) nije mogla biti postavljena unutar 5% željene vrijednosti.
Napomena: uz parity=None, podržani su samo 8 i 9 bitova. Kada je parnost omogućena, podržani su samo 7 i 8 bitova.
- read(nbytes: int | None = None) bytes | None¶
Čita znakove. Ako je naveden
nbytes, čita najviše toliko bajtova. Ako jenbytesdostupno u međuspremniku, vraća se odmah, inače se vraća kada pristigne dovoljno znakova ili istekne vrijeme.Ako
nbytesnije naveden, metoda čita što je više moguće podataka. Vraća se nakon isteka vremena.Napomena: za 9-bitne znakove svaki znak zauzima dva bajta,
nbytesmora biti paran, a broj znakova jenbytes/2.Povratna vrijednost: bytes objekt koji sadrži pročitane bajtove. Vraća
Nonepri isteku vremena.
- readchar() int¶
Prima jedan znak na sabirnici.
Povratna vrijednost: pročitani znak, kao cijeli broj. Vraća -1 pri isteku vremena.
- readinto(buf: bytearray, nbytes: int | None = None) int | None¶
Čita bajtove u
buf. Ako je navedennbytes, čita najviše toliko bajtova. Inače čita najvišelen(buf)bajtova.Povratna vrijednost: broj bajtova pročitanih i pohranjenih u
bufiliNonepri isteku vremena.
- readline() bytes | None¶
Čita redak koji završava znakom novog retka. Ako takav redak postoji, povrat je trenutačan. Ako istekne vrijeme, vraćaju se svi dostupni podaci bez obzira na to postoji li znak novog retka.
Povratna vrijednost: pročitani redak ili
Nonepri isteku vremena ako nema dostupnih podataka.
- write(buf: bytes | bytearray | str) int | None¶
Piše međuspremnik bajtova na sabirnicu. Ako su znakovi široki 7 ili 8 bitova, svaki bajt je jedan znak. Ako su znakovi široki 9 bitova, za svaki znak koriste se dva bajta (little endian), a
bufmora sadržavati paran broj bajtova.Povratna vrijednost: broj zapisanih bajtova. Ako dođe do isteka vremena i niti jedan bajt nije zapisan, vraća
None.
Konstante¶
Kontrola protoka¶
UART(3) podržava RTS/CTS hardversku kontrolu protoka. Na OpenMV Cam M7, H7, H7 Plus i Pure Thermal pinovi za kontrolu protoka su:
(TX, RX, nRTS, nCTS) = (P4, P5, P1, P2)
Na OpenMV Cam N6 izložen je samo nRTS (na pinu zaglavlja P7); nCTS nije usmjeren na ulazno/izlazno zaglavlje.
U sljedećim odlomcima izraz „target” odnosi se na uređaj povezan s UART-om.
Kada se UART-ova metoda init() pozove s argumentom flow postavljenim na jednu ili obje vrijednosti UART.RTS i UART.CTS, konfiguriraju se odgovarajući pinovi za kontrolu protoka. nRTS je izlaz aktivan na niskoj razini, a nCTS je ulaz aktivan na niskoj razini s omogućenim pull-up otpornikom. Za ožičavanje kontrole protoka povežite nCTS OpenMV Cam s nRTS ciljnog uređaja, a nRTS OpenMV Cam s nCTS ciljnog uređaja.
CTS: ciljni uređaj upravlja odašiljačem OpenMV Cam¶
Ako je CTS kontrola protoka omogućena, ponašanje pri pisanju je sljedeće:
Ako se pozove metoda UART.write(buf) OpenMV Cam, odašiljanje će zastati za sva razdoblja kada je nCTS False. To će rezultirati istekom vremena ako cijeli međuspremnik nije odaslan unutar razdoblja isteka. Metoda vraća broj zapisanih bajtova, omogućujući korisniku da zapiše ostatak podataka po potrebi. U slučaju isteka vremena, jedan znak ostat će u UART-u na čekanju za nCTS. Broj bajtova koji čine taj znak bit će uključen u povratnu vrijednost.
Ako se UART.writechar() pozove kada je nCTS False, metoda će isteći osim ako ciljni uređaj na vrijeme ne aktivira nCTS. Ako istekne, bit će izazvana OSError 116. Znak će biti odaslan čim ciljni uređaj aktivira nCTS.
RTS: OpenMV Cam upravlja odašiljačem ciljnog uređaja¶
Ako je RTS kontrola protoka omogućena, ponašanje je sljedeće:
Ako se koristi međuspremnik ulaza (read_buf_len > 0), dolazni znakovi se spremaju u međuspremnik. Ako se međuspremnik napuni, sljedeći znak koji pristigne uzrokovat će da nRTS postane False: ciljni uređaj treba prekinuti odašiljanje. nRTS će postati True kada se znakovi pročitaju iz međuspremnika.
Imajte na umu da metoda any() vraća broj bajtova u međuspremniku. Pretpostavimo duljinu međuspremnika od N bajtova. Ako se međuspremnik napuni i pristigne još jedan znak, nRTS će se postaviti na False, a any() će vratiti broj N. Kada se znakovi pročitaju, dodatni znak bit će smješten u međuspremnik i bit će uključen u rezultat sljedećeg poziva any().
Ako se međuspremnik ulaza ne koristi (read_buf_len == 0), dolazak znaka uzrokovat će da nRTS postane False dok se znak ne pročita.