我正在开发一些软件,它涉及通过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坏了吗?
感谢您的帮助!