USB CDC

今回のボードはデバッガがないので、printfデバッグになる予感がします。そこでUSB CDCでPCにメッセージを表示できるようにしてみます。

まずは、先人の知恵を調べてみると、次のようなところが見つかりました。 これらを参考に進めてみます。

blueeyes.sakura.ne.jp

gsmcustomeffects.hatenablog.com

CubeMXの設定

まずはConnectivityからUSB_OTG_FSを選んでDevice Onlyでenableにします。 f:id:yamamoto-works:20190505223905p:plain

クロックとして12MHzの水晶がついているので、System CoreにあるRCCで有効にしておきます。画像では勢い余って低速クロックも有効にしていますが、こちらは関係ありません。 f:id:yamamoto-works:20190505224205p:plain

さらにMiddlewareからUSB_DEVICEを選んで、Class For FS IPとしてCommunication Device Classを選んでおきます。 f:id:yamamoto-works:20190505224555p:plain

次にクロックツリーの設定を行います。こんな感じでSYSCLKが48MHzになるように設定しています。なぜ48MHzなのかは、おいおい調べることにします。 f:id:yamamoto-works:20190505225327p:plain

これでコードを生成して、あとはメッセージ表示を行うだけです。調べてみると表示する文字列とバッファ長を引数にCDC_Transmit_FSを呼び出せば良いことがわかりました。

で、これでビルドしてマイコンに書き込んでUSB接続してみると、PC側では新しいデバイスが見つかったというようなメッセージが出て、正常に準備が完了します。 しかしデバイスマネージャで見ると、黄色のマークがついていて、何か問題が起こっていることがわかります。 メッセージでは仮想COMポートができたと表示されるのですが、 そういう状態なのでTeraTermからは参照できません。 ちなみにWindows10を使っています。

以前のWindowsではSTSW-STM32102として公開されているデバイスドライバが必要なのですが、Windows10では 「the STSW-STM32102 driver is no more adequate and the usage of the native inbox driver is recommended」 と書いてあります。しかも検索すると、STSW-STM32102をインストールするとトラブルが起こっている模様。

バイスマネージャでドライバの更新を行っても改善せず、 native inbox driverについて検索してもよくわからず 困っていたのですが、 USBコネクタを何度か抜き差ししているうちに いつのまにか問題が解決しました。 TeraTermをつないでみると、正常に動作していてマイコンから送信したメッセージが表示されるようになりました。

こういう感じで結果オーライなのですが、人に説明するのが難しいなあと思ったり・・・