重启后串口无法正常工作,除非我执行 minicom
Posted
技术标签:
【中文标题】重启后串口无法正常工作,除非我执行 minicom【英文标题】:Serial port doesn't work properly after reboot, unless I execute minicom 【发布时间】:2017-08-21 11:10:28 【问题描述】:我的程序是这样开始的:
#!/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
程序之后工作正常)。
【问题讨论】:
【参考方案1】:您的症状表明您的程序未将串行终端初始化为所需的正确模式。
minicom 具有相同的设置 AFAICS
您似乎选择猜测而不是收集实际数据。
在使用minicom之前和之后使用stty -a -F /dev/ttyUSB0
。
主要区别在于 termios 模式可能默认为规范(重启后),而 minicom 将其保留为非规范模式。
在启动程序之前尝试使用stty raw -F /dev/ttyUSB0
。
【讨论】:
谢谢。根据您的建议,我确定罪魁祸首是 HUPCL。我修改了程序,它现在检查 HUPCL 是否打开;如果是,则将其关闭,然后关闭并重新打开端口。以上是关于重启后串口无法正常工作,除非我执行 minicom的主要内容,如果未能解决你的问题,请参考以下文章