STM32F4 Discovery Board で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 を修正する方法を示唆していますか?