Serial port 使用pyserial/Linux时虚拟COM失败,但无法正常工作

Serial port 使用pyserial/Linux时虚拟COM失败,但无法正常工作,serial-port,pyserial,stm32,stm32f4discovery,Serial Port,Pyserial,Stm32,Stm32f4discovery,我正在使用STM32F4发现板上的虚拟COM端口(VCP)示例代码来实现USB VCP。此代码最初由ST编写,并被许多其他人在其项目中使用 通过VCP与STM32F4的通信在Windows上工作正常。在Linux(Ubuntu 12.04 x86)中,如果我使用 echo "aasfg" > /dev/ttyACM0 然后,MCU获取数据,一切正常。我可以接收连续的数据流 cat /dev/ttyACM0 但是,如果我使用使用pySerial的简单Python脚本发送数据 import

我正在使用STM32F4发现板上的虚拟COM端口(VCP)示例代码来实现USB VCP。此代码最初由ST编写,并被许多其他人在其项目中使用

通过VCP与STM32F4的通信在Windows上工作正常。在Linux(Ubuntu 12.04 x86)中,如果我使用

echo "aasfg" > /dev/ttyACM0
然后,MCU获取数据,一切正常。我可以接收连续的数据流

cat /dev/ttyACM0
但是,如果我使用使用pySerial的简单Python脚本发送数据

import serial
sercom = serial.Serial('/dev/ttyACM0')
sercom.write('asdf')
然后,我停止使用cat命令接收数据,后续cat命令也不会接收任何数据。MCU不断地执行一些USB中断例程,从不返回执行实际的应用程序代码。重新插入设备后,我可以再次从VCP接收数据

STM32 USB VCP代码可能并不完美,但它被许多其他人在许多项目中使用,因此应该足够好。我无法调试该代码。我怀疑使用pySerial发送数据会对VCP驱动程序(STM32或PC上)不喜欢的端口造成影响,我希望能够找到它,并希望仍然使用pySerial

我执行

stty --file=/dev/ttyACM0 -a

在pyserial中断通信之前和之后。使用pyserial中断VCP后,设置-clocal变为clocal,设置min=1变为min=0。这些与VCP通信相关吗?它们能否提示如何使用pySerial修复VCP?

串行端口实际上很好。正如我提到的,pySerial调用更改了端口参数。参数min=0意味着cat/dev/ttyACM0立即返回,使用stty使cat阻塞并像以前一样输出数据,将其重新配置为min=1。

这可能是因为在python脚本末尾没有显式关闭串行端口<代码>sercom.close()。如果不关闭,端口可能仍然繁忙。