重启后串口无法正常工作,除非我执行 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的主要内容,如果未能解决你的问题,请参考以下文章

Linux串口调试工具--minicom

linux下检测可用串口并使用minicom打开

请教usb转串口线在ubuntu下使用的问题

linux minicom 如何输入at

Linux下串口通信工具minicom的用法

minicom-linux串口工具