SW4STM32からSTM32CubeIDE移設

STマイクロエレクトロニクス(以下STM)MCUの統合開発環境(IDE)を、従来のSW4STM32から新しいSTM32CubeIDEへ移設するのは簡単です。STM32CubeIDE初期画面に、SW4STM32からSTM32CubeIDEへのプロジェクト変換機能があるからです。

しかし、本稿はSTM社自身による新しいSTM32CubeIDE発表を、STM32MCU純正開発ツールラインナップの完成ととらえ、SW4STM32で開発したSTM32FxテンプレートSTM32G0xテンプレートを、STM32CubeMX起点のSTM32CubeIDE移設方法とそのメリットを示します。

SW4STM32/TrueSTUDIOからSTM32CubeIDE移設背景

IDE開発元の買収&消滅、C/C++コンパイラ改版、Eclipse改版、WindowsなどのOS改版等々、IDE移設が生じる原因は、様々です。IDEは、MCU開発者と最も長い付合いをするツールで、しかも顧客先で稼働中ソフトウェアの変更手段ですので、IDE移設はできれば避けたい出来事です。

SW4STM32は、STM32MCU向けコードサイズ制限なしの無償IDEで、サードパーティAC6社が提供してきました。また、サードパーティAtollic社のTrueSTUDIOも同じくSTM32MCU向け無償IDEとして人気がありましたが、Atollic社をSTMが買収し、TrueSTUDIOはDiscontinue、代わりにSTM自社開発のSTM32CubeIDE無償提供を始めました(Atollic社買収の目的は、STM32CubeIDE開発だと思います)。

STM32 Software Development Tools(出典:STMサイト)
STM32 Software Development Tools(出典:STMサイト)

ポイントは、従来サードパーティが提供してきたコードサイズ制限なし無償IDEを、STM自らSTM32CubeIDEで提供し、「STM32CubeMX/IDE/Programmer/Monitorから構成されるSTM純正のSTM32MCU開発ツールラインナップが完成」したことです(上図)。

このうち、STM32CubeMoniterは、比較的新しいデバッガで、本ブログで紹介を予定しています。

STM32CubeIDEフォルダ構成

STM32CubeIDEは、SW4STM32やTrueSTUDIOよりも後発IDEですので、SW4STM32/TrueSTUDIO開発プロジェクトを、STM32CubeIDEプロジェクトへ変換し取込む機能があります。この機能の使用結果が下図左側です。

STM32CubeIDE変換機能移設プロジェクト(左)とSTM32CubeIDE新規プロジェクト(右)のフォルダ構成比較
STM32CubeIDE変換機能移設プロジェクト(左)とSTM32CubeIDE新規プロジェクト(右)のフォルダ構成比較

左側は、弊社がSW4STM32で開発したSTM32G0x SimpleTemplateプロジェクトを、STM32CubeIDEの変換機能を使ってSTM32CubeIDEプロジェクトへ移設後のProject Explorer、一方、右側は、STM32CubeIDEで新規にSTM32G0プロジェクトを作成した時のProject Explorerです。

左右でプロジェクトのフォルダ構成が異なっていることが判ります。

左:変換機能利用の移設プロジェクトは、従来のSW4STM32フォルダ構成がそのままSTM32CubeIDEで再現されます。

右:STM32CubeIDE新規プロジェクトのフォルダ構成は、Coreフォルダ内にIncフォルダとSrcフォルダがまとめられています。これがSTM32CubeIDE本来のフォルダ構成です。
※ここでのCoreは、下図Application code層を示します。

STM32CubeIDE本来のフォルダ構成は、MCUがCortex-M4のSTM32G4などへ代わっても、Core>Inc/Src構成は不変で、Driversフォルダの中身がSTM32G4対応へ変わるのみです。つまり、よりCMSIS対応のアプリケーション開発に向いた構成です。

CMSIS Structure(出典:Keil CMSIS Version 5.6.0 Generalサイト)
CMSIS Structure(出典:Keil CMSIS Version 5.6.0 Generalサイト)

※CMSIS対応は、関連投稿:mbed OS 5.4.0のLチカ動作、LPCXpresso824-MAXで確認の3章 CMSISを参照してください。

このようにSTM32CubeIDEは、開発者が「本来のアプリケーション開発に集中し易い、つまりIncとSrcのコード作成に集中できるMCU非依存のフォルダ構成」です。

さらに、他の「STM32MCU純正開発ツールとの相性良さや、新発売MCUデバイスへの素早い対応」も期待できます。

これらは、サードパーティIDEになかったSTM自社開発STM32CubeIDEの大きなメリットです。

STM32CubeMX起点のSTM32CubeIDE移設

STM32Fx/G0xテンプレートは、SW4STM32で開発しました。STM32CubeIDEプロジェクト変換機能を使って、従来SW4STM32フォルダ構成のままSTM32CubeIDEへの移設は簡単です。しかし、前章のSTM32CubeIDE本来のフォルダ構成の方が、より大きなメリットが期待できます。

そこで、本来のSTM32CubeIDEプロジェクトフォルダ構成へ、SW4STM32プロジェクトを移設します。

これには、STM32Fx/G0xテンプレート開発時に自作したSTM32CubeMXプロジェクトファイル(前章の左側:SimpleTemplate.ioc)を使います。

STM32CubeMXは、STM32MCUソフトウェア開発の起点となるコード生成ツールです。このSTM32CubeMXから移設を始めれば、次段のSTM32CubeIDEも本来の新規プロジェクト構成で自動生成されます。

さらに、開発アプリケーションで使うLL API/HAL APIの選択や変更も、STM32CubeMXで行います。従って、LL APIが「主」で開発したSTM32G0xテンプレートを、HAL APIへ変えるのも容易です。
※LL API「主」からHAL APIへも「主」へ変更する理由は、STM32G0シリーズがRoot of Trust対応メインストリーム(汎用)MCUだからです。STM32G0専用のLL APIアプリケーションよりも、汎用HAL APIアプリケーションの方が、Root of Trust実現には向いています。詳しくは、関連投稿:STM32G0/G4のRoot of Trust(2)を参照してください。

SW4STM32のSTM32CubeMXプロジェクトファイル(SimpleTemplate.ioc)を起点としてSTM32CubeIDEへ移設したProject Explorerが下図です。前章の右側:STM32CubeIDE新規プロジェクトと同じフォルダ構成で移設されていることが判ります。

STM32CubeMXプロジェクトファイル起点でSTM32CubeIDEへ移設
STM32CubeMXプロジェクトファイル起点でSTM32CubeIDEへ移設

但しこの方法では、SW4STM32でユーザ(筆者)が追加作成したファイル、前章左側:Launcher.c/Led.c/Lpuart.c/UserDefine.hは、手動で移設する必要があります。

まとめ

STM32CubeIDEの提供で、STM32MCU純正開発ツールラインナップが完成しました。
※STM32CubeIDE v1.3.0に残っていた日本語文字化けは、コチラの投稿方法で解決しました。

