我在 STM32F4 探索板上使用来自http://blog.memsme.com/stm32f4-virtual-com-port-2/的虚拟 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?