【问题标题】:Serial port doesn't work properly after reboot, unless I execute minicom重启后串口无法正常工作,除非我执行 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 程序之后工作正常)。

【问题讨论】:

    标签: linux serial-port pyserial


    【解决方案1】:

    您的症状表明您的程序未将串行终端初始化为所需的正确模式。

    minicom 具有相同的设置 AFAICS

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

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

    【讨论】:

    • 谢谢。根据您的建议,我确定罪魁祸首是 HUPCL。我修改了程序,它现在检查 HUPCL 是否打开;如果是,则将其关闭,然后关闭并重新打开端口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多