Windows10下启用硬件流控时pyserial读取USB转UART设备失败
解决CP2102在pyserial启用硬件流控后读超时问题
针对你遇到的Silicon Labs CP2102 USB转UART设备在Windows 10下,使用pyserial启用DSR/DTR或RTS/CTS硬件流控后读取超时的问题,以下是几个针对性的解决方向:
1. 调整串口参数配置顺序
pyserial中,硬件流控相关参数(dsrdtr/rtscts)需要在串口打开前配置,而单独的引脚状态(dtr/rts)应在串口打开后设置——提前设置引脚状态会被open()时的流控初始化覆盖,导致流控逻辑异常。
修改后的示例代码:
import serial ser = serial.Serial() ser.baudrate = 230400 ser.port = "COM13" # 先启用DSR/DTR流控,不要提前设置dtr ser.dsrdtr = True ser.write_timeout = 1 ser.timeout = 1 ser.open() # 串口打开后再设置DTR引脚状态 ser.dtr = 1 # 合并写入操作,简化代码 n = ser.write(bytes([1, 2, 3])) print("bytes written ", n) # 一次性读取3字节,减少多次调用的开销 byte_read = ser.read(3) print(byte_read) ser.close()
如果使用RTS/CTS流控,替换流控参数即可:
# RTS/CTS流控配置 ser.rtscts = True ser.open() ser.rts = 1
2. 检查CP2102驱动的流控配置
Windows下CP2102的驱动可能会覆盖pyserial的部分设置,需确保驱动配置与代码一致:
- 打开设备管理器,找到CP2102对应的串口设备,右键选择「属性」
- 切换到「端口设置」标签页,点击「高级」按钮
- 在「流控制」选项中,选择与代码匹配的模式(如启用DSR/DTR时选对应选项,RTS/CTS选「硬件」)
- 部分驱动版本需手动勾选「启用DTR」或「启用RTS」,确保与代码中的引脚状态一致
3. 验证硬件引脚连接
确认CP2102的流控引脚与对端设备正确连接:
- DSR/DTR流控需连接DTR(CP2102引脚)到对端的DSR,DSR(CP2102引脚)到对端的DTR
- RTS/CTS流控需连接RTS到对端的CTS,CTS到对端的RTS
终端工具能正常工作可能是因为其默认忽略了部分引脚状态检查,而pyserial会严格遵循流控逻辑等待引脚信号。
4. 升级pyserial到最新版本
旧版本pyserial在Windows平台下存在硬件流控的兼容性bug,建议升级到最新稳定版:
pip install --upgrade pyserial
内容的提问来源于stack exchange,提问作者user97576
相关产品推荐
相关产品推荐