SW4STM32/TrueSTUDIOなどの従来IDEからSTM32CubeIDE 移設のメリットは、他のSTM純正開発ツール(STM32CubeMX/Programmer/Monitor)との好相性や新発売MCUデバイスへの早い対応です。

従来IDEプロジェクトの移設は、STM32CubeIDEプロジェクト変換機能を使うと簡単です。しかし、移設メリットを活かすには、旧IDEフォルダ構成から、STM32CubeIDE本来の構成となるSTM32CubeMXプロジェクト起点の移設を、弊社STM32Fx/G0xテンプレートへ適用します。

STM32CubeIDE対応の各テンプレート改版完成は、本ブログで発表します。

STM32G0/G4のRoot of Trust(2)

STM32G0/G4シリーズRoot of Trust実現の第2回目は、初めにRoot of Trustを実現するセキュア・ブートの説明にトライし、直にセキュア・ブートとセキュア・ファームウェア更新を実装するSTM32G4テンプレート開発環境の構築方法を示します。

セキュア・ブート説明をこまごま続けるよりも、具体的なRoot of Trust実現開発環境を示す方が、実務的(短絡的?)だからです。

セキュア・ブート

第1回紹介の日本語版UM2262、P1概要:セキュア・ブート説明を抜粋したのが以下です。

‘セキュア・ブート(信頼の起点となるサービス)は、システムリセット後に必ず実行される改変不可のコードで、無効なコードや悪意のあるコードを実行しないために、実行前に毎回STM32の静的保護を確認し、STM32実行時保護を有効化してから、ユーザアプリケーションコードの認証および整合性を検証します。’

英語直訳で難解です(各単語の事前理解が必要なセキュリティ関連説明は、殆どがこんな感じですが…)。

ただ、下線部:「必ず実行される改変不可のコード」なので、理解不足や多少間違って解釈しても、セキュア・ブートコードを実装すれば、それで十分かもしれません😅。

セキュア・ブート解釈

図1.セキュアブートの信頼の起点(出典:UM2262)
図1.セキュアブートの信頼の起点(出典:UM2262)

要は、ユーザが開発したアプリケーション実行前に、MCUが勝手に行うブート処理のセキュリティを高度にしたものがセキュア・ブート(SB)だと解釈します。

従来のブート処理は、リセット後、MCU内蔵クロック発振器の安定化待ちやRAM領域初期化などの処理を何の疑いもなく実行し、その後、ユーザ開発アプリケーションを起動していました。

セキュア・ブート処理は、前章のセキュア・ブート処理を行い(図1.①)、その結果をUM2262:9章の表6. 起動時エラーメッセージ(下表)で示すように認証し②、「エラーなし。成功。」時のみ、③ユーザ開発アプリケーションを起動します。

表6. セキュア・ブート起動時のエラーメッセージ(出典:UM2262)
表6. セキュア・ブート起動時のエラーメッセージ(出典:UM2262)

パソコンで例えると、従来ブートがBIOS起動、セキュア・ブートがUEFI起動に相当すると考えれば良いのかもしれません。

X-CUBE-SBSFUはHAL API補完

Root of Trust実現で使うSTM32Cube拡張パッケージ:X-CUBE-SBSFUは、STM32MCU間の移植性を重視しているためHAL(Hardware Abstraction Layer)ベースです。

弊社発売中のSTM32G0xテンプレート(Version1)は、高速性を活かすエキスパート向けLL(Low layer)APIが「主」、HAL APIは「従」としてSW4STM32で開発しました。しかし、STM32G0でのRoot of Trust実現には、HALベースのソフトウェア開発が適しています。

LL/HAL混在利用は、関連投稿:STM32CubeMXのLow-Layer API利用法 (2)の4章で示した注意が必要です。X-CUBE-SBSFUは、アプリケーション起動前のHAL利用で、起動後のユーザアプリケーションのLL利用の場合は、問題ないかもしれません。この点は、今後明らかにしていきます。

いずれにせよSTM32G0xテンプレートは、IDEをSW4STM32から新しいSTM32CubeIDEへ移設すると同時に、Root of Trust実現に向けHAL APIも「主」とし、STM32CubeIDEで「再開発」してVersion 2に改版する予定です。

セキュリティ関連の説明はここまでにして、STM32G4シリーズでRoot of Trust実現の具体的方法に移ります。

Root of Trust実現STM32G4テンプレート開発環境

Root of Trust実現にセキュア・ブート(SB)機能とセキュア・ファームウェア更新(SFU)機能を実装する汎用STM32G4シリーズのテンプレート開発環境は、以下とします。

  • 統合開発環境:STM32CubeIDE v1.3.0、2020/02/26
  • STM32Cube拡張パッケージ:X-CUBE-SBSFU v2.3.0、2020/01/17
  • STM32G4評価ボード:NUCLEO-G474RE(Cortex-M4/170MHz、Flash/512KB、RAM/128KB)

この環境で実現するセキュリティ機能が、UM2262の6.1概要に記載されたものです。これら機能理解に不明確な部分もありますが、内容把握済み、これら機能実現ためX-CUBE-SBSFUを使うと割切ります。開発環境を使っているうちに、(多分)理解度が上がるでしょう😅。

なおUM2262日本語版は、英語版Rev5からの翻訳なのでサポートIDEにSW4STM32はありますが、新しいSTM32CubeIDEがありません。しかし、最新英語版UM2262 Rev6に、STM32CubeIDEが追加されましたので本ブログでもSTM32CubeIDEを使います。

また、セキュリティ機能をテストするNUCLEO-G474RE用サンプルアプリケーションもX-CUBE-SBSFUに添付されていますので、これを以降の説明に使います。

UM2262では、STM32CubeIDEを使ったRoot of Trust開発環境の構築手順が判りにくいので、以下に説明を加えます。

構築手順1:STM32CubeIDEへのRoot of Trust SW4STM32プロジェクトインポート

X-CUBE-SBSFU v2.3.0には、SW4STM32プロジェクトが添付されていますが、未だSTM32CubeIDEプロジェクトの添付はありません。

そこで、STM32CubeIDEのInformation CenterからImport SWSTM32 projectをクリックし、X-CUBE-SBSFU添付SW4STM32プロジェクトを変換(Import)し、STM32CubeIDEプロジェクトを新規作成します。

STM32CubeIDEのSW4STM32プロジェクトインポート
STM32CubeIDEのSW4STM32プロジェクトインポート

STM32G4評価ボード:NUCLEO-G474REのSW4STM32プロジェクト6個を、STM32CubeIDEへインポートする時のダイアログです。

Finishクリックで、プロジェクト毎に下図2回の同意を求められますので、OKをクリックします。

STM32CubeIDE Projects Converter
STM32CubeIDE Projects Converter

構築手順2:Root of Trustサンプルアプリケーションのコンパイル

インポートした6個のプロジェクトは、シングルファームウェアイメージ:NUCLEO-G474RE_1_Imageとデュアルファームウェアイメージ:NUCLEO-G474RE_2_Imageの2種類のサンプルアプリケーションです。

