STM32CubeMX使い方刷新STM32Fx/G0xテンプレートV2発売5/15、5/30

サードパーティ仏)AC6社の統合開発環境SW4STM32で開発したSTM32FxテンプレートとSTM32G0xテンプレートを、新しいSTマイクロエレクトロニクス純正STM32CubeIDE対応のVersion2:V2へ更新し販売開始します(STM32Fxテンプレートは2020/05/15、STM32G0xテンプレートは2020/05/30)。

V2では、V1ご購入者様から頂いたご意見ご感想を反映し、新しいSTM32CubeIDEやビルトインSTM32CubeMX使い方説明に工夫を加え、開発トラブル回避、既存アプリケーション資産活用方法などの新たなTipsも添付解説資料に加えました。

テンプレートと合わせてスムースなSTM32MCUアプリケーション開発にお役に立てると思います。

本稿は、説明を工夫したSTM32CubeIDEビルトインSTM32CubeMX使い方の一部を紹介します。

STM32CubeMX使い方:コツ

※以下、用語の頭に付く「STM32」は省略して記述します。

MCU周辺回路の初期化コードを自動生成するCubeIDEビルトインCubeMXも、以前投稿したスタンドアロンCubeMXの使い方と同じです。

CubeMXはSTM32MCU開発の出発点となるツールですので、十分理解した上で着手したいものです。テンプレートV2では、ビルトインCubeMXが生成するファイルに着目し、説明に以下の「使い方のコツ」と「簡単な順位」を追加しました。

CubeMXは、生成するファイル数が多い上に、使用するMCU周辺回路が増えると、生成コード量も多くなり、初めての方には少し解りにくいツールです。弊社テンプレートV1も、このCubeMXに関する質問を多く頂きました。それでも、コツを知っていれば十分使いこなせます。

そのコツとは、以下2点です。
・チェックが必要な自動生成ファイルは、main.hのみ
・main.cに自動追加される周辺回路ハンドラと、初期化コードが分かれば使える

F1シリーズSTM32F103RBの評価ボード:Nucleo-F103RBに弊社テンプレートを応用した例で説明します。

STM32CubeMX生成のF1BaseboardTemplateファイル構成
STM32CubeMX生成のF1BaseboardTemplateファイル構成

CubeMXが自動生成するファイルが、赤:CubeMX生成欄の9個です。このうち注目すべきは、太字赤☑で表示したmain.hとmain.cです。

main.hは、CubeMXで設定したユーザラベル、評価ボードならばB1[Blue PushButton]やUSART_TX/RX、LD2[GreenLed]などを定義した生成ファイルです(※[ ]内は、自動生成時に削除されますので覚え書きなどに使えます)。

main.hのコメント:Private definesの後にこれらの定義が生成されます。これら定義をチェックしておくと、「CubeMX自動生成コードを読むときに役立ち」ます。

main.cは、CubeMXが生成するメイン処理で、評価ボードのCubeMXデフォルトでコード生成:(Alt+K)した場合には、main.cのコメント:Private variablesの後にUSARTハンドラ:huart2と、コメント:Private function prototypesの後にUSART2の初期化コード:MX_USART2_UART_Init()と、その「初期化コード本体がmain.cソースの後ろの方に自動生成」されます。

その他の7個ファイルは、当面無視しても構いません。CubeMXデフォルトのHAL (Hardware Abstraction Layer)APIを利用し、割込みを使わない限り、ユーザコードには無関係だからです(※7個ファイルを知りたい方は、関連投稿:STM32CubeMX生成ファイルのユーザ処理追記箇所を参照してください)。

CubeMXが周辺回路:USART2初期化コードとそれに使う定義を自動生成済みなので、後は、main.cの無限ループ内の指定区間:USER CODE BEGIN xyz~USER CODE END xyzに、Usart2やLD2を使ったHAL APIユーザコードを追記すれば、アプリケーションが完成します。

追記したユーザコードは、再度CubeMXでコード生成しても、指定区間のまま引き継がれます。

ちなみに、アプリケーションで使用可能なHAL APIは、Ctrl+Spaceでリスト表示されます(Content Assist)。そのリストから使用するHAL APIを選択すれば、効率的なユーザコード追記が可能です。
※Content Assistの賢いところは、「ソースコード記述の周辺回路ハンドラを使ってHAL APIをリスト化」するところです。記述なしハンドラのAPIはリスト化されません。

