class UART – kaksisuuntainen sarjaliikenneväylä¶
UART toteuttaa standardin UART/USART-kaksisuuntaisen sarjaliikenneprotokollan. Fyysisellä tasolla se koostuu kahdesta linjasta: RX ja TX. Liikenteen yksikkö on merkki (jota ei pidä sekoittaa merkkijonon merkkiin), joka voi olla 8 tai 9 bittiä leveä.
UART-objekteja voidaan luoda ja alustaa seuraavasti:
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)
Bittejä voi olla 7, 8 tai 9. Pariteetti voi olla None, 0 (parillinen) tai 1 (pariton). Pysäytysbittejä voi olla 1 tai 2.
Huomautus: arvolla parity=None vain 8 ja 9 bittiä ovat tuettuja. Pariteetin ollessa käytössä vain 7 ja 8 bittiä ovat tuettuja.
UART-objekti toimii kuten stream-objekti, ja luku ja kirjoitus tehdään 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
Yksittäisiä merkkejä voidaan lukea/kirjoittaa seuraavasti:
uart.readchar() # read 1 character and returns it as an integer
uart.writechar(42) # write 1 character
Tarkistaaksesi, onko luettavaa, käytä:
uart.any() # returns the number of characters waiting
Huomautus: stream-funktiot read, write jne. ovat uusia MicroPythonin versiossa v1.3.4. Aiemmat versiot käyttävät metodeja uart.send ja uart.recv.
Konstruktorit¶
- class pyb.UART(bus: int | str, *args, **kwargs)¶
Muodostaa UART-objektin annetulle väylälle
bus(kokonaislukumuotoinen oheislaitteen indeksi, esim.3väylälleUART3). Ilman lisäparametreja objekti luodaan mutta sitä ei alusteta (se säilyttää väylän aiemmat asetukset, jos sellaisia on); jos lisäargumentteja annetaan, väylä alustetaan. Katso käytettävissä olevat parametrit metodistainit().UART(3)on kytketty samoihin liitinnastoihin jokaisessa STM32-pohjaisessa OpenMV Camissa:Signaali
Liitinnasta
TXP4RXP5Joissakin korteissa on käytettävissä lisää UART-väyliä:
Väylä
TX-nasta
RX-nasta
Käytettävissä laitteissa
UART(1)P1P0OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal
UART(4)P2P3OpenMV Cam N6
UART(7)P14P13OpenMV Cam N6
Metodit¶
- 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¶
Alustaa UART-väylän annetuilla parametreilla:
baudrateon kellotaajuus.bitson bittien määrä merkkiä kohden, 7, 8 tai 9.parityon pariteetti,None, 0 (parillinen) tai 1 (pariton).stopon pysäytysbittien määrä, 1 tai 2.flowasettaa vuonohjauksen tyypin. Voi olla 0,UART.RTS,UART.CTStaiUART.RTS | UART.CTS.timeouton aikakatkaisu millisekunteina, jonka verran odotetaan ensimmäisen merkin kirjoittamista/lukemista.timeout_charon aikakatkaisu millisekunteina, jonka verran odotetaan merkkien välillä kirjoitettaessa tai luettaessa.read_buf_lenon lukupuskurin pituus merkkeinä (0 poistaa sen käytöstä).
Tämä metodi nostaa poikkeuksen, jos siirtonopeutta ei voida asettaa 5 % tarkkuudella halutusta arvosta.
Huomautus: arvolla parity=None vain 8 ja 9 bittiä ovat tuettuja. Pariteetin ollessa käytössä vain 7 ja 8 bittiä ovat tuettuja.
- read(nbytes: int | None = None) bytes | None¶
Lukee merkkejä. Jos
nbyteson määritetty, luetaan enintään kyseinen määrä tavuja. Jos puskurissa on saatavillanbytestavua, palaa välittömästi, muutoin palaa kun riittävästi merkkejä saapuu tai aikakatkaisu kuluu umpeen.Jos
nbytesei ole annettu, metodi lukee niin paljon dataa kuin mahdollista. Se palaa aikakatkaisun kuluttua umpeen.Huomautus: 9-bittisillä merkeillä kukin merkki vie kaksi tavua,
nbytestäytyy olla parillinen, ja merkkien määrä onnbytes/2.Paluuarvo: bytes-objekti, joka sisältää luetut tavut. Palauttaa
Noneaikakatkaisun yhteydessä.
- readchar() int¶
Vastaanottaa yhden merkin väylältä.
Paluuarvo: luettu merkki kokonaislukuna. Palauttaa -1 aikakatkaisun yhteydessä.
- readinto(buf: bytearray, nbytes: int | None = None) int | None¶
Lukee tavuja puskuriin
buf. Josnbyteson määritetty, luetaan enintään kyseinen määrä tavuja. Muutoin luetaan enintäänlen(buf)tavua.Paluuarvo: puskuriin
bufluettujen ja tallennettujen tavujen määrä taiNoneaikakatkaisun yhteydessä.
- readline() bytes | None¶
Lukee rivin, joka päättyy rivinvaihtomerkkiin. Jos tällainen rivi on olemassa, palataan välittömästi. Jos aikakatkaisu kuluu umpeen, kaikki saatavilla oleva data palautetaan riippumatta siitä, onko rivinvaihtoa olemassa.
Paluuarvo: luettu rivi tai
Noneaikakatkaisun yhteydessä, jos dataa ei ole saatavilla.
- write(buf: bytes | bytearray | str) int | None¶
Kirjoittaa tavupuskurin väylälle. Jos merkit ovat 7 tai 8 bittiä leveitä, kukin tavu on yksi merkki. Jos merkit ovat 9 bittiä leveitä, kullekin merkille käytetään kahta tavua (little endian), ja
buftäytyy sisältää parillinen määrä tavuja.Paluuarvo: kirjoitettujen tavujen määrä. Jos aikakatkaisu tapahtuu eikä yhtään tavua kirjoitettu, palauttaa
None.
Vakiot¶
Vuonohjaus¶
UART(3) tukee RTS/CTS-laitteistovuonohjausta. OpenMV Cam M7-, H7-, H7 Plus- ja Pure Thermal -malleissa vuonohjausnastat ovat:
(TX, RX, nRTS, nCTS) = (P4, P5, P1, P2)
OpenMV Cam N6 -mallissa vain nRTS on tuotu ulos (liitinnastaan P7); nCTS ei ole reititetty I/O-liittimeen.
Seuraavissa kappaleissa termi ”kohde” viittaa UART:iin kytkettyyn laitteeseen.
Kun UART:n init()-metodi kutsutaan flow-arvolla, joka on asetettu yhteen tai molempiin arvoista UART.RTS ja UART.CTS, asianmukaiset vuonohjausnastat määritetään. nRTS on aktiivi-matala lähtö ja nCTS on aktiivi-matala tulo ylösvetovastuksella varustettuna. Kytkeäksesi vuonohjauksen, yhdistä OpenMV Camin nCTS kohteen nRTS-nastaan ja OpenMV Camin nRTS kohteen nCTS-nastaan.
CTS: kohde ohjaa OpenMV Camin lähetintä¶
Jos CTS-vuonohjaus on käytössä, kirjoituskäyttäytyminen on seuraava:
Jos OpenMV Camin UART.write(buf)-metodi kutsutaan, lähetys pysähtyy kaikkina ajanjaksoina, joina nCTS on False. Tämä johtaa aikakatkaisuun, jos koko puskuria ei lähetetty aikakatkaisuajan kuluessa. Metodi palauttaa kirjoitettujen tavujen määrän, jolloin käyttäjä voi kirjoittaa loput datasta tarvittaessa. Aikakatkaisun yhteydessä yksi merkki jää UART:iin odottamaan nCTS-signaalia. Tämän merkin muodostavien tavujen määrä sisältyy paluuarvoon.
Jos UART.writechar() kutsutaan, kun nCTS on False, metodi aikakatkaistaan, ellei kohde aseta nCTS-signaalia ajoissa. Jos se aikakatkaistaan, nostetaan OSError 116. Merkki lähetetään heti, kun kohde asettaa nCTS-signaalin.
RTS: OpenMV Cam ohjaa kohteen lähetintä¶
Jos RTS-vuonohjaus on käytössä, käyttäytyminen on seuraava:
Jos puskuroitua tuloa käytetään (read_buf_len > 0), saapuvat merkit puskuroidaan. Jos puskuri tulee täyteen, seuraava saapuva merkki saa nRTS-signaalin menemään False-tilaan: kohteen tulee lopettaa lähetys. nRTS menee True-tilaan, kun merkkejä luetaan puskurista.
Huomaa, että any()-metodi palauttaa puskurissa olevien tavujen määrän. Oletetaan, että puskurin pituus on N tavua. Jos puskuri tulee täyteen ja toinen merkki saapuu, nRTS asetetaan tilaan False ja any() palauttaa lukumäärän N. Kun merkkejä luetaan, ylimääräinen merkki sijoitetaan puskuriin ja se sisältyy myöhemmän any()-kutsun tulokseen.
Jos puskuroitua tuloa ei käytetä (read_buf_len == 0), merkin saapuminen saa nRTS-signaalin menemään False-tilaan, kunnes merkki on luettu.