2種類のRoot of Trustサンプルアプリケーション
2種類のRoot of Trustサンプルアプリケーション

シングル/デュアルファームウェアイメージの違いは、次章で説明します。

このサンプルアプリケーションは、それぞれ図15のように、_SECoreBin、_SBSFU、_UserAppの順番でプロジェクトをコンパイルする必要があります。図示のように前段コンパイル生成出力を、次段コンパイル入力に使うからです。

図15. アプリケーションのコンパイルステップ(出典:UM2262)
図15. アプリケーションのコンパイルステップ(出典:UM2262)

この順番を守ってコンパイルした時のみ_UserAppの出力オブジェクトが生成されます。

Windowsセキュリティソフト(Avastなど)によっては、コンパイル途中でワーニングを出力することがありますが、暫く待つとコンパイルを継続します。

シングルファームウェアイメージとデュアルファームウェアイメージ

図15は、SBSFU処理後のFlashメモリ配置を示しています。

図15の右側黄色部分:アクティブなイメージ領域だけをSFU処理で使うサンプルアプリケーションが、シングルファームウェアイメージです。右側黄色部分の上側、イメージのダウンロード/バックアップ領域に、図2のネットワーク(②通信チャネル)経由の新しいファームウェアを一旦入れるのが、デュアルファームウェアイメージです。

図2.セキュアファームウェア更新プロセス(出典:UM2262)
図2.セキュアファームウェア更新プロセス(出典:UM2262)

デュアルファームウェアイメージは、SFU処理中に電源断で中断しても、電源復帰後にSFU継続が可能です。また、アクティブなイメージ領域で動作中アプリケーションと並行してダウンロードが可能です。

シングルファームウェアイメージは、新しいファームウェアを、アクティブなイメージ領域上へ直接更新します。

デュアルファームウェアイメージは、フェールセーフな分、Flash容量はシングル比、倍必要になります。一方、シングルファームウェアイメージは、ユーザが使えるFlash容量が大きいので、デュアルよりも大きなアプリケーション開発ができます。

※ここで使ったセキュリティ用語:ファームウェアイメージとは、STM32CubeIDEのコード生成ツールSTM32CubeMXがデバイス毎に用いるファームウェア(弊社ならFW_F0/F1/G0/G4)とは別物です。図15の黄色部分を示します。

*  *  *

以上で、STM32CubeIDEを使ったRoot of Trust実現のセキュア・ブート(SB)、セキュア・ファームウェア更新(SFU)機能を持つSTM32G4テンプレート開発環境の構築と、SBSFUに使うシングル/デュアルファームウェアイメージの2種サンプルアプリケーションを説明しました。

次回、このSTM32G4テンプレート開発環境とデュアルファームウェアイメージのサンプルアプリケーションを使って、Root of Trust実現の動作説明を予定しています。

STM32G0/G4のRoot of Trust(2)まとめ

  • 信頼の起点:セキュア・ブート(SB)は、リセット後に必ず実行される改変不可能コード。
  • SB処理後、エラーなし認証時のみ、ユーザアプリケーション起動。
  • STM32Cube拡張パッケージ:X-CUBE-SBSFUは、HAL API補完。
  • STM32CubeIDEでRoot of Trust実現のセキュア・ブート(SB)、セキュア・ファームウェア更新(SFU)機能実装STM32G4テンプレート開発環境と構築手順説明。
  • SBSFUアプリケーションのデュアルファームウェアイメージとシングルファームウェアイメージの特徴説明。

SB、SFU実現には、暗号化や図1/2/15掲載の鍵、セキュアエンジンなど、本稿で説明を省いた(すっ飛ばした)様々なセキュリティ処理が必要です。UM2262付録の章に、これら詳細が記載されています。

本質的なセキュリティ理解には、これら各処理の理解積重ねが必要だと思います。付録の章を一読しておくと、今後いろいろな場面で役立ちます。

STM32G071RBとAlexaを繋ぐ

1月9日STマイクロエレクトロニクス(以下STM)公式ブログに、STM32G0とAlexa(アレクサ)を接続する開発キット:Alexa Connect Kit(ACK)モジュールが紹介されました。アレクサに話しかけ、STM32G0評価ボードのNucleo-G071RB 経由でスマートホーム制御が簡単に実現できます。

システム構成

STM32G071RBとAlexaを接続するAlexa Connect Kit (ACK)のシステム構成
STM32G071RBとAlexaを接続するAlexa Connect Kit (ACK)のシステム構成

システム構成の公式ブログ掲載が無いので、自作したのが上図右側です(左側出典:STMサイト、Cortex-M7 MCUでアレクサ接続)。

USI MT7697HがACKモジュールで、Nucleo-G071RBとはArduinoコネクタで接続します。スマートスピーカに話しかけると、クラウド内で音声解析→制御コマンド生成を行い、このコマンドがACKへ無線送信され、STM32G0評価ボードNucleo-G071RBへ届き、STM32G071RBがスマートホーム機器などを制御します。

費用とSTM32G0用ACKドライバ、ファームウェア

費用:Nucleo-G071RBが約$10、ACKがUS Amazonで$197、(日本アマゾンで¥38,202)。

STM32G0用ACKドライバ、ファームウェア:公式ブログリンク先は、今日現在、提供されていません。

2018年6月頃は、STM32F7やSTM32H7などの高性能Cortex-M7 MCUでアレクサ接続がSTM公式ブログで投稿されましたが、今回Cortex-M0+のSTM32G0とACKでも簡単に接続可能になりました。

STM32G0特徴

2018年12月新発売のSTM32G0シリーズは、初の90nmプロセス製造MCUで低消費電力と高速動作、従来のSTM32F0 (Cortex-M0)~F1 (Cortex-M3)性能をカバーする新しい汎用MCUです。セキュリティハードウェア内蔵、低価格、64ピンパッケージでも1ペアVDD/VSS給電がSTM32G0の特徴です。
関連投稿:STM新汎用MCU STM32G0守備範囲が広いSTM32G0

STM32マイコンマンスリー・アップデート2020年1月のP4に、「STM32G0 シリーズのラインナップ拡充 STM32G041/ G031/ G030 新登場」記事もあります。筆者も、STM32G0シリーズは、STMの汎用MCUとしてお勧めデバイスです。

LL APIかHAL API、混在?

残念ながら今は未提供ですが、筆者は、ACKドライバとファームウェアのAPIに興味があります。

理由は、STM32G0シリーズの高性能を引き出すには、HAL:Hardware Abstraction Layer APIよりもエキスパート向けLL:Low Layer API利用ソフトウェア開発が適すからです。

HALとLL比較(出典:STM32 Embedded Software Overvire)
HALとLL比較(※説明のため着色しています。出典:STM32 Embedded Software Overvire)

生産性や移植性の高いHAL APIとLL APIの混在利用は、注意が必要です(関連投稿:STM32CubeMXのLow-Layer API利用法 (2)の4章)。

