UART 类——双工串行通信总线

UART 实现标准的 UART/USART 双工串行通信协议。在物理层,它由 2 条线组成: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:位可以是 7、8 或 9。停止可以是 1 或 2。使用parity=None,仅支持 8 和 9 位。启用奇偶校验后,仅支持 7 位和 8 位。

WiPy/CC3200:位可以是 5、6、7、8。停止可以是 1 或 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是奇偶校验,None0(偶数)或 1(奇数)。

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

端口可能支持的其他仅关键字参数包括:

  • tx指定要使用的 TX 引脚。

  • rx指定要使用的 RX 引脚。

  • txbuf指定 TX 缓冲区的字符长度。

  • rxbuf指定 RX 缓冲区的字符长度。

  • timeout指定等待第一个字符的时间(以毫秒为单位)。

  • timeout_char指定在字符之间等待的时间(以毫秒为单位)。

  • invert指定要反转的行。

在 WiPy 上,仅支持以下仅关键字参数:

  • 引脚是 4 或 2 项列表,指示 TX、RX、RTS 和 CTS 引脚(按此顺序)。如果希望 UART 以有限的功能运行,则任何引脚都可以为 None。如果提供 RTS 引脚,则也必须提供 RX 引脚。这同样适用于 CTS。如果没有给出引脚,则采用默认的 TX 和 RX 引脚集,并且硬件流控制将被禁用。如果pin是 None,则不会进行 pin 分配。

UART.deinit()

关闭 UART 总线。

UART.any()

返回一个整数,计算可以在不阻塞的情况下读取的字符数。如果没有可用字符,则返回 0,如果有字符,则返回正数。即使有多个字符可供读取,该方法也可能返回 1。

要更复杂地查询可用字符,请使用 select.poll:

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

读取字符。如果nbytes指定,则最多读取那么多字节,否则读取尽可能多的数据。如果达到超时,它可能会更快返回。超时可在构造函数中配置。

返回值:包含读入字节的字节对象。None 超时时返回。

UART.readinto(buf[, nbytes])

将字节读入buf. 如果nbytes 指定,则最多读取那么多字节。否则,最多读取len(buf) 字节。如果达到超时,它可能会更快返回。超时可在构造函数中配置。

返回值:读取并存储到bufNone 超时的字节数。

UART.readline()

读取一行,以换行符结尾。如果达到超时,它可能会更快返回。超时可在构造函数中配置。

返回值:读取或 None 超时的行。

UART.write(buf)

将字节缓冲区写入总线。

返回值:写入或 None 超时的字节数。

UART.sendbreak()

在总线上发送中断条件。这会在比正常传输字符所需的时间更长的时间内将总线驱动为低电平。

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

创建在 UART 上接收到数据时触发的回调。

  • 触发器只能是 UART.RX_ANY

  • 中断的优先级。可以取 1-7 范围内的值。更高的值代表更高的优先级。

  • handler一个可选函数,在新字符到达时调用。

  • 醒来只能是machine.IDLE.

笔记

只要满足以下两个条件中的任何一个,就会调用处理程序:

  • 已收到 8 个新角色。

  • 至少有 1 个新字符在 Rx 缓冲区中等待,并且 Rx 线在 1 个完整帧的持续时间内一直处于静默状态。

这意味着在调用处理程序函数时将有 1 到 8 个字符在等待。

返回一个 irq 对象。

可用性:WiPy。

常数

UART.RX_ANY

IRQ 触发源

可用性:WiPy。