概要
この記事では、マイコンの初期化コード自動生成ツール「STM32CubeMX」1を使用して、STM32Cube機能拡張パッケージ(X-CUBE2)で提供されている サンプルコードを、ユーザのターゲット(STM32マイコン)に適応したファームウェアプロジェクトの形に生成する方法を解説します。
こんな事例で使えます:
1) 持っているSTM32 Nucleoボード用のサンプル・ファームウェア(FW)プロジェクトがないので、新たにFWプロジェクトを作りたいが、ソースコードを直接修正することなく簡単に試してみたい。
例) X-CUBE-TOF1の無償ソフトウェア(SW)パッケージ の中のサンプルコードを試したいが、その中にNUCLEO-G0B1RE用のFWプロジェクトがないので、新たにFWプロジェクトを作成しなおす必要がある。
2) STM32マイコンが搭載されたオリジナルのボードでサンプルコードのFWプロジェクトを作成したい。
すべてのSTM32用サンプルコードが今回紹介する機能に対応しているわけではありませんので、ご注意ください。
今回は、上記 1) のケースを紹介していきます。
ToF測距センサ拡張ボード「X-NUCLEO-53L8A1」 に対して、無償SWパッケージ「X-CUBE-TOF1」 が利用可能です。そのアプリケーション例にある 「53L8A1_SimpleRanging」3 というサンプルコードを例として、NUCLEO-G0B1REボード用のFWプロジェクト を作成するところまで行います。
主な手順:
STM32CubeMXを使った設定の大まかな流れは、以下の通りです。
1. STM32CubeMXの新規プロジェクトを作成
2. Software PacksのComponents Selectorを使用して必要なサンプルコードを構築
2.1 SWパッケージ(例:X-CUBE-TOF1)を選択
2.2 SWパッケージの中のアプリケーション例(例:53L8A1_SimpleRanging)を選択
2.3 アプリケーション例に必要なSWコンポーネント(例:ドライバ、ライブラリなど)を選択
3. SWコンポーネントの動作設定と必要なハードウェア・ピンを割り当て
4. FWプロジェクトを設定し、GENERATE CODEボタンをクリックしてFWプロジェクトを生成
今回使用したソフトウェアバージョンとボード:
ソフトウェア:
・STM32CubeMX :6.11.1
・X-CUBE-TOF1 : 3.4.1
ボード:
・X-NUCLEO-53L8A1
・NUCLEO-G0B1RE
詳細
手順を具体的に解説していきます。
1. STM32CubeMXの新規プロジェクトを作成
STM32CubeMXを起動し、[File]-[New Project] メニューから、NUCLEO-G0B1RBボードのプロジェクトを作成します。
2. Software Packs Components Selectorを使用して必要なサンプルコードを構築
[Software Packs] - [Select Components] をクリックすると、
Software Packs Components Selector のウィンドウが開きます。ここでは、生成したいFWプロジェクトの構築に必要なソフトウェアのコンポーネント、つまり、必要なドライバやライブラリなど、ハードやアプリケーションなどに依存するソフトウェアのパーツを選択していきます。
まずはPacksの中にある以下3つのアイコンをすべてクリックしてください。
すると、下図のように Packs 以外に3つの表示エリア( Filters , Components dependencies , Details and warning )が追加されます。
2.1. 使用したいSWパッケージを選択
Packs の表示エリア内を見ると、既にSTM32CubeMX上で使用可能なSWパッケージのリストが表示されています。これらはSTのウェブサイトからダウンロード可能ですが、STM32CubeMXの中で利用できるようになっています。今回は、X-CUBE-TOF1 を使いたいので、下図のようにFilters の検索機能を使用するか、
Packs 内のリストをスクロールしてX-CUBE-TOF1 を探します。
X-CUBE-TOF1の行の左端にある「 〉 」クリックすると、その下に新たに項目が表示されます。表示された項目中にも「 〉 」があるので、全てクリックして展開しておきましょう。
[ Install ] ボタン が表示されている場合 [ここをクリックすると下に展開して表示されます]
初めて使用するソフトウェア・パックは、インストールする必要があります。
[Install] ボタンを押すと、ダウンロードが開始され、その後インストールされます。無事インストールが完了すると [Install] ボタンは消えます。
*STM32CubeMX V6.9.0以降では、mySTへのログインが必要です。
[Install] ボタンをクリックすると、"Please login to download a software package."のダイアログが表示され、続けて [OK] ボタンをクリックすると、"myST" へのログイン画面が表示されます。
・既にアカウントをお持ちの場合: E-mail AddressとPasswordを入力し、[Login] をクリック
・アカウントを持っていない場合: [Create Account] ボタンをクリックして新規登録をしてください
2.2. 使用したいアプリケーション例を選択
まず、使用したいサンプルコードのアプリケーション例を選択しましょう。先ほど展開した一番上のDevice TOF1_Applicationsの項目から、53L8A1_SimpleRanging を選択します。
すると画面上に警告(黄色の三角)マークがいくつか表示され、その内容がDetails and warnings の中に英文で記載されています。これらの警告マークの内容に対して解決を手助けしてくれるのが、Packs表示エリアの下にある Component dependencies の内容です。Component dependencies では、必要なSWコンポーネントとの依存関係を具体的に示してくれます。
Component dependencies や Details and warnings の内容は、Packsの中の選択(黄色くハイライト)されている行によって変わります。 ここでは、Applicationの行が選択されていないと、Component dependencies やDetails and warnings に対応した内容が表示されないため、ご注意ください。
2.3. アプリケーション例に必要なSWコンポーネントを選択
Applicationがハイライトされている際、Component dependencies に表示される内容は以下のようになります。
Component dependencies 内に [Resolve] ボタンが表示されている場合、これをクリックすることで、ハイライトされた箇所のコンポーネントの依存関係を自動的に選択し解消してくれます。今回は [Resolve] ボタンが利用可能なので、こちらをクリックするだけで設定完了です。Resolveボタン以外にも、 [Show] ボタンと [Select] ボタンがあり、それぞれ以下のような機能を持ちます。
[Show] ボタン: その行に記載されてある項目を Pack 表示エリア内でハイライト
[Select] ボタン: Showでハイライトされた項目を実際に選択(設定)
上記の操作により、これまで黄色の警告マークがついていた Status の列が緑色の✔マークに変わります。これは、53L8A1_SimpleRangingに対して、必要なSWコンポーネントが全て選択されたことを示しています。
以上でこの画面の設定は完了です。右下の [OK] ボタンをクリックします。
この後は、SWパッケージ(X-CUBE-TOF1)の設定を行っていきます。
3. SWコンポーネントの動作設定と必要な周辺機能およびI/Oの割り当て
[Pinout & Configuration] のタブ画面に戻り、左端の [Categories]⇒ Middleware and Software Packs ⇒ X-CUBE-TOF1 をクリックし、X-CUBE-TOF1のMode and Configurationの設定画面を開きます。
3.1. Modeの設定
Board Extensions 53L8A1 と Device TOF1 Applications の2つに✔をいれます。これは、先ほどSoftware Components Selectorで選択したアプリケーションと拡張ボードの設定を行うために必要です。
3.2. Configurationの設定
3.2.1. [Parameter Settings]タブと[User Constants]タブ
3.2.2. Platform Settingsタブ
このタブでは、サンプルコードで使用する周辺機能やI/Oを設定します。
設定方法は、Found Solutions をプルダウンメニューから選択していきますが、その選択肢は、まず周辺機能やI/Oを設定しないと表示されません。そこで、周辺機能やI/Oの設定を行っていきます。
どのような周辺機能やI/Oが必要となるかは、IPs and Components の列に記載されています。
53L8A1_LPn_Cを例にすると、IPs or Components にはGPIO:Outputとあるので、GPIOのOutputポートをアサインする必要があります。
しかし、端子への割り当てについては、通常、拡張ボード(X-NUCLEO)のユーザマニュアルやNucleoボードの回路図などを参照しつつ設定していくことになります。
Nucleoボード上のArduinoコネクタ端子に対するSTM32マイコンのピンアサインが、ボードの種類によって異なる場合があるため注意してください。
ご参考までに、X-NUCLEO-53L8A1のボードといくつかのNucleoボードに関する必要な情報を、以下リンク先にまとめておきましたのでご活用ください。
ToF測距センサ機能拡張ボード(X-NUCLEO-53L8A1)のSTM32ピン・アサイン対応表 -Qiita
実際に設定した周辺機能などに関するSTM32CubeMXの画面を、以下の<設定後の内容>に記載しました。
<設定後の内容>[ここをクリックすると下に展開して表示されます]
• Pinout view• System Core: GPIO, NVIC, SYS
53L8A1_LPn_C と 53L8A1_PWR_EN_C のGPIO outputの出力レベルを High に設定しておく必要があるので、ご注意ください。
NVICの設定では、EXTIの割り込み(EXTI line 4 to 15 interrupts)を有効にしています。今回のX-CUBE-TOF1のParameter Settingsの設定では、特に外部割込みを必要とする内容は含まれていませんが、以下の理由により外部割込みを有効にしています。
STM32CubeMXから生成されるUserボタンに対するBSPコードには、STM32CubeMXのNVICの設定に関係なく、外部割込みを有効にするコードが含まれています。しかし、これは割り込みを有効にするのみで、その割り込みハンドラは含まれていません。そのため、VL53L8CXのINT端子からの外部割込みが入ると無限ループのハンドラに移行してしまいます。
上記の設定後、Found Solutions のプルダウン・メニュー内に設定した内容が反映されるので、それぞれ選択していきます。最終的には以下の設定になっていればOKです。
以上がソフトウェア・パック(X-CUBE-TOF1)に関する設定です。
4. FWプロジェクトの生成
この後は、FWプロジェクトを自動生成するための設定を行います。 [ProjectManager] のタブからプロジェクト名を入力し、使用するIDEを選択して [GENERATE CODE] ボタンをクリックすると、FWプロジェクトが生成されます。
以下は、STM32CubeIDEを使用した際のProjectManagerの設定例です。
-
STM32CubeMXとは?
STが提供する開発環境(STM32 ODE)の中の一つであり、STM32マイコン用の初期化コード自動生成ツールです。
https://www.st.com/ja/development-tools/stm32cubemx.html ↩ -
STM32Cube拡張パッケージとは?
STが提供する開発環境(STM32 ODE)の中の一つで、STM32 X-Nucleo機能拡張ボードに使用できる無償の拡張ソフトウェア
https://www.st.com/ja/embedded-software/stm32cube-expansion-packages.html ↩ -
SimpleRangingとは
ToF測距センサのデータをVCOM経由で出力し、TeraTermなどのターミナルソフトで下図のように確認できるサンプルコード
↩