ACKドライバ、ファームウェアが、LL APIかHAL APIのどちらを使っているか、または混在利用かを確認し、ノウハウを取得したかったのですが…😥。

LL API利用STM32G0xテンプレートとHAL API利用STM32Fxテンプレート

弊社は、LL API利用STM32G0x専用テンプレートと、HAL API利用STM32Fx汎用テンプレートの2種類を、それぞれ販売中です(テンプレートは同一、テンプレートを使うAPIのみが異なる)。

STM32汎用MCUラインナップ
STM32汎用MCUラインナップ(出典:STM32 Mainsterm MCUsに加筆)

もちろん、STM32G0でもHAL APIを利用することは可能です(STM32G0x専用テンプレートにもHAL API使用例添付)。LL API利用ソフトウェアは、性能を引き出す代償に対象MCU専用になります。

HAL APIとLL APIの混在は避けた方が無難で、STM32G0はLL API専用でテンプレート化しました。添付資料も、LL APIを中心に解説しています。STM32Fxテンプレート添付資料は、HAL API中心の解説です。

両テンプレートをご購入頂ければ、LL/HAL双方のAPI差が具体的に理解できます。開発するアプリケーション要求性能や発展性に応じて、LL APIかHAL APIかの選択判断も可能になります。
※両テンプレート同時購入時は、2個目テンプレート50%OFF適用で、1500円(税込)です😀。

FYI:日本語コメント文字化け継続

STMマイコン開発環境にソースコード日本語コメントの文字化けが発生中であることを、昨年11月に投稿しました。この文字化け発生のSTM32CubeIDE v1.1.0/CubeMX v5.4.0開発環境が、STM32CubeIDE v1.2.0STM32CubeMX v5.5.0に更新されました。

更新後のSTM32CubeIDE v1.2.0/CubeMX v5.5.0でも、旧版同様に文字化けします。
一方、SW4STM32では、STM32CubeMX v5.5.0更新後も日本語コメント文字が正常表示されます。

他社の最新版EclipseベースIDE、NXPのMCUXpresso IDE v11.1.0や、CypressのPSoC Creator 4.2では、ソースコードText Font変更をしなくても文字化けはありませんので、STM特有問題だと思います。

ワールドワイドでの日本相対位置低下、今年から始まる小学校英語教育…、日本ものつくりは、英語必須になるかもしれません。

STM32CubeIDE v1.1.0更新と文字化け対策(その1)

2019年10月16日、STマイクロエレクトロニクス(以下STM)の無償統合開発環境:STM32CubeIDEが、v1.1.0に更新されました。v1.0.2からMajor releaseです。筆者が従来使ってきたAC6社)SW4STM32からのIDE乗換と、STM32G4テンプレート(前投稿参照)向けの新しい開発環境構築に丁度良いタイミングです。その1は、更新内容、Windows起因のエディタ文字化け対策などを示します。

STM32CubeIDE v1.1.0更新内容

マルチコアSTM32MP1などの新デバイス、コード生成ツールのSTM32CubeMX v5.4.0(2019/10/11)、ベースIDEのEclipse™(2019-09)対応などが主な更新内容です(Eclipseの状況は、コチラの投稿2章などを参照してください)。RN01114に詳細な更新内容があります。

従来のSW4STM32作成のプロジェクトを、STM32CubeIDEへインポートすると、ソースコード日本語追加コメントに文字化けが発生します。この文字化けは、STM32CubeIDE最初のリリースから変わらず残ったままなので、対策を示します。

文字化け対策

Windows 10 1903までのSW4STM32でソースコードへ日本語コメントを入力し保存すると、Shift-JISでエンコード化します。このエンコードが、STM32CubeIDEのエディタ文字化けの原因です。対策は、UTF-8エンコードへの変換です。

Shift-JISからUTF-8へのエンコード変換方法は、様々あります。筆者がソフトウェア開発者へお勧めするのは、無償テキストエディタ:Notepad++です。予約語色分け表示や、矩形編集などのソースコード編集に便利な機能があり、プラグインでCompareなどの機能追加も簡単、動作も軽快なエディタです。
※Windows 1903のメモ帳保存時、右下の文字コード(E)に、UTF-8を選択することでもエンコード変換ができます(コチラの記事に、UTF-8へのWindows変更経緯があります)。

Notepad++を使ったShift-JISからUTF-8へエンコード変換は、メニューから簡単にできます。右下欄に現在のエンコードも表示されますので便利です。

Notepad++でソースコードエンコードをShift-JISからUTF-8へ変換
Notepad++でソースコードエンコードをShift-JISからUTF-8へ変換

Shift-JISからUTF-8へエンコード変換前と、変換後のSTM32CubeIDEのソースコード表示です。エンコード変換で文字化けが解消されました。これで、SW4STM32からSTM32CubeIDEへIDEを乗換えることができます。

Shift-JISからUTF-8 変換でSTM32CubeIDEの文字化け解消
Shift-JISからUTF-8 変換でSTM32CubeIDEの文字化け解消

注意点は、SW4STM32プロジェクト→STM32CubeIDEプロジェクト変換は可能ですが、逆にSTM32CubeIDEプロジェクト→SW4STM32プロジェクトへ戻すことができない点です。筆者は、IDE毎にワークスペースを別々に設定し、SW4STM32プロジェクトをSTM32CubeIDEワークスペースへ手動コピー後、ソースコードのShift-JIS→UTF-8変換、最後にプロジェクトIDE変換で対応しています(プロジェクトIDE変換方法は次章説明)。

なお、Windows 10 1903でSTM32CubeIDEのソースコードに日本語入力しても、UTF-8でエンコード保存されます。

STM32CubeIDE v1.1.0の使い方

STM32CubeIDE v1.1.0の使い勝手は、SW4STM32と殆ど同じです。EclipseベースのIDEは、どれでも同じ使い勝手で、IDE提供ベンダが変わっても利用経験がそのまま活かせるのが特徴です。それでも、ベンダ毎に多少の差があり、STM32CubeIDEで言えばℹ️クリックで表示されるInformation Centerです。

STM32CubeIDEのInformation Center
STM32CubeIDEのInformation Center

Start a project

Import SW/TS projectをクリックすると、SW=AC6社)SW4STM32旧プロジェクト、TS=Atollic 社)TrueSTUDIO旧プロジェクトを、STM32CubeIDE新プロジェクト変換ツールが起動します。変換は、ワークスペース内の旧プロジェクトをそのままSTM32CubeIDEでのみ動作する新プロジェクトに変換します。

Atollic社のTrueSTUDIOはSTMに買収され、日本語対応などの改版が行われましたが、結局新デバイス追加がなく事実上Discontinueとなりました。経緯などは、コチラの投稿の手順4を参照してください。AC6社)SW4STM32も、最近は更新がありません。STM製のSTM32CubeIDEがリリースされたので、TrueSTUDIOと同じくDiscontinueになると思います。

Start new STM32 projectをクリックすると、新たにSTM32CubeIDEプロジェクトが作成できます。表示されるダイアログに従っていけば、問題なく新しいSTM32CubeIDEプロジェクトができます。

