暇人の技術備忘録

ハサミの技術備忘録

趣味でやっている電子工作の備忘録です。

【STM32備忘録】仮想COMポートとしてUSB接続する、USBから直接書き込む

f:id:sbasami:20210417145021p:plain

はじめに

前回はシリアル通信について書きました。

sbasami-tech.hatenablog.com

今回は仮想COMポートとしてSTM32をUSB接続する方法とUSBから直接書き込む方法について書きます。

CubeMXの設定

USBの設定

  1. 「Connectivity」→「USB_OTG_FS」をクリック。Modeを「Devie_Only」に設定。設定するとチップ・ビューでUSBに対応したピンが勝手に有効になる。
    f:id:sbasami:20210422194307p:plain

  2. 「Middleware」→「USB_DEVICE」をクリック。Class For FS IPを「Communication Device Class」に設定。
    f:id:sbasami:20210422194333p:plain

  3. ここまで設定したら一度Clock Configurationを見てみる。以下のような画面になったら何か設定が競合していることになる。「Yes」をクリックすると自動で設定を変更して問題を解決してくれる。
    f:id:sbasami:20210422194346p:plain

  4. どうやらUSBの設定を行うと赤枠の部分は48MHzでないといけないらしい。
    f:id:sbasami:20210422194358p:plain

  5. ここまで設定したらGenerate Codeして、main.cにMX_USB_DEVICE_Init()ができていれば成功。
    f:id:sbasami:20210422194413p:plain

コールバック処理の実装

CDC_Receive_FSで受信、CDC_Transmit_FSで送信ができる。
f:id:sbasami:20210422194431p:plain f:id:sbasami:20210422194440p:plain

コールバックするだけなら、CDC_Receive_FSの中にCDC_Transmit_FS処理を入れるだけでできるので簡単。CDC_Receive_FSの引数"Buf"に受信データ、"Len"に受信データの長さが渡されるので、それをそのままCDC_Transmit_FSに渡して送信している。
f:id:sbasami:20210422194556p:plain

PCとNUCLEO-F411REの接続

使用部品

akizukidenshi.com

f:id:sbasami:20210422195145p:plain
"https://os.mbed.com/platforms/ST-Nucleo-F411RE/"より引用
f:id:sbasami:20210422195217p:plain
"https://os.mbed.com/platforms/ST-Nucleo-F411RE/"より引用
f:id:sbasami:20210422195237p:plain
"https://os.mbed.com/platforms/ST-Nucleo-F411RE/"より引用
f:id:sbasami:20210422195250p:plain
"https://os.mbed.com/platforms/ST-Nucleo-F411RE/"より引用

akizukidenshi.com

f:id:sbasami:20210422195405p:plain
"https://akizukidenshi.com/download/ds/akizuki/AE-USB-MICRO-B-D.pdf"より引用

配線

USBコネクタDIP化キットの「D+」をNUCLEO-F411REの「USB_DP」、「D-」を「USB_DM」のピンと繋ぐ。GNDも忘れずに。VBUSはUSBから5Vが給電されるので、これで駆動したい場合はNUCLEO-F411REの5Vに接続する。
f:id:sbasami:20210422195729p:plain

動作結果

打った文字が返ってくれば成功です。
f:id:sbasami:20210422195555p:plain

USB書き込み

今まではデバッガの方から書き込んでいましたが、USBからも書き込むことができるのでやってみます。

STM32CubeProgのインストール

まず、下記からSTM32CubeProgをインストールします。

www.st.com

書き込み手順

  1. STM32CubeProgを起動すると以下のような画面になるので右上のタブから「USB」を選択。
    f:id:sbasami:20210422195635p:plain

  2. NUCLEO-F411REの「BOOT0」ピンと「VDD」をショートさせた状態でリセットボタンを押してBOOTモードで起動します。
    f:id:sbasami:20210422195704p:plain

  3. NUCLEO-F411REがBOOTモードの状態で更新ボタンを押す。認識すればPortにUSB1と表示される。この状態で「Connect」をクリック。
    f:id:sbasami:20210422200249p:plain

  4. 接続されるとメモリ情報が読み出される。
    f:id:sbasami:20210422200300p:plain

  5. 左の三本線をクリックして出てくる、「Erasing & programing」をクリック。
    f:id:sbasami:20210422200312p:plain

  6. 下記のような画面になるので「Browse」をクリックして書き込むファイルを選択する。「Run after programing」にチェックを入れると書き込み後にすぐプログラムが実行される。
    f:id:sbasami:20210422200337p:plain

  7. 書き込みファイルはビルドした後、プロジェクト内の「Debug」フォルダにできる。.bin、.elfどっちを選んでも書き込めた。
    f:id:sbasami:20210422200401p:plain

  8. ファイルを選択したら「Start programming」で書き込める。
    f:id:sbasami:20210422200423p:plain

  9. 書き込み後に幾つかポップアップウィンドウが出るが「OK」を押す。以下のような画面になったら書き込めているはず。
    f:id:sbasami:20210422200434p:plain

おわりに

今回は仮想COMポートとしてSTM32をUSB接続する、USBから直接書き込む方法について書きました。

これでUSBを繋ぐだけでデバッグと書き込みができる。こんな簡単に実現できるとは思ってなかった、凄い。

次は何書くか...。

覚えておくと便利な操作について書いた↓↓↓

sbasami-tech.hatenablog.com