つまり、CubeMXのPinout & Configurationタブで周辺回路を設定後コード生成しさえすれば、直ぐにユーザコードを追記できるファイルが全て自動的に準備され、これらファイルの指定区間へユーザコードを追記すれば、アプリケーションが完成する、これがCubeMXの使い方です。

このCubeMX使い方理解に最低限必要なファイルが、簡単順位:0のmain.hとmain.cの2個です。CubeMX生成ファイル数は9個ありますが、先ずはこの2個だけを理解していれば十分です。

LD2を点滅させるアプリケーションなどを指定区間へ自作すると、具体的に理解が進みます。

STM32CubeMX使い方:周辺回路のファイル分離

評価ボードのCubeMXプロジェクトファイル(*.ioc)は、デフォルトでB1[Blue PushBotton]とUSART2、LD2[GreenLed]を使っています。これらは、評価ボード実装済み周辺回路です。

これら評価ボード実装済み周辺回路へ、弊社テンプレートを適用したのが、シンプルテンプレートです(表:シンプル追加の欄)。

例えば、B1スイッチ押下げ状態をSW_PUSH、USART送信タイムアウトをUSART2_SEND_TIMEOUTなどソースコードを読みやすくする定義の追加は、CubeMX生成main.hの指定区間へ追記することでもちろん可能です。

しかし、他MCUコアへの移植性や変更のし易さを狙って、あえて別ファイル:UserDefine.hへこれらを記述しています。

同じ狙いで、LD2とB1、USART2のユーザ追記制御部分を、Led.cとSw.c、Usart2.cへファイル分離しています。ファイル分離により、HAL API利用のためMCUコア依存性が無くなり、例えば別コアのF0やG0評価ボードで同じ周辺回路を使う場合は、そのファイルのまま流用可能になります。

これらファイル分離した周辺回路の追記制御部分を、main.cの無限ループと同様に起動するのが、Launcher.cです。

つまり、シンプルテンプレートは、評価ボード実装済み周辺回路に、何も追加せずに弊社テンプレートを適用したシンプルな応用例です。その理解に必要なファイルが、緑:シンプル追加欄の☑で、簡単な順に1~5の番号を付けています。

CubeMXのそのままの使い方で周辺回路を追加すると、生成ファイル数は、赤:9個のままですが生成コード量が増えます。周辺回路の初期設定コード増加は当然ですが、この部分はCubeMX自動生成のためミス発生はありません。

しかし、ユーザコード指定区間へ、追加した周辺回路の制御コードを追記するのは、ユーザ自身です。様々な周辺回路制御が混在し追記量が増えてくると、バグやケアレスミスの元になります。

この対策に、周辺回路毎にファイルを分割し、この分割したファイルへ制御コードを記述するのが、シンプルテンプレートです。1周辺回路の制御コードが1ファイル化されていますので、簡単順位1~5の内容は、どれもとても簡単です。

さらに、ADC制御やLCD制御など、殆どの組込アプリケーションで必要になる周辺回路を追加し、Baseboardと評価ボードを結線、デバッグ済みのアプリケーションがベースボードテンプレートです(橙:ベースボード追加欄の3個)。

ユーザ追加ファイルは、全てMCUコア依存性がありません。CubeMXのHAL APIコード生成を行えば、コアに依存する部分は、CubeMX生成ファイル内に閉じ込められるからです。つまり、ユーザ追加ファイルは、全てのSTM32MCUへ流用できる訳です。

これらシンプルテンプレート、ベースボードテンプレートから新たなSTM32MCUアプリケーション開発を着手すれば、新規にアプリケーションをゼロから開発するよりも初期立上げの手間を省け、さらに機能追加や削除も容易です。

STM32CubeMX使い方:周辺回路プロパティ、既存AN利用法

CubeMXへ追加した周辺回路のプロパティ設定値やその理由、更に、既存アプリケーションノート利用方法など、新しいSTM32CubeIDE開発トラブルを回避し、スムースに開発着手できる様々なTipsをテンプレート添付説明資料へ加えています。

マイコンテンプレートサイトでSTM32Fxテンプレートは2020/05/15、STM32G0xテンプレートは2020/05/30発売開始です。ご購入をお待ちしております。
※STM32Fx/G0xテンプレートV1ご購入後1年以内の方は、後日V2を自動配布致しますのでお待ちください。