Target SelectionダイアログのOther Venderクロス検索
Target SelectionダイアログのOther Venderクロス検索

面白いのは、ダイアログのTarget Selectionです。vendersにSTM以外の選択肢もあります。今回は、STM32G4テンプレート開発に使う評価ボードSTM32G474RE(Cortex-M4、Flash:512KB、RAM:128KB)を選択しますが、他ベンダ、例えばTIのMSP432P401M比較がどのように使えるかは、今後調査します。

Quick links

Documentation、Start Guide、What’s Newの3つのQuick linksがあります。

Documentationをクリックすると、主要PDF技術資料へアクセスできます。ここに、リリースノートやSW4STM32からのマイグレションガイドもありますので、目を通しておくと良いでしょう。

初めてSTM32CubeIDEを使う方は、Getting Startedをクリック。基本操作は、これだけ読めば必要十分、英文全11ページのよくできた資料が読めます。

What’s Newは、リリースノートのことです。

汎用MCU第2位のSTM32MCU最新ソフトウェア開発環境

STM32MCUは、汎用MCUで第2位、シェア20%を超えています(関連投稿は、コチラ)。2019年4月新発表のSTM32CubeIDEは、半年を経て今回Major releaseし、v1.1.0になりました。無償IDEで、シェア続伸に向けて続々と新発売されるSTM32MCUデバイスへ対応中なのは、STM32CubeIDEだけです。

STM32CubeIDEを使い、本ブログ関連STM32MCUの最新ソフトウェア開発環境が、下表です。

名称 機能 2019/11/01版数 MCU評価ボード
STM32CubeIDE Eclipseベースの統合開発環境 1.1.0
STM32CubeMX 初期化Cソースコード生成ツール 5.4.0
STM32CubeG0 STM32G0シリーズ用ファームウェア:G0_FW 1.3.0 STM32G071RB
STM32CubeG4 STM32G4シリーズ用ファームウェア:G4_FW 1.1.0 STM32G474RE
STM32CubeF0 STM32F0シリーズ用ファームウェア:F0_FW 1.11.0 STM32F072RB
STM32CubeF3 STM32F3シリーズ用ファームウェア:F3_FW 1.8.0 STM32F103RB

次回は、弊社販売中のSTM32FxテンプレートSTM32G0xテンプレートを、上記最新ソフトウェア開発環境へ移設する予定です。

汎用MCUシェア20%超、第2位はSTM32MCU

シェア2位に躍り出たSTの汎用マイコン事業戦略”が、EE Times Japanに掲載されました。本稿は、この記事を要約し、記事記載のMCU 4ニーズの1つ、セキュリティ強化マイコン:STM32H7の暗号鍵利用によるソフトウェア更新方法(ST公式ブログ10月8日投稿)を示します。

STM32MCUは、汎用MCU世界市場シェア20%超の第2位へ

2019年9月、東京都内でSTマイクロエレクトロニクス(以下STM)による記者会見が開かれ、そのレポートがEE Times Japan記事内容です。ARM Cortex-Mコア採用のSTM32MCUが、2018年には汎用MCU世界市場シェア20%を超え第2位になった要因分析、今後のSTM汎用MCU事業方針が会見内容です。

汎用STM32MCUの世界シェア推移(出典:STM)
汎用STM32MCUの世界シェア推移(出典:STM)

車載用を除くMCUが汎用MCUです。本ブログも、この汎用MCUを対象としており、上図推移は重要なデータです。

以下、マイクロコントローラ&デジタルICグループマイクロコントローラ製品事業部グローバル・マーケティング・ディレクタ)Daniel Colonna氏の記者会見談話を中心に記事要約を示します。

STM32MCUシェア続伸要因

STM競合他社は買収や統合で成長しているが、STMは独自でシェア2位を実現。要因は、民生機器だけに集中せず、産業機器などのインダストリアル分野(=マスマーケット)に主眼を置き製品開発を行ってきたこと。マスマーケットターゲット事業方針は今後も変えず、シェア30%を目指す。

インダストリアル分野の4MCUニーズとSTM対応

演算性能の強化(STM32MP1/STM32H7)、より高度なAI実現(STM32CubeMXのAI機能拡張パッケージ)、多様な接続技術への対応(STM32WB)、セキュリティ強化(STM32Trust)の4点がインダストリアル分野MCUのニーズとそのSTMの対応(カッコ内)。

インダストリアル分野汎用MCUの4ニーズ(出典:STM)
インダストリアル分野汎用MCUの4ニーズ(出典:STM)

より広範囲なマスマーケット獲得策

モノクロからカラーLEDへ置換え(TouchGFX)、8ビットなどから32ビットMCUへ置換え(STM32G0シリーズ)で、より広範囲マスマーケットでのSTM32MCU浸透を図る。

以上が記者会見記事の要約です。

汎用MCU第2位となったSTM32MCU評価ボードは、入手性が良く安価です。コードサイズ制限なしの無償開発環境(STM32CubeIDE /SW4STM32/STM32CubeMX)も使い勝手に優れています。また、厳選された日本語技術資料も活用でき、初級/中級レベルのMCU開発者に最適だと筆者も思います。

この特徴を持つSTM32MCUに対して、弊社はSTM32G0x専用テンプレートSTM32Fx汎用テンプレートを販売中です。今後は、STM32G4テンプレートも開発を予定しています。

これまでNon ARM汎用MCU1位であったRunesasも、ARMコア他社対応か(?)ついに2019年10月8日、Cortex-MコアMCU販売を開始しました。これについては、別途投稿します。

セキュリティ強化STM32H7のソフトウェア更新

インダストリアル分野4MCUニーズのうち、演算性能とセキュリティ強化を満たすのが、STM32H7(Cortex-M7/480MHz、Cortex-M4/240MHzのデュアルコア)です。筆者個人は、MCUというよりむしろMPUに属す気がします。STMも、STM32MCU(下記右)に対して、STM32マイクロプロセッサ(下記左)と区別しています。但し、名称は違っても、そこに用いる技術は同一のはずです。

STM32MCUとSTM32マイクロプロセッサ(出典:STM)
STM32MCUとSTM32マイクロプロセッサ(出典:STM)

丁度最初に示した10月8日のSTM公式ブログに、セキュリティ強化STM32H7のファームウェア書換え手順図を見つけました。関連投稿:総務省:2020年4月以降IoT機器アップデート機能義務化予定の2章で示した3種サイバー攻撃へのウイルス感染対策です。

STM32H7ソフトウェア更新時のSFI、HSM(出典:STM)
STM32H7ソフトウェア更新時のSFI、HSM(出典:STM)

ハードウェア暗号化エンジンを持つSTM32H7は、図右上のSFI:Secure Firmware Installで暗号化、STM32G0やSTM32G4等は、図右下のSMI:Secure Module Installで暗号化し、更新ソフトウェアを準備します。どちらも、セキュリティ認証情報を含むHSM:ST Hardware Secure Module smart cardで鍵を受渡し復号化、ソフトウェア書換えを行います。

