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.

    • 0 hatları ters çevirmez (her iki hattın boşta durumu mantıksal yüksektir).

    • UART.INV_TX TX hattını ters çevirir (TX hattının boşta durumu artık mantıksal düşüktür).

    • UART.INV_RX RX hattını ters çevirir (RX hattının boşta durumu artık mantıksal düşüktür).

    • UART.INV_TX | UART.INV_RX her 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.

    • 0 donanımsal akış denetimi sinyallerini yok sayar.

    • UART.RTS alma 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.CTS CTS 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.CTS tam 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ıca deinit() ç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 üzerinde init() ç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. nbytes belirtilirse 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 None döndürür.

readinto(buf: bytearray, nbytes: int | None = None, /) int | None

Baytları buf içine okur. nbytes belirtilirse en fazla o kadar bayt okunur. Aksi takdirde en fazla len(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 buf içine depolanan bayt sayısı veya zaman aşımında None.

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çbir bytes nesnesi ayrılmadığından read(1) yöntemine göre daha az yük getirir. Yalnızca STM32.

writechar(char: int) None

Tek bir char karakterini (0255 aralığında bir tam sayı) UART’a yazar. Tek baytlık gönderimler için write() 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 OSError yü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 takdirde False dö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ı olarak UART örneğini alır. Önceden kurulmuş bir işleyiciyi kaldırmak için None geçin.

trigger hangi olayların geri çağırmayı tetikleyeceğini seçen bir veya daha fazla IRQ_* sabitinden oluşan bir bit maskesidir (aşağıdaki Sabitler bölümüne bakın).

hard=True bir 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 ile CTS ile birleştirin.

CTS: int

Gönderme tarafında CTS donanımsal akış denetimini etkinleştirmek için flow‘a geçin.

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.

IRQ_TXIDLE: int

irq() tetikleme bayrağı: bir iletimin son karakteri tamamen gönderildiğinde tetiklenir. mimxrt ve alif üzerinde kullanılabilir.

IRQ_BREAK: int

irq() tetikleme bayrağı: RX üzerinde bir kesme (break) durumu algılandığında tetiklenir. Hiçbir OpenMV portunda kullanılamaz.