重启后串口不能正常工作,除非我执行minicom

Serial port doesn't work properly after reboot, unless I execute minicom

我的程序是这样开始的:

#!/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 has the same settings AFAICS

您似乎选择猜测而不是收集实际数据。
使用minicom.
前后使用stty -a -F /dev/ttyUSB0 主要区别在于 termios 模式可能默认为规范模式(重启后),而 minicom 使其处于非规范模式。

在启动程序之前尝试使用 stty raw -F /dev/ttyUSB0