我々が開発するMCUソフトウェアの更新頻度は、PCに比べれば低いはずです。しかし、その頻度は、ウイルスの数に比例しますので、サイバー攻撃が増えればその度にこの書換えで対応することを考えると憂鬱になります。
※書換え失敗やワクチン投入による通常処理への配慮も必要で、Windows 10のようにユーザ任せの無責任な対応はMCUソフトウェアでは論外なため、開発者負担は増すばかりです😫。

STM32CubeIDE v1.0.1更新

STマイクロエレクトロニクス(以下STM)のSTM32マイコンマンスリー・アップデート2019年7月号P9に、STM32CubeIDEのv1.0.1更新が記載されています。

STM32CubeIDE v1.0.1更新内容

内蔵のコード生成ツールSTM32CubeMXがv5.2.0からv5.2.1に変更されたこと、バグ修正が主な更新内容です(RN0114(2019/07/11))。

STM32CubeIDE v1.0.1更新内容
STM32CubeIDE v1.0.1更新内容

最新のSTM32CubeMX v5.2.1により、STM32G0x LL APIを活かしたソフトウェア開発がSTM32CubeIDE v1.0.1でも可能となりました。つまり、弊社推薦のSTM32MCU開発環境:SW4STM32+STM32CubeMX v5.2.1+STM32G0 FW 1.2.0と同じ土俵に今回の更新でなった訳です。

関連投稿:続報STM32CubeIDE

ベースEclipse IDE状況

STM32CubeIDE v1.0.1のベースEclipse IDE は、ECLIPSE™ 2019-03 です。Eclipse最新版は、ECLIPSE™ 2019-06(2019/06/19)ですので、ベースに合わせてSTM32CubeIDEも更新されるでしょう。

Eclipse IDEは、昨年の2018年6月までは、Photon、Oxygen、Neonなどのリリース名が付いていましたが、6月以降は、ECLIPSE™リリース年-月に変更されました。3か月毎に更新され、次回は2019-09予定です。
※メジャー/マイナー更新かは、判りにくくなりました。

STM32CubeIDE v1.0.1使用所感

今回の更新で期待していた日本語対応に関しては、旧STM32CubeIDE v1.0.0からの改善は見られません。

例えば、SW4STM32プロジェクトをSTM32CubeIDEへインポートすると、日本語ソースコードコメントが文字化けします。Preferences>Text Editors>Colors and Fontsを変えても同様です。

付属エディタを使っての直接日本語入力は問題ありませんが、SW4STM32からのマイグレーションツールでの文字化け発生は、回避手段があるとは思いますが面倒です。Atollic社)TureSTUDIO最終版で見せた日本語メニュー実装などは、先の話になりそうです。

また、旧v1.0.0では正しく表示されていたInformation Centerページも、‘表示できません’となります。

RN0114の2.3 Known problems and limitations項目も多いので、あえて今すぐにSW4STM32に変えてSTM32CubeIDE v1.0.1を使う必要性は感じません。土俵(付属開発ツール版数)が同じになっただけです。

現行SW4STM32 → 新STM32CubeIDE切替えタイミング

コードサイズ制限無しのSTM32MCU無償IDEは、旧Atollic社)TrueSTUDIOは既にDiscontinue、AC6社)SW4STM32も新デバイスへの更新をしない可能性が高いと思います。新しいIDE:STM32CubeIDEへ切替えるタイミングが、そろそろ近づいてきました。

筆者としては、SW4STM32の更新状況を注視しつつ現行IDE使用を維持し、次回のSTM32CubeIDE更新タイミングで新IDEへ切替えるつもりです。

STM32G0動画と専用テンプレート

STマイクロエレクトロニクス(以下STM)の公式ブログで、STM32G0を理解できるPart.0~10の動画(英語版)を紹介しています。
各動画は、休憩時間に視聴するのに丁度良い6分から15分程度の長さです。

動画リスト

13:13     Pt. 0, Install Procedure

6:05       Pt. 1, Saving Content of the Flash of the STM32

13:47     Pt. 2, Blinky

13:09     Pt. 3, PWM

9:10       Pt. 4, External Interrupt

14:20     Pt. 5, Low Power (Pt. 1)

6:23       Pt. 6, Low Power (Pt. 2)

13:19     Pt. 7, Printf

13:27     Pt. 8, Low Layer Drivers

17:37     Pt. 9, DMA

15:14     Pt. 10, Flashing STM32

少し聞きにくい英語ですが、スライドを見るだけでも内容は解ると思います。

開発環境

動画のIDEは、KeilのSTM32G0/F0/L0専用無償版を使っています。既にSTM32CubeIDEやSW4STM32を利用中の方は、これらIDEとKeil専用版を同時インストールすると、STM32G0/F0/L0のみコンパイル可能となるトラブルが発生するらしいので注意してください。

IDE以外は、コード生成ツール:STM32CubeMX、評価ボード:Nucleo-G071RB、通信アプリ:Tera Termなどおなじみの環境での解説です。

STM32G0のSTM32F0/F1をカバーする広い守備範囲、Low Layer API開発メリットや重要性などが理解できると思います。残念なのは、STM32G0x全シリーズ搭載の最新ADC解説が無いことです。ADCに関しては弊社関連投稿を参照ください。

STM32G0x専用テンプレート

動画Part8紹介のLL APIを活用したSTM32G0x専用テンプレートを発売中です。

STM32G0xシリーズのプロトタイプ開発着手時に必要となるLPUARTやLED制御などの複数サンプルソフトがあらかじめ実装済みで、評価ボードADC入力変換値のTera Term出力も実装済みです。

STM32G0xシリーズ性能をフルに発揮したアプリケーション早期開発や、STM32G0習得に最適です。

ご購入、お待ちしております。

STM32G0x専用テンプレート発売

LL API利用のSTM32G0x専用テンプレートを、2019年6月1日発売開始します。

STマイクロエレクトロニクス(以下STM)2018年12月新発売のSTM32G0xデバイスは、高性能・低電力なCortex-M0+と70nm新プロセス動作速度向上により、STM32G0x単独で従来汎用STM32F0/F1をカバーする性能と超低電力動作、低価格が特徴です。

このSTM32G0x専用LL (Low-Layer) API利用テンプレートが、今回1,000円(税込)で発売するSTM32G0x専用テンプレートです。

※従来から販売中のSTM32Fxテンプレートは、HAL API利用の汎用テンプレートです。

STM32G4シリーズ追加、全5種となったSTM32 Mainstream MCUs

2019年5月28日、超高性能汎用STM32G4xが発表されました。これでSTM汎用MCUは全5種となりました。一覧が下図です。

STM32汎用MCUラインナップ
STM32汎用MCUラインナップ(出典:STM32 Mainsterm MCUsに加筆)

STM32G0x専用テンプレートは、軽量・高速・エキスパート向きLL APIを利用します。STM32G0x性能をフル発揮するアプリケーションのプロトタイプ開発に最適です。

