概要
前回の記事(以下のリンク先)では、 マイコンの初期化コード自動生成ツール「STM32CubeMX」1 を使用して、STM32Cube機能拡張パッケージ(X-CUBE)2で提供されているサンプルコードを、STM32 Nuceloボードをターゲットにしてご紹介しました。
今回は、STM32 NuceloボードなどのSTM32CubeMX内で選択可能な評価ボードではなく、ユーザーが作成したオリジナルボードをターゲットにした場合について解説します。
すべてのSTM32用サンプルコードが今回紹介する機能に対応しているわけではないので、ご注意ください。
本記事で使用したボードは、STが日本で独自に作成したデモ・ボードです。STM32G0B1マイコンとToF測距センサ「VL53L8CX」を搭載したシンプルな構成ですが、MEMSセンサ・ボードを取り付けることもできるボードとなっています。
主なFWプロジェクトの生成手順
- STM32CubeMXの新規プロジェクトを作成
- Software Packs Components Selectorを使用して必要なサンプルコードを構築
2.1 SWパッケージ(例:X-CUBE-TOF1)を選択
2.2 SWパッケージの中のアプリケーション例を選択
2.3 アプリケーション例に必要なSWコンポーネントを選択 - SWコンポーネントの動作設定と必要なハードウェア・ピンを割り当て
- FWプロジェクトの生成
上記のFWプロジェクトの生成の他に、生成後のビルドと実行内容に関しても紹介します。また、前回の記事と重複する手順内容に関しては、一部省いているので、前回記事も併せてご参照ください。
前回記事: https://qiita.com/sttsuyuki/items/365e123ed8e926f57958
今回使用したソフトウェア・バージョンとボード:
ソフトウェア :
・STM32CubeMX : 6.12.0
・STM32CubeIDE: 1.16.0
・X-CUBE-TOF1 : 3.4.1
ボード :
・ST-Japanオリジナル・ボード
詳細
1. STM32CubeMXの新規プロジェクトの作成
(1) STM32CubewMXを起動し、[File]-[New Project] メニューを選択
(2) [MCU/MPU Selector] タブの画面にて、使用するボードに搭載されているSTM32マイコン:STM32G0B1KCT6の新規プロジェクトを作成
下図のように Commercial Part Number ①にSTM32マイコンの製品名の一部などを入れると、製品の候補が表示されるので、その中から STM32G0B1KCT6を選択②して、[Start Project] ボタン③をクリックします。
2. Software Packs Components Selectorを使用して必要なサンプルコードを構築
2.1. 使用したいSWパッケージを選択
(1) Software Packs Components Selectorのウィンドウを開く
(2) STM32CubeMX上で使用可能なSWパッケージのリストからX-CUBE-TOF1を選択
2.2. 使用したいアプリケーション例を選択
今回はオリジナルのボードを使用するため、表示されるリストの中に、このボード用のアプリケーション例はありません。(例えば、拡張ボードX-NUCLEO-53L8A1用のアプリケーション例は、53L8A1で始まるアプリケーション例の名前となります。)
そのため、デバイス(IC)名:VL53L8CXが、名前の先頭についているアプリケーション例 を選択します。今回は、VL53L8CX_SimpleRanging3を選択しました。
2.3. アプリケーション例に必要なSWコンポーネントを選択
(1) Applicationが黄色くハイライトされている際、Component dependencies内に [Resolve] ボタンが表示されています。これをクリックすることで必要なSoftware Componentsが自動的に選択され、ここでの設定が完了します。
(2) [OK] ボタンをクリックし、この設定画面を閉じる。
3. SWコンポーネントの動作設定と必要な周辺機能およびI/Oの割り当て
Pinout & Configurationのタブ画面に戻り、左端の[Categories] ⇒ [Middleware and Software Packs] ⇒ [X-CUBE-TOF1] をクリックし、X-CUBE-TOF1のMode and Configurationの設定画面を開きます。
3.1. Modeの設定
3.2. Configurationの設定
3.2.1. [Parameter Settings]タブ :
今回はRangingモードをInterruptに設定して進めていきます。この後のSTM32CubeMXの設定では、外部割り込みを有効にする必要があります。<設定後の内容>を参照してください。
3.2.2. [User Constants]タブ:
デフォルトのままにしておきます。
3.2.3. [Platform Settings]タブ :
このタブでは、サンプルコードで使用する周辺機能やI/Oを設定します。
設定方法は、前回同様にFound Solutionsのプルダウン・メニューから選択するためには、まず、周辺機能やI/Oの設定から行う必要があります。
実際に使用するボードの回路図などを基に設定していきます。ここでは、上のブロック図の情報から設定します。
(設定例)
TOF_INT_PIN の場合を示します。TOF_INT_PINに最終的に接続されるVL53L8CXの端子は、INT という端子です。VL53L8CXの端子の詳細は、データシート 4 参照ください。INT端子は、レベルシフタを介してSTM32マイコンのPA7 に接続されています。
①PA7端子を左クリックしてGPIO_EXTI7に設定
ここでは、わかりやすくするために端子のラベル名をINTと変更しておきましょう。
②端子で右クリックしてEnter User Label を選択
③ラベル名(INT)を入力
④ラベル名がGPIO_EXTI7 からINT に変更されたことを確認
これで下図のようにTOF_INT_PINの選択肢にPA7[INT] が追加されます。
他の設定も同様に行っていきます。
実際に設定した周辺機能など設定画面を、参考までに以下<設定後の内容>に記載しました。
<設定後の内容>[ここをクリックすると下に展開して表示されます]
[System Core]:GPIOとNVIC
今回は、RangingモードをInterruptに設定したので、PA7の外部割込みとUSART2の割込みを有効にする必要があります。
[Connectivity] : USARTとI2C
[Clock Configuration]
上記の設定後、Found Solutions のプルダウン・メニュー内に設定した内容が反映されるので、それぞれ選択していきます。最終的には以下の設定になります。
ここで、前回のSTM32 Nuceloボードをターゲットとした場合との主相違点を以下にまとめました。
- STM32 CubeMXの新規プロジェクトの作成では、ボードではなくデバイス(IC)を選択して作成
- SoftwarePacks(X-CUBE-TOF1)のアプリケーション例の選択では、 ボード名ではなくデバイス(IC)名の一部が付いたアプリケーションを選択
- I/Oの割り当て(Platform Settings)において、オリジナル・ボードにはない端子設定があった場合、設定せずにそのままプロジェクトを生成し、後でソースコードを直接修正するなどの対応が必要
以上がソフトウェア・パック(X-CUBE-TOF1)に関する設定です。
4. FWプロジェクトの生成
次に、FWプロジェクトを自動生成するための設定を行います。ProjectManager のタブからプロジェクト名を入力、使用するIDEを選択してGENERATE CODE ボタンをクリックすると、FWプロジェクトが生成されます。下図は、実際にSTM32CubeIDEを使用した設定例です。
5. FWプロジェクトのビルドと実行
5.1 FWプロジェクトのビルド
まず、STM32CubeMXで生成したFWプロジェクト・ファイルをSTM32CubeIDEで開きます。今回は特にFWの内容を変更することなく、そのまま使うので、ツールバーにある下図のBuildのアイコンをクリックするか、
ファイルメニューから [Project]>[Build Project] を選択してビルドを行います。
ビルドが正常に完了したかどうかは、Consoleウィンドウから確認できます。正常に完了すれば以下のように表示されます。
5.2 デバッガの接続
ビルドがエラーなく正常に終了すれば、ボードへの書き込みが可能です。
(1) 今回は、デバッガ・ツールとしてSTLINK-V3SET 5 を使用します。STLINKを初めて使用される際はSTLINKのUSBドライバをインストールする必要があるので、以下リンク先よりダウンロードして事前にインストールを行ってください。
(2) ボード、STLINK-V3SET、パソコン(PC)を下図のように接続します。
センサ・ボードでは、デバッガI/F( J2 )はSWDとなっていますので、STLINK-V3SETの CN6 と接続します。
また、今回のサンプルコードではPCとVirtualCOM接続して動作を確認するため、UART-USB変換(VCOM接続)が必要となります。STLINK-V3SETには、デバッガ機能以外にUART-USB変換(VCOM)などの機能もある ため、それを利用します。STLINK-V3SETの CN3 とセンサ・ボードとの接続はそのための結線です。
注意:STLINK-V3SETの基板上のCN3に、「Rx」と「Tx」のシルクの記載がありますが、これはSTLINK-V3SET側のRx/Tx端子を意味しているのではなく、上表の通り、接続先(ターゲット・ボード側)のRx/Tx端子をここに接続することを意味します。
5.3 ボードへの書き込みと実行
(1) ここでは、STM32CubeIDE のDebugモード上で実行していきます。Debugのアイコンをクリックするか、ファイルメニューから [Run]>[Debug] を選択します。すると、Console ウィンドウにその実行ログが表示されていき、最後に 「Download verified successfully」 と表示されれば、ボードへの書き込みが完了です。
この時、デバッグ用画面に切り替えるかの確認画面(Confirm Perspective Switch)のウィンドウが表示されますので、[Switch] ボタンをクリックしてデバッグ用画面に切り替えます。
(2) DebugモードでRUNする前に、動作確認用にTeraTermを起動しておきます。 TerminalとSerial Portの設定は以下の通りです。
COM PortはSTLink Virtual COM PortのCOMポートを選択します。WindowsのDevice Managerでは以下のように表示されています。
(3) Resumeのアイコンをクリックするか、ファイルメニューから[Run]>[Resume]を選択します。しばらくした後、TeraTermに以下のような測距データが表示される画面になればOKです。
TeraTermの画面上にも説明が表示されていますが、以下のキーがコマンドなっています。
"r":解像度の切り替え : [4x4] or [8x8]
"s" : 表示データの切り替え:
[測距データ(mm)] or
[測距データ(mm)、Status、Signal(Kcps/SPAD)、Ambient(Kcps/SPAD)]
"c" : 画面を一旦クリアした後、結果を再表示
-
STM32CubeMXとは?
STが提供する開発環境(STM32 ODE)の中の一つで、STM32マイコン用の初期化コード自動生成ツール ↩ -
STM32Cube拡張パッケージ(X-CUBE)とは?
STが提供する開発環境(STM32 ODE)の中の一つで、STM32 X-Nucleo機能拡張ボードに使用できる無償の拡張ソフトウェア ↩ -
SimpleRangingとは?
ToF測距センサのデータをVCOM経由で出力し、TeraTermなどのターミナルソフトで下図のように確認できるサンプル・コード ↩ -
VL53L8CXのウェブサイト
https://www.st.com/ja/imaging-and-photonics-solutions/vl53l8cx.html#overview ↩ -
STLINK-V3SETのウェブサイト
https://www.st.com/ja/development-tools/stlink-v3set.html ↩