我在STM32F4 Discovery Board上使用http://blog.memsme.com/stm32f4-virtual-com-port-2/的虚拟COM端口(VCP)示例代码来使用USB VCP。此代码最初由ST和许多其他人在他们的项目中使用虚拟COM与pyserial/Linux失败,但以其他方式工作
通过VCP与STM32F4的通信在Windows中正常工作。在Linux操作系统(Ubuntu的12.04 X86),如果我将数据发送到端口
echo "aasfg" > /dev/ttyACM0
届时,MCU获取的数据,一切工作正常。我可以
cat /dev/ttyACM0
接收连续的数据流。然而,如果我与使用pySerial
import serial
sercom = serial.Serial('/dev/ttyACM0')
sercom.write('asdf')
然后我停止与猫命令接收数据,并按照简单的Python脚本发送数据cat命令也不会收到任何数据。 MCU不断执行一些USB中断例程,永远不会执行实际的应用程序代码。重新插入设备后,我可以再次从VCP接收数据。
STM32 USB VCP代码可能并不完美,但它在许多项目中被许多其他人使用,所以它应该足够好。我无法调试该代码。我怀疑使用pySerial发送数据与VCP驱动程序(在STM32或PC上)不喜欢的端口做了一些事情,我希望跟踪它并希望仍然使用pySerial。
我执行
stty --file=/dev/ttyACM0 -a
之前和之后pyserial打破了沟通。打破VCP与pyserial,设定后-clocal成为CLOCAL和设置分钟= 1成为分钟= 0。这些与VCP通信有关吗?他们能否提示如何使用pySerial修复VCP?
这可能是因为你没有明确地关闭你的Python脚本末尾的串口。 'sercom.close()'。如果你没有关闭,它仍然可能看起来像端口很忙。 – jramirez