※STM32G0xや専用テンプレートの本ブログ関連投稿は、下欄タグ🏷:STM32G0x、または、専用テンプレートをクリックしてください。

STM32G0x専用テンプレート適用例2種、API比較評価用2種

LL APIとHAL APIの比較評価のため、汎用テンプレートをSTM32G0xへポーティングしたHAL APIテンプレートも添付します。同一アプリケーションでのLLとHALのリソース使用量、ユーザ記述量、API可読性などを具体的に評価・分析できます。全て評価ボード:Nucleo-G071RB上で動作確認済みです。

STM32G0x専用テンプレート適用例
STM32G0x専用テンプレート適用例

SimpleTemplateは、最も簡単なテンプレート適用例で、基本的なSTM32G071RB周辺回路とテンプレート動作が理解できます。AdcTemplateは、全STM32G0xシリーズ共通周辺回路:2.5Msps 12ビットADC制御をSimpleTemplateに追加し、全てのSTM32G0xプロトタイプ開発の起点となるテンプレートです。

SimpleTemplate、AdcTemplateともにLL APIを利用したSTM32G0x専用テンプレートと、汎用テンプレートをSTM32G0xへポーティングしたHAL APIテンプレートを提供します。

STM32G0x専用テンプレート適用例は、評価ボードのGPIOやLED、LPUART通信など必須の複数STM公式サンプルプロジェクトが実装済みで、すぐにプロトタイプ開発着手ができるLL API利用アプリケーションプロジェクトです。

※HAL版はAPI比較評価用です。2019年5月末時点のコード生成ツールSTM32CubeMX(v5.2.1)とSTM32G0 FW(v1.2.0)は、LL APIでのみSTM32G0x性能をフルに引き出すことができます。

※STM32MCU間でアプリケーション移植・流用性を最大限に保証するHAL APIを利用したソフトウェア開発を希望される方は、STM32Fxテンプレートの購入をご検討ください。

付属説明資料でLL APIアプリケーション開発着手時の障害解消

STM32G0x専用テンプレート付属説明資料のもくじを示します。

STM32G0x専用テンプレート付属説明資料もくじ
STM32G0x専用テンプレート付属説明資料もくじ

説明資料P1~P3は、STM32G0x専用テンプレートサイトから無料ダウンロード可能です。全14ページの詳細な説明により、LL APIが理解でき、STM32G0xデバイス専用アプリケーションのプロトタイプ開発着手時の様々な障害を取り除き、スピード開発するのに専用テンプレートは最適です。

STM32G0x専用テンプレートは、コチラの手順でご購入可能です。よろしくお願いいたします。

*  *  *

STM32CubeMX v5.2.1改版時の注意点

2019年5月24日、STM32CubeMXがv5.2.1へ改版されました。インストール時の注意点を示します。

STM32CubeMX v5.2.1改版
STM32CubeMX v5.2.1改版

STM32CubeMX v5.2.1ダウンロードは、Install Nowクリックのみです。但しダウンロード後、一旦STM32CubeMXを終了し、再起動時は、下記のように管理者と してインストールを実行する必要がありますので注意してください。

STM32CubeMX v5.2.1.Update
STM32CubeMX v5.2.1.Update。インストールは管理者として実行する必要がある。

続報:STM32CubeIDE

2019年5月8日STマイクロエレクトロニクス(以下ST)公式ブログで無償STM32CubeIDEの続報が掲載されました。STM32マンスリー・アップデート2019年5月号のトップページにも掲載中です。

STM32CubeMXがビルドインされたST初のIDE:STM32CubeIDE内蔵ツール版数と、ライバルIDEに相当するSW4STM32とTrueSTUDIOの今後を予想します。

STM32CubeIDE内蔵ツール版数

STM32CubeIDEにビルドインされたツール版数が下記です。FWは、本ブログ対象STM32F0/F1/G0のみ掲載します。ビルドインSTM32CubeMXの使い勝手は、単独STM32CubeMXツールと同じです。

内蔵ツール 2019年5月16日版数
STM32CubeIDE 1.0.0
STM32CubeMX 5.2.0
STM32F1  FW 1.7.0
STM32F0  FW 1.10.0
STM32G0  FW 1.2.0

STM32CubeIDE起動時に各ツール更新がチェックされるので、起動に多少もたつきを感じます。MicrosoftのC2R:Click to Runに近い機能です。

STM32G0 FW 1.2.0インストールには、STM32CubeMX 5.2.0以上が必要な点は注意が必要です。単独でSTM32CubeMX 5.1.0使用中の方が、FW更新してもSTM32G0 FW 1.2.0の検出すらできません。先ず、STM32CubeMXを 5.2.0へ更新後、再更新チェックでSTM32G0 FW 1.2.0が使えます。

全てがビルドインされたSTM32CubeIDEなら、このような版数による最新版インストールトラブルが回避できるでしょう。

STM32CubeIDEのAdvanced Debug機能

STMCubeIDE you are able to(出典:How to use STM32CubeIDE動画)
STMCubeIDE you are able to(出典:How to use STM32CubeIDE動画)

How to use STM32CubeIDEから抜粋したSTM32CubeIDE新機能が上図です。Advanced DebugのLive Expressions viewやSWV real-time tracing viewは、デバッグがより楽しく容易になる機能だと思います。

STM32CubeIDEライバル、無償AC6)SW4STM32と旧Atollic)TrueSTUDIOの今後

気になるのは、STM32CubeIDEと同様のコードサイズ制限なし無償IDE、AC6社)SW4STM32と旧Atollic社)TrueSTUDIOの2つのIDEが、今後更新され続けるかです。

ブログ内に、SW4STM32とTrueSTUDIO各ユーザに向けた注意書きがあります(Before STM32CubeIDE, What SW4STM32 and TrueSTUDIO Users Must Know章)。ブログでは、どちらのIDEユーザに対しても新しいSTM32CubeIDEへの移行を促しているようです。有償のIARとKeilのIDEに対しては、これまで通りです。

TrueSTUDIOは、既にSTM32G0 FW 1.2.0未対応です(関連投稿:TrueSTUDIOとSTM32CubeMXインストール方法の手順4参照)。SW4STM32は、最新デバイスをフォロー中ですが、近い将来、TrueSTUDIOと同じ運命、つまり、ツール改版への遅れや最新MCUへ対応しない可能性があります。

2017年末にSTに買収されたAtollicのIDE開発力が、新しいST純正STM32CubeIDE開発へ使われたとすると、現行のTrueSTUDIOが最新STM32G0xデバイスに未対応なのも納得がいきます。いわゆるデスコン(Discontinue)の前兆です。

なお、既成SW4STM32プロジェクトやTrueSTUDIOプロジェクトに対しては、STM32CubeIDEマイグレーションツール(UM2579など)がSTM32CubeIDE初期画面に用意されています。既成プロジェクトは、そのままSTM32CubeIDEで開くことはできず、また、一旦マイグレーションすると、元のSW4STM32プロジェクトへは戻せません。

