class UART – çift yönlü (duplex) seri haberleşme veri yolu¶
UART, standart UART/USART çift yönlü (duplex) seri haberleşme protokolünü uygular. Fiziksel düzeyde 2 hattan oluşur: RX ve TX. Haberleşme birimi, 8 veya 9 bit genişliğinde olabilen bir karakterdir (bir dize karakteriyle karıştırılmamalıdır).
UART nesneleri aşağıdaki gibi oluşturulabilir ve başlatılabilir:
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 7, 8 veya 9 olabilir. Parity None, 0 (çift) veya 1 (tek) olabilir. Stop 1 veya 2 olabilir.
Not: parity=None ile yalnızca 8 ve 9 bit desteklenir. Parity etkinleştirildiğinde yalnızca 7 ve 8 bit desteklenir.
Bir UART nesnesi bir stream nesnesi gibi davranır ve okuma ile yazma işlemleri standart akış (stream) yöntemleriyle yapılır:
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
Tek tek karakterler aşağıdaki gibi okunabilir/yazılabilir:
uart.readchar() # read 1 character and returns it as an integer
uart.writechar(42) # write 1 character
Okunacak bir şey olup olmadığını kontrol etmek için şunu kullanın:
uart.any() # returns the number of characters waiting
Not: read, write vb. akış (stream) fonksiyonları MicroPython v1.3.4 sürümünde yenidir. Daha eski sürümler uart.send ve uart.recv kullanır.
Yapıcılar¶
- class pyb.UART(bus: int | str, *args, **kwargs)¶
Verilen
busüzerinde bir UART nesnesi oluşturur (bir tamsayı çevre birimi indeksi, örneğinUART3için3). Ek parametre verilmediğinde nesne oluşturulur ancak başlatılmaz (varsa önceki veri yolu ayarlarını korur); ek argümanlar verilirse veri yolu başlatılır. Kullanılabilir parametreler için bkz.init().UART(3), her STM32 OpenMV Cam üzerinde aynı başlık pinlerine bağlıdır:Sinyal
Başlık pini
TXP4RXP5Bazı kartlarda ek UART veri yolları mevcuttur:
Veri yolu
TX pini
RX pini
Mevcut olduğu kartlar
UART(1)P1P0OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal
UART(4)P2P3OpenMV Cam N6
UART(7)P14P13OpenMV Cam N6
Yöntemler¶
- 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¶
UART veri yolunu verilen parametrelerle başlatır:
baudratesaat hızıdır.bitskarakter başına bit sayısıdır; 7, 8 veya 9.parityparitedir;None, 0 (çift) veya 1 (tek).stopdurdurma biti sayısıdır; 1 veya 2.flowakış kontrolü türünü ayarlar. 0,UART.RTS,UART.CTSveyaUART.RTS | UART.CTSolabilir.timeoutilk karakteri yazmak/okumak için beklenecek milisaniye cinsinden zaman aşımıdır.timeout_charyazma veya okuma sırasında karakterler arasında beklenecek milisaniye cinsinden zaman aşımıdır.read_buf_lenokuma arabelleğinin karakter cinsinden uzunluğudur (devre dışı bırakmak için 0).
Baud hızı istenen değerin %5’i içinde ayarlanamazsa bu yöntem bir istisna fırlatır.
Not: parity=None ile yalnızca 8 ve 9 bit desteklenir. Parity etkinleştirildiğinde yalnızca 7 ve 8 bit desteklenir.
- read(nbytes: int | None = None) bytes | None¶
Karakter okur.
nbytesbelirtilirse en fazla o kadar bayt okur.nbytesarabellekte mevcutsa hemen döner; aksi takdirde yeterli karakter geldiğinde veya zaman aşımı dolduğunda döner.nbytesverilmezse yöntem mümkün olduğunca çok veri okur. Zaman aşımı dolduktan sonra döner.Not: 9 bitlik karakterler için her karakter iki bayt alır,
nbytesçift olmalıdır ve karakter sayısınbytes/2olur.Dönüş değeri: okunan baytları içeren bir bytes nesnesi. Zaman aşımında
Nonedöndürür.
- readchar() int¶
Veri yolundan tek bir karakter alır.
Dönüş değeri: okunan karakter, bir tamsayı olarak. Zaman aşımında -1 döndürür.
- readinto(buf: bytearray, nbytes: int | None = None) int | None¶
Baytları
bufiçine okur.nbytesbelirtilirse en fazla o kadar bayt okur. Aksi takdirde en fazlalen(buf)bayt okur.Dönüş değeri: okunan ve
bufiçine depolanan bayt sayısı veya zaman aşımındaNone.
- readline() bytes | None¶
Yeni satır karakteriyle biten bir satır okur. Böyle bir satır varsa dönüş anında olur. Zaman aşımı dolarsa, yeni satır olup olmadığına bakılmaksızın mevcut tüm veriler döndürülür.
Dönüş değeri: okunan satır veya veri yoksa zaman aşımında
None.
- write(buf: bytes | bytearray | str) int | None¶
Bayt arabelleğini veri yoluna yazar. Karakterler 7 veya 8 bit genişliğindeyse her bayt bir karakterdir. Karakterler 9 bit genişliğindeyse her karakter için iki bayt kullanılır (little endian) ve
bufçift sayıda bayt içermelidir.Dönüş değeri: yazılan bayt sayısı. Zaman aşımı oluşur ve hiç bayt yazılmazsa
Nonedöndürür.
Sabitler¶
Akış Kontrolü¶
UART(3), RTS/CTS donanım akış kontrolünü destekler. OpenMV Cam M7, H7, H7 Plus ve Pure Thermal üzerinde akış kontrolü pinleri şunlardır:
(TX, RX, nRTS, nCTS) = (P4, P5, P1, P2)
OpenMV Cam N6 üzerinde yalnızca nRTS açığa çıkarılmıştır (P7 başlık pininde); nCTS G/Ç başlığına yönlendirilmemiştir.
Aşağıdaki paragraflarda “hedef” terimi UART’a bağlı cihazı ifade eder.
UART’ın init() yöntemi flow UART.RTS ve UART.CTS değerlerinden biri veya ikisi olarak ayarlanarak çağrıldığında, ilgili akış kontrolü pinleri yapılandırılır. nRTS aktif-düşük (active-low) bir çıkıştır ve nCTS pull-up etkinleştirilmiş aktif-düşük (active-low) bir girdidir. Akış kontrolünü bağlamak için OpenMV Cam’in nCTS pinini hedefin nRTS pinine, OpenMV Cam’in nRTS pinini ise hedefin nCTS pinine bağlayın.
CTS: hedef, OpenMV Cam vericisini kontrol eder¶
CTS akış kontrolü etkinleştirilirse yazma davranışı şu şekildedir:
OpenMV Cam’in UART.write(buf) yöntemi çağrılırsa, nCTS False olduğu tüm dönemlerde iletim duraklar. Tüm arabellek zaman aşımı süresi içinde iletilmezse bu bir zaman aşımına yol açar. Yöntem yazılan bayt sayısını döndürür ve böylece kullanıcı gerekirse verinin geri kalanını yazabilir. Zaman aşımı durumunda, nCTS beklenirken UART’ta bir karakter kalır. Bu karakteri oluşturan bayt sayısı dönüş değerine dahil edilir.
nCTS False iken UART.writechar() çağrılırsa, hedef zamanında nCTS öne sürmedikçe yöntem zaman aşımına uğrar. Zaman aşımına uğrarsa OSError 116 fırlatılır. Hedef nCTS öne sürer sürmez karakter iletilir.
RTS: OpenMV Cam, hedefin vericisini kontrol eder¶
RTS akış kontrolü etkinleştirilirse davranış şu şekildedir:
Arabellekli girdi kullanılırsa (read_buf_len > 0), gelen karakterler arabelleğe alınır. Arabellek dolarsa, gelen bir sonraki karakter nRTS değerinin False olmasına neden olur: hedef iletimi durdurmalıdır. Arabellekten karakterler okunduğunda nRTS True olur.
any() yönteminin arabellekteki bayt sayısını döndürdüğünü unutmayın. N baytlık bir arabellek uzunluğu varsayın. Arabellek dolar ve başka bir karakter gelirse, nRTS False olarak ayarlanır ve any() N sayısını döndürür. Karakterler okunduğunda ek karakter arabelleğe yerleştirilir ve sonraki bir any() çağrısının sonucuna dahil edilir.
Arabellekli girdi kullanılmazsa (read_buf_len == 0), bir karakterin gelmesi, karakter okunana kadar nRTS değerinin False olmasına neden olur.