我的程序是这样开始的:
#!/usr/bin/env python
import sys
from serial import Serial, EIGHTBITS, PARITY_NONE, STOPBITS_ONE
SERIAL_DEVICE = '/dev/ttyUSB0'
ser = Serial(SERIAL_DEVICE, timeout=2, baudrate=9600, bytesize=EIGHTBITS,
parity=PARITY_NONE, stopbits=STOPBITS_ONE)
程序的下一部分向设备发送一些内容,然后期望得到响应。当我在重新启动后运行它时,它找不到预期的响应,并以错误终止(这是正确的行为,除了它看不到预期的响应)。
但是,如果我运行
minicom
并通过minicom
与设备对话,它可以正常工作。如果我关闭minicom
并运行程序,它就可以正常运行。minicom
配置有一个空的初始化字符串,我总是退出而不重置。不用说,
minicom
有相同的设置AFAICS。它也有硬件控制,但我确实尝试将rtscts=True
作为Serial()
的参数,但没有发现任何差异(即使参数中有错误,这也不能解释为什么在执行minicom
之后程序可以正常工作)。 最佳答案
出现的症状表示程序没有将串行终端初始化为所需的正确模式。
minicom有相同的设置AFAICS
似乎你选择猜测而不是收集实际数据。
在使用minicom之前和之后使用stty -a -F /dev/ttyUSB0
。
主要的区别是termios模式在默认情况下可能是规范的(在重新启动之后),minicom将其保留为非规范模式。
在启动程序之前尝试使用stty raw -F /dev/ttyUSB0
。