PySerial:在我断开STLink USB cab连接之前无法写入

2024-04-26 21:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一些软件,包括PC机和嵌入式设备之间通过UART进行通信。我正在使用STLink的USB/串行适配器。
大多数时候通信都很正常,但过了一段时间(可能是几小时/分钟甚至几天),我就遇到了无法从软件层面解决的写入超时问题——唯一可行的解决方案是将USB从Nucleao的st链路断开,然后再连接。我试图重置或重新编程嵌入式设备,重新运行串行脚本,但似乎没有任何工作。我尝试实现异常处理,现在看起来像这样(但不起作用):

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()

串行端口配置为:

^{pr2}$

所以。。。这两个设备(PC和嵌入式)每秒交换5条消息,包大小是恒定的(196字节),在上一个错误之前,我已经交换了500k个包,没有任何问题(我以前有过较高和较低的数字)。通信协议非常简单,主(嵌入式)发送数据并等待响应。若响应在5秒内并没有被发送回来,它将重新传输最后一个包,仅此而已。在

我想尽一切办法想知道我应该在哪里找到这个问题。我怎样才能避免呢?是pyserial问题吗(那么我应该使用什么,什么才足够稳定)?也许stlink(来自nuclear144)的uart/usb坏了?在

谢谢你的帮助!在


Tags: selfoutput软件buffer解决方案适配器serwrite