UART类 – 串口通讯类

UART实现标准UART / USART双向串行通信协议。其物理层包括两条线:RX和TX。通信单元是一个可为8位或9位宽的字符(请勿与字符串字符混淆)。

UART对象可使用下列方式创建并初始化:

from machine import UART

uart = UART(1, 9600)                         # init with given baudrate
uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters

所支持的参数在不同的板上会有所不同:

Pyboard/znzpi:位数可为7、8、9。终止可为1或2。当parity为None时,仅支持8位和9位。启用parity时,仅支持7位和8位。

WiPy/CC3200: Bits can be 5, 6, 7, 8. Stop can be 1 or 2.

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, ...)

构造一个具有给定id的UART对象。

方法

UART.init(baudrate=9600, bits=8, parity=None, stop=1, *, ...)

用给定的参数初始化UART总线:

  • baudrate 是时钟速率。

  • bits 是每个字符的位数,7,8或9。

  • parity 是奇偶校验,None,0(偶数) 或 1(奇数)。

  • stop 是停止位的数目,1或2。

其他可能被硬件支持的参数:

  • tx 指定使用的 TX 管脚.

  • rx 指定使用的 RX 管脚.

  • txbuf 指定发送缓冲TX字节长度.

  • rxbuf 指定接收缓冲RX字节长度.

  • timeout 等待第一个字节的过期时间(毫秒)

  • timeout_char 字节间隔过期时间(毫秒)

  • invert 管脚翻转

只在WiPy上支持的参数:

  • pins is a 4 or 2 item list indicating the TX, RX, RTS and CTS pins (in that order). Any of the pins can be None if one wants the UART to operate with limited functionality. If the RTS pin is given the the RX pin must be given as well. The same applies to CTS. When no pins are given, then the default set of TX and RX pins is taken, and hardware flow control will be disabled. If pins is None, no pin assignment will be made.

UART.deinit()

关闭UART总线。

UART.any()

返回一个整数,该整数即为在不阻塞情况下可读取的字符数。若无可用字符,则返回0,;若有可用字符,则返回一个正数。若有超过1个可读取字符,该方法则返回1。

若对可用字符进行更复杂查询,请使用select.poll:

poll = select.poll()
poll.register(uart, select.POLLIN)
poll.poll(timeout)
UART.read([nbytes])

读取字符。若指定 nbytes ,则最多读取该数量的字节。否则可读取尽可能多的数据。

返回值:读取并存入 buf 的字节数;若超时则返回 None

UART.readinto(buf[, nbytes])

读取到 buf 中,如果指定了 nbytes 则按指定字节数读取。否则按 len(buf) 最多读取。 如果出现超时,则读取可能不全。超时参数可以在构造时配置。

返回值:读取的行 buf;若超时,则返回 None

UART.readline()

读取一行,并以一个换行符结束。

返回值:读取的行;若超时,则返回 None

UART.write(buf)

将字节缓冲区写入总线。

返回值:写入的字节数;若超时,则返回 None

UART.sendbreak()

在总线上发送一个中断状态。这使得总线在一段时间内保持低状态,其持续时间比字符的正常传输所需时间长。

UART.irq(trigger, priority=1, handler=None, wake=machine.IDLE)

创建一个UART收到数据的时候能够触发的回调函数

  • trigger 只能为 UART.RX_ANY

  • priority 中断优先级。 可以指定为 1-7. 数值越高优先级越高。

  • handler 新字节到来时,可选的调用函数。

  • wake can only be machine.IDLE.

备注

出现下述两种情况,句柄会被调用:

  • 收到8个新字符

  • 在一帧完成中,至少有一个字符已经在接收缓存或发送缓存中

这意味着当句柄函数被调用的时候,至少有1-8个字符已经在等待。

返回一个中断处理对象。

可用于:WiPy。

常量

UART.RX_ANY

中断触发资源

可用于:WiPy。