class UART -- 全二重シリアル通信バス¶
UART は標準的な UART/USART 全二重シリアル通信プロトコルを実装します。物理層では RX と TX の 2 本の信号線で構成されます。通信の単位は文字(string の文字と混同しないでください)であり、8 ビットまたは 9 ビット幅にできます。
UART オブジェクトは次のように作成して初期化できます:
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
ビット数は 7、8、または 9 にできます。ストップビットは 1 または 2 にできます。parity=None の場合は 8 ビットと 9 ビットのみがサポートされます。パリティを有効にした場合は 7 ビットと 8 ビットのみがサポートされます。
UART オブジェクトは stream オブジェクトのように動作し、読み書きは標準のストリームメソッドを使用して行います:
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
コンストラクタ¶
- 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)¶
指定した id を持つ UART オブジェクトを構築します。
メソッド¶
- 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 バスを初期化します:
baudrate はクロックレートです。
bits は 1 文字あたりのビット数で、7、8、または 9 です。
parity はパリティで、
None、0(偶数)、または 1(奇数)です。stop はストップビットの数で、1 または 2 です。
ポートによってサポートされる場合がある追加のキーワード専用パラメータは次のとおりです:
tx は使用する TX ピンを指定します。
rx は使用する RX ピンを指定します。
rts はハードウェア受信フロー制御に使用する RTS(出力)ピンを指定します。
cts はハードウェア送信フロー制御に使用する CTS(入力)ピンを指定します。
txbuf は TX バッファの長さを文字数で指定します。
rxbuf は RX バッファの長さを文字数で指定します。
timeout は最初の文字を待つ時間(ミリ秒単位)を指定します。
timeout_char は文字間で待つ時間(ミリ秒単位)を指定します。
invert はどの信号線を反転させるかを指定します。
0は信号線を反転しません(両方の信号線のアイドル状態は論理ハイです)。UART.INV_TXは TX 信号線を反転します(TX 信号線のアイドル状態が論理ローになります)。UART.INV_RXは RX 信号線を反転します(RX 信号線のアイドル状態が論理ローになります)。UART.INV_TX | UART.INV_RXは両方の信号線を反転します(アイドル状態が論理ローになります)。
flow はどのハードウェアフロー制御信号を使用するかを指定します。値はビットマスクです。
0はハードウェアフロー制御信号を無視します。UART.RTSは、受信 FIFO により多くのデータを受け入れる十分な空きがあるかどうかを通知するために RTS 出力ピンを使用して、受信フロー制御を有効にします。UART.CTSは、受信側のバッファ空き容量が少なくなっていることを CTS 入力ピンが通知したときに送信を一時停止することで、送信フロー制御を有効にします。UART.RTS | UART.CTSは両方を有効にし、完全なハードウェアフロー制御を実現します。
注釈
同じオブジェクトに対して
init()を複数回呼び出して、UART を動的に再設定することが可能です。これにより、1 つの UART ペリフェラルを使用して、異なる GPIO ピンに接続された異なるデバイスを処理できます。ただしこの場合、一度に処理できるデバイスは 1 つだけです。また、init()を再度呼び出せなくなるため、deinit()を呼び出さないでください。
- deinit() None¶
UART バスをオフにします。
注釈
deinit()の後はオブジェクトに対してinit()を呼び出せなくなります。その場合は新しいインスタンスを作成する必要があります。
- any() int¶
ブロックせずに読み取れる文字数を表す整数を返します。読み取れる文字がない場合は 0 を、文字がある場合は正の数を返します。このメソッドは、複数の文字が読み取り可能であっても 1 を返す場合があります。
読み取り可能な文字をより高度に問い合わせるには、select.poll を使用してください:
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
- read(nbytes: int | None = None, /) bytes | None¶
文字を読み取ります。
nbytesが指定されている場合は最大でそのバイト数を読み取り、そうでない場合はできるだけ多くのデータを読み取ります。タイムアウトに達した場合は、それより早く返ることがあります。タイムアウトはコンストラクタで設定できます。戻り値: 読み取ったバイトを含む bytes オブジェクト。タイムアウト時は
Noneを返します。
- readinto(buf: bytearray, nbytes: int | None = None, /) int | None¶
bufにバイトを読み込みます。nbytesが指定されている場合は最大でそのバイト数を読み取ります。そうでない場合は最大でlen(buf)バイトを読み取ります。タイムアウトに達した場合は、それより早く返ることがあります。タイムアウトはコンストラクタで設定できます。戻り値: 読み取って
bufに格納したバイト数。タイムアウト時はNoneを返します。
- readline() bytes | None¶
改行文字で終わる 1 行を読み取ります。タイムアウトに達した場合は、それより早く返ることがあります。タイムアウトはコンストラクタで設定できます。
戻り値: 読み取った行。タイムアウト時は
Noneを返します。
- sendbreak() None¶
バス上にブレーク状態を送出します。つまり、1 文字分の時間より長く TX をローに駆動します。STM32 と mimxrt で利用できます。alif では公開されていません。
- readchar() int¶
UART から 1 文字を読み取り、整数として返します(タイムアウト時は
-1)。bytesオブジェクトを割り当てないため、read(1)よりオーバーヘッドが小さくなります。STM32 のみ。
- writechar(char: int) None¶
1 文字
char(0--255の範囲の整数)を UART に書き込みます。単一バイトの送信ではwrite()よりオーバーヘッドが小さくなります。STM32 のみ。
- flush() None¶
送信バッファ内の現在の全バイトが TX 上にクロック出力されるまでブロックします。タイムアウト時には
OSErrorを送出します。タイムアウトは TX バッファサイズと設定されたボーレートから導出されるため、フロー制御が有効で受信側が停止しない限り、呼び出しはタイムアウトより十分前に返ります。
- txdone() bool¶
送信が進行中でない場合(TX バッファが空でシフトレジスタも排出済みの場合)は
Trueを、それ以外の場合はFalseを返します。flush()の非ブロッキングな代替手段として便利です。
- irq(handler: Callable[[UART], None] | None = None, trigger: int = 0, hard: bool = False) None¶
UART イベントで発火するコールバックをインストールします。
handlerは呼び出す関数です。UARTインスタンスを唯一の引数として受け取ります。Noneを渡すと、以前にインストールしたハンドラを削除します。triggerは、どのイベントがコールバックを発火させるかを選択する 1 つ以上のIRQ_*定数(後述の「定数」を参照)のビットマスクです。hard=Trueはハード割り込みハンドラを登録します(レイテンシは低くなりますが、ハンドラはメモリ割り当てを行ってはなりません)。デフォルトはスケジュールされたコールバックです。irq オブジェクトを返します。
すべての IRQ ソースがすべてのポートで利用できるわけではありません。ポートごとの利用可否については、個々の
IRQ_*定数を参照してください。
定数¶