class UART – 양방향 직렬 통신 버스¶
UART은 표준 UART/USART 양방향 직렬 통신 프로토콜을 구현합니다. 물리 계층에서는 RX와 TX 두 개의 라인으로 구성됩니다. 통신 단위는 문자(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
Bits는 7, 8 또는 9일 수 있습니다. Stop은 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는 문자당 비트 수로, 7, 8 또는 9입니다.
parity는 패리티로,
None, 0(짝수) 또는 1(홀수)입니다.stop은 정지 비트 수로, 1 또는 2입니다.
포트에서 지원할 수 있는 추가 키워드 전용 매개변수는 다음과 같습니다:
tx는 사용할 TX 핀을 지정합니다.
rx는 사용할 RX 핀을 지정합니다.
rts는 하드웨어 수신 흐름 제어에 사용할 RTS(출력) 핀을 지정합니다.
cts는 하드웨어 송신 흐름 제어에 사용할 CTS(입력) 핀을 지정합니다.
txbuf는 TX 버퍼의 길이를 문자 단위로 지정합니다.
rxbuf는 RX 버퍼의 길이를 문자 단위로 지정합니다.
timeout은 첫 번째 문자를 기다릴 시간을 (ms 단위로) 지정합니다.
timeout_char는 문자 사이에 기다릴 시간을 (ms 단위로) 지정합니다.
invert는 반전할 라인을 지정합니다.
0은 라인을 반전하지 않습니다(두 라인의 유휴 상태는 모두 논리 하이입니다).UART.INV_TX는 TX 라인을 반전합니다(이제 TX 라인의 유휴 상태는 논리 로우입니다).UART.INV_RX는 RX 라인을 반전합니다(이제 RX 라인의 유휴 상태는 논리 로우입니다).UART.INV_TX | UART.INV_RX는 두 라인을 모두 반전합니다(유휴 상태가 논리 로우).
flow는 사용할 하드웨어 흐름 제어 신호를 지정합니다. 값은 비트마스크입니다.
0은 하드웨어 흐름 제어 신호를 무시합니다.UART.RTS는 RTS 출력 핀을 사용하여 수신 FIFO에 더 많은 데이터를 받아들일 충분한 공간이 있는지 신호함으로써 수신 흐름 제어를 활성화합니다.UART.CTS는 CTS 입력 핀이 수신기의 버퍼 공간이 부족하다는 신호를 보낼 때 송신을 일시 중지함으로써 송신 흐름 제어를 활성화합니다.UART.RTS | UART.CTS는 둘 다 활성화하여 완전한 하드웨어 흐름 제어를 수행합니다.
참고
동일한 객체에서
init()을 여러 번 호출하여 UART를 즉석에서 재구성할 수 있습니다. 이를 통해 단일 UART 주변장치를 사용하여 서로 다른 GPIO 핀에 연결된 여러 장치를 서비스할 수 있습니다. 이 경우 한 번에 하나의 장치만 서비스할 수 있습니다. 또한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¶
개행 문자로 끝나는 한 줄을 읽습니다. 타임아웃에 도달하면 더 일찍 반환될 수 있습니다. 타임아웃은 생성자에서 구성할 수 있습니다.
반환 값: 읽은 줄, 또는 타임아웃 시
None.
- sendbreak() None¶
버스에 브레이크 조건을 전송합니다 – 한 문자 시간보다 더 길게 TX를 로우로 구동합니다. STM32와 mimxrt에서 사용할 수 있으며, alif에서는 노출되지 않습니다.
- readchar() int¶
UART에서 단일 문자를 읽어 정수로 반환합니다(타임아웃 시
-1).bytes객체가 할당되지 않으므로read(1)보다 오버헤드가 적습니다. STM32 전용.
- writechar(char: int) None¶
단일 문자
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는 어떤 이벤트가 콜백을 발생시킬지 선택하는 하나 이상의IRQ_*상수(아래 Constants 참조)의 비트마스크입니다.hard=True는 하드 인터럽트 핸들러를 등록합니다(지연 시간이 더 낮지만 핸들러는 메모리를 할당해서는 안 됩니다). 기본값은 스케줄된 콜백입니다.irq 객체를 반환합니다.
모든 IRQ 소스가 모든 포트에서 사용 가능한 것은 아닙니다 – 포트별 사용 가능 여부는 개별
IRQ_*상수를 참조하십시오.
상수¶