2013-10-21 40 views
1

我在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?

+0

这可能是因为你没有明确地关闭你的Python脚本末尾的串口。 'sercom.close()'。如果你没有关闭,它仍然可能看起来像端口很忙。 – jramirez

回答

0

串口实际上很好。正如我所提到的,pySerial调用改变了端口参数。所述PARAM 分钟= 0意味着猫的/ dev/ttyACM0立即返回,重新配置到分钟= 1的stty制成猫阻断并如前输出的数据。

相关问题