マイクロマウス研修(のり) マウス自作研修

マイクロマウス研修(のり)[19]STM32F446UART&USB書込み

USB_OTG_microA マイクロマウス研修(のり)

記事一覧 のり マイクロマウス研修

STM32F446をUSART3経由とUSB経由で書込みを行ってみます。
書込みソフトウェアは、STマイクロエレクトロニクス社から専用ソフトウェアが提供されています。

STM32CubeProgrammer

UbuntuにSTM32CubeProgrammer

以下のように行っていきます(公式ドキュメント)。

Javaのインストール

USBポートを経由でSTM32デバイスに接続してプログラムを書き込む場合は、次のコマンドを入力してlibusb1.0パッケージをインストールします(ちなみに公式ドキュメントのコマンドはlibusb-1.0.0-devと書いてあり、誤字と思われます)。

$ sudo apt-get install libusb-1.0-0-dev

「ST-LINKまたはUSB DFUを使用してターゲットに接続するには、以下にあるルールファイルをコピーします。Driver/rules folder in /etc/udev/rules.d/ on Ubuntu (“sudo cp *.* /etc/udev/rules.d”). 」と書かれています。

$ cd ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/rules
$ sudo cp *.* /etc/udev/rules.d

次は、OpenJDK 8をインストールします。

$ sudo apt install openjdk-8-jre-headless

OpenJDK 8をデフォルトのJavaランタイムエンジンとして設定します。

$ sudo update-alternatives --config java

OpenJFXをインストールします。

$ sudo apt purge openjfx
$ sudo apt install openjfx=8u161-b12-1ubuntu2 libopenjfx-jni=8u161-b12-1ubuntu2 libopenjfx-java=8u161-b12-1ubuntu2
$ sudo apt-mark hold openjfx libopenjfx-jni libopenjfx-java

インストールできているかは、以下のコマンドで確認して下さい。

$ java -version

STM32CubeProgrammerのインストール

STM32CubeProgrammerのページからダウンロード。

データを展開した後、SetupSTM32CubeProgrammer-2_4_0.linuxをダブルクリックします。
※以下、画像は2.4.0になってますが、SetupSTM32CubeProgrammer-2.2.0.linuxにしてください。UbuntuでSTM32CubeProgrammer ver.2.3.0、2.4.0では、UART経由での接続ができませんでした。

インストールウィザードが立ち上がるので、進めていきます。
STM32CubeProgrammerのインストール

説明文を読んで、次へ。
STM32CubeProgrammerのインストール

ライセンス等で問題なければ次へ。
STM32CubeProgrammerのインストール

インストールする保存場所を確認して次へ。
STM32CubeProgrammerのインストール

ディレクトリ作成するのでOK。
STM32CubeProgrammerのインストール

インストールするコンポーネントを選びます。STM32 Trusted Package Creatorというのは、暗号化してファームウェアを書き込むことができるようなものらしいです。
使わないので、デフォルトで次へ行きます。
STM32CubeProgrammerのインストール

インストールが完了したら次へ。
STM32CubeProgrammerのインストール

ショートカット作成もデフォルトでいいので、次へ。
STM32CubeProgrammerのインストール

完了です。
STM32CubeProgrammerのインストール

STM32CubeProgrammerを使う

デスクトップやアプリケーション一覧にアイコンが追加されているので、起動します。
STM32CubeProgrammerのアイコン

起動すると、このような画面が出てきます。
STM32CubeProgrammerを起動した画面

左上のところで、ST-LINK、UART、USB、OTAと書込み方法を選べるようになっています。
ST-LINK、UART、USB、OTA

OTAという用語を知らなかったので調べてみたら、Over-the-airの頭文字のようで、どうやら無線経由で書込みができるようです。STM32WBという無線機能がついたシリーズに対応したものなのでしょうか?

まずは、正常に機能するかどうかを確認したいので、自作汎用基板の電源をONにして、ST-LINKのまま、となりのConnectボタンを押して接続してみます。
正常に通信できると、下記のような画面になります。
デバイス内の0x08000000〜のメモリ情報を読み込んでくることができるようです。
0x08000000〜のメモリ情報の読み込み

接続したSTM32マイコンの種類やその他もろもろの情報が表示されています。

ST-LINK経由での書込み

Connectボタンを押します。

デバイスに書き込む画面に切り替えます。
左にある、Erasing & programmingのアイコンをクリックします。
Erasing & programmingのアイコンをクリック

STM32CubeIDEで作成したファームウェアであるLED_Blink.binを読み込んできます。
Browseボタンをクリックします。
Browseボタンをクリック

デフォルトだとSTM32CubeIDE/workspace_1.3.0/LED_Blink/Debugにありました。
STM32CubeIDE/workspace_1.3.0/LED_Blink/Debug

書き込んだ後、プログラムをすぐに実行したいので、Run after programmigに予めチェックを入れておきます。
Start Programmingのボタンを押すと作成したプログラムをデバイスに書き込めます。
実行後、LEDがピカピカ点滅しました。
LEDが点滅

*STM32CubeProgrammerでST-LINKをConnect状態にしておくと、IDEで接続できなくなります。

UART経由での書込み

STM32CubePrgの左上のST-LINKをUARTに切り替えます。
秋月電子通商のAE-FT234Xを使用してUSB-UART変換しているのですが、Portを調べるには以下のコマンドで調べます。

$ ls /dev/tty*

AE-FT234Xを抜き差ししてコマンド実行すると、/dev/ttyUSB0が表示/非表示になります。

書込み権限を追加するので、以下のコマンドを実行します。

$ sudo chmod 666 /dev/ttyUSB0

Portを切り替えます。ボーレート等はそのままで、変更しません。
Portを切り替える

自作STM32F446汎用基板の、BOOTボタンとRSTボタンを押して、RSTボタンを先に離した後、BOOTボタンを離します。これでマイコンはUART経由書込みモードに切り替わります。
自作STM32F446汎用基板の、BOOTボタンとRSTボタンを押して、RSTボタンを先に離した後、BOOTボタンを離す

Connectボタンを押します。そうすると、以下のように読み込みしてくれます。
※STM32CubeProgrammerのバージョン違いでUART経由での書込みができません。ver.2.2.0で確認できました。
Connectボタンを押すと読み込まれる

ST-LINKの時と同じように、Browseボタンをクリックして、書込みができます。
Run after programmingにチェックを入れたままだと、書込み後プログラムが起動するので、接続が切れます。

USB経由での書込み

汎用機版とUSB OTG基板を接続し、USB OTG基板のUSB microAコネクタに、microUSBケーブルを指します。
ブートモード切り替えは、UARTのときと同じです。
汎用機版とUSB OTG基板を接続し、USB OTG基板のUSB microAコネクタに、microUSBケーブルを指す

USBに切り替えます。
USBに切り替える

Connectボタンを押すと、通信して情報を読み込んできます。
Connectボタンを押すと、通信して情報が読み込まれる

ST-LINKやUSBの時と同じように、Browseボタンをクリックして、書込みができます。
書込みはUARTのときと違い、一瞬で終わります。
Run after programmingにチェックを入れたままだと、書込み後プログラムが起動するので、接続が切れます。
Run after programmingにチェックを入れたままだと、書込み後プログラムが起動するので、接続が切れる

以上で、各種の書込みの確認ができました。
(USB OTG回路は初めてだったのでホッとした。)

次回は、UART通信について書いてみます。

タイトルとURLをコピーしました