MicroPython1.16树莓派Pico的UART.init()、deinit()是否废弃及缓冲区清空方法
问题原因说明
你遇到的AttributeError不是方法废弃导致的,是MicroPython 1.16版本的RP2040(树莓派Pico所用芯片)端口UART模块,尚未实现deinit()和实例级init()方法。官方通用文档的API是全平台标准定义,不同硬件端口的实现进度存在差异,1.19及以上版本的MicroPython已经补充了RP2040平台这两个API的实现,若不想升级固件可使用以下替代方案清空缓冲区。
清空UART输入缓冲区的可行方案
- 方案1:直接读空缓冲区(最高效,不改变现有UART配置)
利用UART.any()方法查询待接收的字节数,读取直到缓冲区为空即可,示例代码:
针对你RX、TX物理短接的场景,也可以在发送完固定长度数据后,直接读取对应长度的自发数据丢弃,比全量读取更高效:# 清空输入缓冲区所有待读数据 while uart.any(): uart.read(1) # 也可以直接一次性读取所有待读数据,代码更简洁 # uart.read()send_data = b"test_payload" uart.write(send_data) # 丢弃自发的对应长度数据 uart.read(len(send_data)) - 方案2:重新实例化UART对象(等效于重新初始化端口)
不需要调用deinit(),直接重新执行UART实例化语句即可完成硬件端口重置,原有缓冲区数据会被自动清空,示例代码:from machine import UART, Pin # 原有初始化逻辑 uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) # 需要重置UART时重新执行实例化即可 uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
内容的提问来源于stack exchange,提问作者Claudio Rodriguez
相关产品推荐
相关产品推荐

