class UART – çift yönlü seri iletişim veri yolu¶
UART, standart UART/USART çift yönlü seri iletişim protokolünü uygular. Fiziksel düzeyde 2 hattan oluşur: RX ve TX. İletişim birimi, 8 veya 9 bit genişliğinde olabilen bir karakterdir (bir dize karakteriyle karıştırılmamalıdır).
UART nesneleri şu şekilde oluşturulabilir ve başlatılabilir:
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
Bits 7, 8 veya 9 olabilir. Stop 1 veya 2 olabilir. parity=None ile yalnızca 8 ve 9 bit desteklenir. Parite 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ış yöntemleri kullanılarak 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
Yapıcılar¶
- 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)¶
Verilen id’ye sahip bir UART nesnesi oluşturur.
Yöntemler¶
- 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¶
UART veri yolunu verilen parametrelerle başlatır:
baudrate saat hızıdır.
bits karakter başına bit sayısıdır; 7, 8 veya 9.
parity paritedir;
None, 0 (çift) veya 1 (tek).stop durdurma biti sayısıdır; 1 veya 2.
Bir port tarafından desteklenebilecek ek, yalnızca anahtar sözcükle verilen parametreler şunlardır:
tx kullanılacak TX pinini belirtir.
rx kullanılacak RX pinini belirtir.
rts donanımsal alma akış denetimi için kullanılacak RTS (çıkış) pinini belirtir.
cts donanımsal gönderme akış denetimi için kullanılacak CTS (giriş) pinini belirtir.
txbuf TX arabelleğinin karakter cinsinden uzunluğunu belirtir.
rxbuf RX arabelleğinin karakter cinsinden uzunluğunu belirtir.
timeout ilk karakter için beklenecek süreyi (ms cinsinden) belirtir.
timeout_char karakterler arasında beklenecek süreyi (ms cinsinden) belirtir.
invert hangi hatların ters çevrileceğini belirtir.
0hatları ters çevirmez (her iki hattın boşta durumu mantıksal yüksektir).UART.INV_TXTX hattını ters çevirir (TX hattının boşta durumu artık mantıksal düşüktür).UART.INV_RXRX hattını ters çevirir (RX hattının boşta durumu artık mantıksal düşüktür).UART.INV_TX | UART.INV_RXher iki hattı da ters çevirir (boşta durum mantıksal düşüktür).
flow hangi donanımsal akış denetimi sinyallerinin kullanılacağını belirtir. Değer bir bit maskesidir.
0donanımsal akış denetimi sinyallerini yok sayar.UART.RTSalma FIFO’sunun daha fazla veri kabul etmek için yeterli alana sahip olup olmadığını bildirmek üzere RTS çıkış pinini kullanarak alma akış denetimini etkinleştirir.UART.CTSCTS giriş pini alıcının arabellek alanının azaldığını bildirdiğinde iletimi duraklatarak gönderme akış denetimini etkinleştirir.UART.RTS | UART.CTStam donanımsal akış denetimi için her ikisini de etkinleştirir.
Not
UART’ı anında yeniden yapılandırmak için aynı nesne üzerinde
init()birden çok kez çağrılabilir. Bu, tek bir UART çevre birimini farklı GPIO pinlerine bağlı farklı aygıtlara hizmet vermek için kullanmayı sağlar. Bu durumda aynı anda yalnızca bir aygıta hizmet verilebilir. Ayrıcadeinit()çağrısı,init()‘i yeniden çağırmayı engelleyeceğinden bu çağrıyı yapmayın.
- deinit() None¶
UART veri yolunu kapatır.
Not
deinit()çağrısından sonra nesne üzerindeinit()çağrısı yapamazsınız. Bu durumda yeni bir örnek oluşturulması gerekir.
- any() int¶
Bloke olmadan okunabilecek karakter sayısını veren bir tam sayı döndürür. Okunabilir karakter yoksa 0, varsa pozitif bir sayı döndürür. Okunmaya hazır birden fazla karakter olsa bile yöntem 1 döndürebilir.
Kullanılabilir karakterlerin daha gelişmiş şekilde sorgulanması için select.poll kullanın:
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
- read(nbytes: int | None = None, /) bytes | None¶
Karakterleri okur.
nbytesbelirtilirse en fazla o kadar bayt okunur, aksi takdirde mümkün olduğunca çok veri okunur. Bir zaman aşımına ulaşıldığında daha erken dönebilir. Zaman aşımı yapıcıda yapılandırılabilir.Dönüş değeri: okunan baytları içeren bir bytes nesnesi. Zaman aşımında
Nonedöndürür.
- readinto(buf: bytearray, nbytes: int | None = None, /) int | None¶
Baytları
bufiçine okur.nbytesbelirtilirse en fazla o kadar bayt okunur. Aksi takdirde en fazlalen(buf)bayt okunur. Bir zaman aşımına ulaşıldığında daha erken dönebilir. Zaman aşımı yapıcıda yapılandırılabilir.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. Bir zaman aşımına ulaşıldığında daha erken dönebilir. Zaman aşımı yapıcıda yapılandırılabilir.
Dönüş değeri: okunan satır veya zaman aşımında
None.
- write(buf: bytes) int | None¶
Bayt arabelleğini veri yoluna yazar.
Dönüş değeri: yazılan bayt sayısı veya zaman aşımında
None.
- sendbreak() None¶
Veri yolunda bir kesme (break) durumu gönderir; TX hattını bir karakter süresinden daha uzun süre düşük tutar. STM32 ve mimxrt üzerinde kullanılabilir; alif üzerinde sunulmaz.
- readchar() int¶
UART’tan tek bir karakter okur ve bunu bir tam sayı olarak döndürür (veya zaman aşımında
-1). Hiçbirbytesnesnesi ayrılmadığındanread(1)yöntemine göre daha az yük getirir. Yalnızca STM32.
- writechar(char: int) None¶
Tek bir
charkarakterini (0–255aralığında bir tam sayı) UART’a yazar. Tek baytlık gönderimler içinwrite()yöntemine göre daha az yük getirir. Yalnızca STM32.
- flush() None¶
Gönderme arabelleğinde şu anda bulunan her bayt TX üzerinden tamamen gönderilene kadar bloke olur. Zaman aşımında
OSErroryükseltir; zaman aşımı, TX arabellek boyutu ve yapılandırılmış baud hızından türetilir; dolayısıyla akış denetimi etkin değilse ve alıcı takılmadıkça çağrı zaman aşımından çok önce döner.
- txdone() bool¶
Devam eden bir iletim olmadığında (TX arabelleği boşsa ve kaydırma yazmacı boşaltılmışsa)
True, aksi takdirdeFalsedöndürür.flush()için bloke etmeyen bir alternatif olarak kullanışlıdır.
- irq(handler: Callable[[UART], None] | None = None, trigger: int = 0, hard: bool = False) None¶
UART olaylarında tetiklenecek bir geri çağırma (callback) kurar.
handlerçağrılacak işlevdir. Tek argümanı olarakUARTörneğini alır. Önceden kurulmuş bir işleyiciyi kaldırmak içinNonegeçin.triggerhangi olayların geri çağırmayı tetikleyeceğini seçen bir veya daha fazlaIRQ_*sabitinden oluşan bir bit maskesidir (aşağıdaki Sabitler bölümüne bakın).hard=Truebir donanım kesme işleyicisi kaydeder (daha düşük gecikme, ancak işleyici bellek ayırmamalıdır). Varsayılan, zamanlanmış bir geri çağırmadır.Bir irq nesnesi döndürür.
Her IRQ kaynağı her portta kullanılabilir değildir; her port için kullanılabilirlik konusunda her bir
IRQ_*sabitine bakın.
Sabitler¶
- RTS: int¶
Alma tarafında RTS donanımsal akış denetimini etkinleştirmek için
flow‘a geçin. Her ikisini de etkinleştirmek için OR ileCTSile birleştirin.
- IRQ_RXIDLE: int¶
irq()tetikleme bayrağı: bir veya daha fazla karakter alındıktan sonra RX hattı boşa geçtiğinde bir kez tetiklenir. Tüm OpenMV portlarında kullanılabilir.
- IRQ_RX: int¶
irq()tetikleme bayrağı: alınan her karakterden sonra tetiklenir. STM32 ve alif üzerinde kullanılabilir.