STM32F446をUSART3経由とUSB経由で書込みを行ってみます。
書込みソフトウェアは、STマイクロエレクトロニクス社から専用ソフトウェアが提供されています。
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経由での接続ができませんでした。
インストールウィザードが立ち上がるので、進めていきます。
説明文を読んで、次へ。
ライセンス等で問題なければ次へ。
インストールする保存場所を確認して次へ。
ディレクトリ作成するのでOK。
インストールするコンポーネントを選びます。STM32 Trusted Package Creatorというのは、暗号化してファームウェアを書き込むことができるようなものらしいです。
使わないので、デフォルトで次へ行きます。
インストールが完了したら次へ。
ショートカット作成もデフォルトでいいので、次へ。
完了です。
STM32CubeProgrammerを使う
デスクトップやアプリケーション一覧にアイコンが追加されているので、起動します。
起動すると、このような画面が出てきます。
左上のところで、ST-LINK、UART、USB、OTAと書込み方法を選べるようになっています。
OTAという用語を知らなかったので調べてみたら、Over-the-airの頭文字のようで、どうやら無線経由で書込みができるようです。STM32WBという無線機能がついたシリーズに対応したものなのでしょうか?
まずは、正常に機能するかどうかを確認したいので、自作汎用基板の電源をONにして、ST-LINKのまま、となりのConnectボタンを押して接続してみます。
正常に通信できると、下記のような画面になります。
デバイス内の0x08000000〜のメモリ情報を読み込んでくることができるようです。
接続したSTM32マイコンの種類やその他もろもろの情報が表示されています。
ST-LINK経由での書込み
Connectボタンを押します。
デバイスに書き込む画面に切り替えます。
左にある、Erasing & programmingのアイコンをクリックします。
STM32CubeIDEで作成したファームウェアであるLED_Blink.binを読み込んできます。
Browseボタンをクリックします。
デフォルトだとSTM32CubeIDE/workspace_1.3.0/LED_Blink/Debugにありました。
書き込んだ後、プログラムをすぐに実行したいので、Run after programmigに予めチェックを入れておきます。
Start Programmingのボタンを押すと作成したプログラムをデバイスに書き込めます。
実行後、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を切り替えます。ボーレート等はそのままで、変更しません。
自作STM32F446汎用基板の、BOOTボタンとRSTボタンを押して、RSTボタンを先に離した後、BOOTボタンを離します。これでマイコンはUART経由書込みモードに切り替わります。
Connectボタンを押します。そうすると、以下のように読み込みしてくれます。
※STM32CubeProgrammerのバージョン違いでUART経由での書込みができません。ver.2.2.0で確認できました。
ST-LINKの時と同じように、Browseボタンをクリックして、書込みができます。
Run after programmingにチェックを入れたままだと、書込み後プログラムが起動するので、接続が切れます。
USB経由での書込み
※OTG回路経由では書き込みできてませんでした(2021年3月更新)
USBを選択すると、ST-LINK経由で書き込みされるようです。
汎用機版とUSB OTG基板を接続し、USB OTG基板のUSB microAコネクタに、microUSBケーブルを指します。
ブートモード切り替えは、UARTのときと同じです。
USBに切り替えます。
Connectボタンを押すと、通信して情報を読み込んできます。
ST-LINKやUSBの時と同じように、Browseボタンをクリックして、書込みができます。
書込みはUARTのときと違い、一瞬で終わります。
Run after programmingにチェックを入れたままだと、書込み後プログラムが起動するので、接続が切れます。
以上で、各種の書込みの確認ができました。
(USB OTG回路は初めてだったのでホッとした。)
→※OTG回路経由では書き込みできてませんでした(2021年3月更新)
次回は、UART通信について書いてみます。