【STM32備忘録】仮想COMポートとしてUSB接続する、USBから直接書き込む
はじめに
前回はシリアル通信について書きました。
今回は仮想COMポートとしてSTM32をUSB接続する方法とUSBから直接書き込む方法について書きます。
CubeMXの設定
USBの設定
「Connectivity」→「USB_OTG_FS」をクリック。Modeを「Devie_Only」に設定。設定するとチップ・ビューでUSBに対応したピンが勝手に有効になる。
「Middleware」→「USB_DEVICE」をクリック。Class For FS IPを「Communication Device Class」に設定。
ここまで設定したら一度Clock Configurationを見てみる。以下のような画面になったら何か設定が競合していることになる。「Yes」をクリックすると自動で設定を変更して問題を解決してくれる。
どうやらUSBの設定を行うと赤枠の部分は48MHzでないといけないらしい。
ここまで設定したらGenerate Codeして、main.cにMX_USB_DEVICE_Init()ができていれば成功。
コールバック処理の実装
CDC_Receive_FSで受信、CDC_Transmit_FSで送信ができる。
コールバックするだけなら、CDC_Receive_FSの中にCDC_Transmit_FS処理を入れるだけでできるので簡単。CDC_Receive_FSの引数"Buf"に受信データ、"Len"に受信データの長さが渡されるので、それをそのままCDC_Transmit_FSに渡して送信している。
PCとNUCLEO-F411REの接続
使用部品
配線
USBコネクタDIP化キットの「D+」をNUCLEO-F411REの「USB_DP」、「D-」を「USB_DM」のピンと繋ぐ。GNDも忘れずに。VBUSはUSBから5Vが給電されるので、これで駆動したい場合はNUCLEO-F411REの5Vに接続する。
動作結果
打った文字が返ってくれば成功です。
USB書き込み
今まではデバッガの方から書き込んでいましたが、USBからも書き込むことができるのでやってみます。
STM32CubeProgのインストール
まず、下記からSTM32CubeProgをインストールします。
書き込み手順
STM32CubeProgを起動すると以下のような画面になるので右上のタブから「USB」を選択。
NUCLEO-F411REの「BOOT0」ピンと「VDD」をショートさせた状態でリセットボタンを押してBOOTモードで起動します。
NUCLEO-F411REがBOOTモードの状態で更新ボタンを押す。認識すればPortにUSB1と表示される。この状態で「Connect」をクリック。
接続されるとメモリ情報が読み出される。
左の三本線をクリックして出てくる、「Erasing & programing」をクリック。
下記のような画面になるので「Browse」をクリックして書き込むファイルを選択する。「Run after programing」にチェックを入れると書き込み後にすぐプログラムが実行される。
書き込みファイルはビルドした後、プロジェクト内の「Debug」フォルダにできる。.bin、.elfどっちを選んでも書き込めた。
ファイルを選択したら「Start programming」で書き込める。
書き込み後に幾つかポップアップウィンドウが出るが「OK」を押す。以下のような画面になったら書き込めているはず。
おわりに
今回は仮想COMポートとしてSTM32をUSB接続する、USBから直接書き込む方法について書きました。
これでUSBを繋ぐだけでデバッグと書き込みができる。こんな簡単に実現できるとは思ってなかった、凄い。
次は何書くか...。
覚えておくと便利な操作について書いた↓↓↓