このため、UM2579では、既成プロジェクトをバックアップ後、マイグレーションすることを明記しています。

STM32CubeIDE初期画面のマイグレーションツール(出典:UM2579)
STM32CubeIDE初期画面のマイグレーションツール(出典:UM2579)

STM32CubeIDEの使い勝手は、SW4STM32に近く、しかもAdvanced Debug機能でデバッグも面白くなりそうです。現版STM32CubeIDE 1.0.0は日本語対応がイマイチです。この点が改良されればSW4STM32からのマイグレーションを検討する予定です。

STM32CubeMXのLow-Layer API利用法 (3)

STM32G0x専用テンプレートで使うSTM32CubeMXのLL API利用法第3回(最終回)は、STM32CubeMXのLL API利用設定、NVIC利用時のユーザ追記箇所を示し、最後にLow-Layer API利用法第1回から本稿まで全体をまとめます。
LL API利用法第1回第2回は、リンク先参照。

LL API利用設定

STM32CubeMXでHAL API利用時と異なるのは、Project Manager>Advanced Settingsの赤囲みの部分のみです。デフォルトは全てHALです。これを、HALからLLへ周辺回路毎に変更します。

LL API利用時の設定箇所
LL API利用時の設定箇所。デフォルトはHALなので全てLLへの変更必要。

第2回で説明したように、LLとHALの混在利用は避けた方が無難です。各周辺回路で両者の選択ができますが、HALかLLの二者択一をお勧めします。また、周辺回路追加・変更時は、デフォルトHALです。LL APIアプリケーション開発時は、注意してください。

STM32CubeMX便利機能に各種設定値のPDF出力:File > Generate Reportがありますが、v5.1.0ではLL/HAL設定値は未出力です。

LL API利用の割込み:NVIC利用時のソースコードユーザ追記箇所

LL APIの割込み:NVIC利用時のユーザ追記箇所は、HAL API利用時に比べ多いです。
※HAL API割込み処理のユーザ追記箇所は、関連投稿:STM32CubeMX生成ファイルのユーザ処理追記箇所を参照してください。

第1回で示したAN5110で説明します。Examples_LLサンプルプロジェクト、EXIT_ToggleLedOnIT_Init.iocのNVIC設定が下図です。このプロジェクトは、評価ボードのUserButtonを押すと割込みが発生しLED4がトグル点滅します。NVICのユーザ追記箇所が赤囲みです。

EXIT_ToggleLedOnIT_Init.iocのユーザNVIC設定箇所
EXIT_ToggleLedOnIT_Init.iocのユーザNVIC設定箇所

GENERATE CODEをクリックすると、stm32g0xx_it.cのL149~L166にEXIT4_15_IRQHandler(void)が自動生成されます。
stm32g0xx_it.cのL160のUserButton_Callback()は、ユーザが追記したCallback関数です。
main.hのL71で、このUserButton_Callback(void)は、ユーザが宣言します。
main.cのL209~L212で、UserButton_Callback(void)は、ユーザがCallback関数の中身を記述します。

自動生成されたファイル名(橙色)とユーザ追記位置(緑色)とユーザ追記コード(赤色)
自動生成されたファイル名(橙色)、ユーザ追記位置(緑色)、ユーザ追記コード(赤色)

STM32CubeMXは、IRQハンドラ関数の割込み発生原因:トリガ検出部分を生成するのみです。

ユーザは、Callback関数とその中身を、「/* USER CODE BEGEN… */ ~ /* USER CODE END… */」で囲まれた3ファイル指定場所に追記します。囲まれた範囲は、STM32CubeMXで再度GENERATE CODEをクリックしても上書きされ残ります。

本章は、NVIC利用時のユーザ追記箇所を示しました。これらは、ADCなどの一般的な周辺回路利用時のユーザ追記箇所とは大きく異なります。
※一般的な周辺回路のユーザ追記箇所は、ADCを例に説明します。

STM32CubeMXが生成したソースコードの「どこに、何を、ユーザが追記すべきか」は、生成ソースコード理解が必要です。これには、公式サンプルプロジェクトソースコードの理解が役立ちます。
※これも、ADC例を使って、ソースコード理解方法を説明します。

STM32CubeMXのLow-Layer API利用法:全体まとめ

3回に分けて説明した「STM32G0x専用テンプレートで使うSTM32CubeMXのLL API利用法」全体をまとめます。

初期化処理生成

(第1回)

・STM32CubeMXを使う方法と、高性能小サイズなユーザ自作方法の2つ

・STM32CubeMX生成の初期化処理関数名は、接頭語にMX_が付く

・STM32CubeMXを使うと、無限ループ内処理に集中できる

LLとHALの違い

(第2回)

・LL:HALよりもハードウェアに近く、高速軽量なエキスパート向け

・HAL:ハードウェア抽象化で、STM32MCU間で最大限の移植性を保証

・LLは、HALハンドルレジスタを直接上書きする可能性あり

・LLとHAL混在:同一はもとより異なる周辺回路でも混在は避けた方が無難

STM32CubeMX設定

(第3回:本稿)

・Project ManagerのAdvanced Settingsで全周辺回路をLLに一括変更

・周辺回路追加・変更時、Advanced SettingsデフォルトHALに注意

・NVIC生成ハンドラのCallback関数と中身は、ユーザ作成が必要

これら3分野を把握しておけば、STM32CubeMXのLL APIを安全に利用できると思います。

上記まとめで少し気になるのは、安全側評価で「異なる周辺回路でもLLとHAL混在は避けた方が無難」とした点です。本当に異なる周辺回路で混在利用はできないでしょうか?

周辺回路が異なれば、LLがアクセスするハードウェアも当然異なり、競合は無いハズです。例えば、I2CはHAL API、GPIOはLL API利用でも競合問題はなさそうです。

多分、API利用者が、アプリケーションレベルでレジスタ競合などが無いことを確認できれば、「自己責任で異なる周辺回路なら混在可能」だと思います。但しこれを行うには、LLやHALの深い部分まで解読、競合調査が必要です。

AN5110のExamples_MIXサンプルプロジェクトで示された、HALの一部をLLへ置換え、処理高速化を狙う例に止めた方が良さそうです。

以上、STM32CubeMXのLow-Layer API利用法をまとめました。

LL APIとHAL APIは、トレードオフ

LL APIを使うと、MCUハードウェア性能を活かし、少ない容量で高性能アプリケーション開発ができます。半面、他のSTM32MCUへの移植性はHAL APIに比べ低下します。

LL APIとHAL APIは、トレードオフの関係です。LLかHAL、どちらのAPIでソフトウェア開発するかは、このトレードオフ評価で決めます。

STM32F0/F1両デバイス性能を1MCUでカバーするSTM32G0xは、専用アプリケーション、つまりLL API開発に値するデバイスだと思います。STM32G0xテンプレートは、LL APIを使い専用テンプレートとして開発します。

次回は、全てのSTM32G0xデバイスで実装済みでIoT MCU必須機能、2.5Msps12ビットADCのLow-Layer APIでの使い方を解説します。