You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()方法查询待接收的字节数,读取直到缓冲区为空即可,示例代码:
    # 清空输入缓冲区所有待读数据
    while uart.any():
        uart.read(1)
    # 也可以直接一次性读取所有待读数据,代码更简洁
    # uart.read()
    
    针对你RX、TX物理短接的场景,也可以在发送完固定长度数据后,直接读取对应长度的自发数据丢弃,比全量读取更高效:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:21:01