PySerial:在断开STLink USB线之前无法写入

时间:2018-04-23 06:12:13

标签: python serial-port embedded stm32 pyserial

我正在开发一些软件,它涉及通过UART在PC和嵌入式设备之间进行通信。我正在使用STLink的USB /串行适配器 大多数时候通信工作正常,但经过一段时间(可能是几小时/几分钟甚至几天),我得到写入超时,我无法从软件级别解决 - 唯一有效的解决方案是将USB与Nucleo的st-link断开连接然后再次连接。我试图重置或重新编程嵌入式设备,重新运行串行脚本,似乎没有任何工作。我试图实现现在看起来像这样的异常处理(但不起作用):

self.ser.reset_output_buffer()
try:
    self.ser.write(bytes(response))
except Exception as e:
    print(e)
    print("write timeout occured")
    while self.ser.inWaiting()>0:
        self.ser.read(1)
    self.ser.reset_output_buffer()
    self.ser.flushOutput()
    self.ser.flushInput()
    self.ser.close()
    self.ser.open()

串口配置是:

def createSerialConnection():
    if os.name == "nt":
        return serial.Serial('COM4', 38400, timeout=1, rtscts=0, 
        xonxoff=0,dsrdtr=0, write_timeout=1, parity=serial.PARITY_EVEN)

所以...两个设备(PC和嵌入式)每秒交换5条消息,包大小是恒定的(196字节),在最后一次错误之前我已经交换了500k包,没有任何问题(我有两个之前的数字越来越高)。通信协议非常简单,主(嵌入)发送数据并等待响应。如果响应没有在5秒内发回,它会重新发送最后一个包,就是这样。

我会杀死一些关于我应该在哪里寻找问题的信息。我怎么能避免呢?是pyserial问题(然后我应该使用什么,什么是足够稳定的)?也许stlink的(来自Nucleo 144)uart / usb坏了吗?

感谢您的帮助!

0 个答案:

没有答案