3

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

4

1 回答 1

1

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

于 2013-11-05T21:17:39.240 回答