SW4STM32アプリケーションのSTM32CubeIDE移設

SW4STM32で開発した2017年9月発売STM32Fxテンプレートと2019年6月発売STM32G0xテンプレートを、STM32MCU最新統合開発環境STM32CubeIDE v1.1.0へ移設しました。

移設は成功し、STマイクロエレクトロニクス最新統合開発環境:STM32CubeIDE v1.1.0(以下、CubeIDE)、STM32CubeMX v5.4.0(以下、CubeMX)、最新ファームウェアと弊社テンプレートを使って、効率的で最新のSTM32MCUプロトタイプ開発、アプリケーション開発ができます。

本稿は、STM32CubeIDE v1.1.0更新と文字化け対策投稿(その1)、(その2)のその3に相当します。説明が重複する箇所は、リンク先を参照してください。

移設成功結果

G0AdcTemplateのSTM32CubeIDE移設成功結果
G0AdcTemplateのSTM32CubeIDE移設成功結果

STM32Fxテンプレートは「ひと手間」、STM32G0xテンプレートは「そのまま」で最新統合開発環境へ移設でき、評価ボードにてテンプレート動作を確認しました。G0AdcTemplateのCubeIDE移設後と評価ボード動作例です。

既にSTM32Fx/G0xテンプレートご購入者様は、本稿の方法で最新STマイクロエレクトロニクス開発環境へ乗換えることができます。

※現状のCubeMX v5.4.0でコード生成後、CubeIDE v1.1.0の日本語コメントは文字化けしますので注意してください(詳細は、投稿その2参照)。

最新開発環境ファームウェアとアプリケーション開発時ファームウェア

最新開発環境ファームウェアとテンプレート開発時ファームウェア
最新開発環境ファームウェアとテンプレート開発時ファームウェア

投稿その2で示したように、MCU開発ソフトウェア(=アプリケーション)に最も影響を与えるのは、ファームウェア更新です。

STM32FxテンプレートのF0用ファームウェアFW_F0は、開発当時のv1.8.0からv1.11.0へ、F1用ファームウェアはv1.4.0からv1.8.0へ、G0用ファームウェアFW_G0はv1.2.0からv1.3.0へそれぞれ更新されています。
※STM32G4テンプレートは、これから開発着手しますので最新のv.1.1.0のままです。

次章3から5章までを使って、STM32F1テンプレート:F1BaseboardTemplateを例に、当時の開発環境から最新開発環境への移設作業、ファームウェア変更、トラブルシューティングを「詳細に説明」します。但し、結果として行う処理は、6章まとめに示す簡単なものです。途中の章は読み飛ばしても構いません。

開発済みMCUアプリケーションを暫くたってから更新、または本稿のようにIDE自体が変わり最新開発環境へ移設することはよくあります。F1BaseboardTemplateをお持ちでない方も、(手前みそですが)次章から5章の内容は参考になると思います。

ファームウェア更新でコンパイルエラー発生:3章

先ず、ファームウェア起因のコンパイルエラーが発生するまでを示します。

1.SW4STM32で開発したF1BaseboardTemplateプロジェクトをCubeIDEへインポートします(インポート方法は、投稿その1-3章参照)。インポートソースコードの日本語コメントに文字化けが発生しますので、その1で示したShift-JISからUTF-8へのエンコード変換で解決します。

2.インポート済みのCubeMXプロジェクトファイルを、CubeIDEプラグイン版CubeMXで開き、Project Managerタブをクリックし、Toolchain/IDEがSTM32CubeIDEであることを確認します。インポートIDE変換が成功していれば、SW4STM32から自動的にSTM32CubeIDEへ変わっているハズです。

SW4STM32プロジェクトインポート後、プラグイン版STM32CubeMXで開いたプロジェクトファイル
SW4STM32プロジェクトインポート後、プラグイン版STM32CubeMXで開いたプロジェクトファイル

ファームウェアは、最新版STM32Cube FW_F1 V1.8.0になっています。そのままProject>Generate Codeをクリックし、コード生成を実行します。

3.CubeIDEへ戻ると、(デフォルトの自動コンパイル設定だと)Lcd.cなど数か所に赤下線のコンパイルエラーが発生します。

ファームウェア起因のコンパイルエラー(赤下線)
ファームウェア起因のコンパイルエラー(赤下線)

例えば、L236のLCD_EN_Pinは、CubeMXでGPIO_PIN_8をUser Label付けしたものです。LCD_EN_Pinへカーソルを持っていき、F3をクリックすると、定義ファイルmain.hのL103へ飛び、User Label付けは問題ないことが判ります。この段階では、コンパイルエラー原因は不明です。

4.コンパイルエラーがファームウェア起因かを確認するため、ファームウェアだけをFW_F1 V1.8.0からF1BaseboardTemplate 開発当時のFW_F1 V1.4.0へ戻します。但し、CubeIDE「プラグイン版CubeMX」は、ファームウェアを旧版へ戻す機能がありません。そこで、「スタンドアロン版CubeMX」を使ってファームウェアをFW_F1 V1.4.0へ戻し、再度コード生成を行うと、コンパイルエラーは発生しません。
※スタンドアロン版CubeMXでファームウェアを元の版数へ戻す方法は、4章で説明します。

以上の作業で、コンパイルエラー原因は、ファームウェア起因であることが判りました。

STM32CubeMXコード生成ファームウェア変更方法:4章

トラブルシューティングの前に、CubeMXでコード生成ファームウェア版数を変える方法を示します。CubeMXは、旧版ファームウェアをRepositoryフォルダへ自動保存し、いつでも旧版へ戻せる準備をしています。

1.スタンドアロン版CubeMXのProject Managerクリックで表示されるダイアログ一番下のUse Default Firmware Locationの☑を外し、BrowseクリックでRepositoryフォルダ内の旧版ファームウェア:STM32Cube_FW_V1.4.0を選択します。

スタンドアロン版STM32CubeMXでファームウェア版数を変える方法
スタンドアロン版STM32CubeMXでファームウェア版数を変える方法

2.そのままCubeMXでコード生成を実行すると、ファームウェア版数のみを変えたソースコードが生成されます。

※CubeIDEプラグイン版CubeMX(2つ前の図)は、Use Default Firmware Location自体有りません。つまり、最新ファームウェアでのみコード生成が可能です。
※CubeMXのGenerate Reportは、コード生成時の各種パラメタをPDF形式で出力する優れた機能です。しかし、肝心のコード生成ファームウェア版数が現状では出力されません。PDF出力へ手動で使用ファームウェア版数を追記することをお勧めします。

トラブルシューティング:5章

3章コンパイルエラー発生後、つまり最新ファームウェアFW_F1 V1.8.0でのコード生成後からトラブルシューティングします。

1.CubeIDEのエラーメッセージは、Symbol ‘LCD_EN_Pin’ could not be resolvedです。main.hで定義済みなので、なぜresolveできないのか不可解です。

2.そこで、Lcd.cの#include関連を見ると、#include “UserDefine.h”はあります。
※弊社テンプレートは、UserDefine.hでツール生成以外の全てのユーザ追加定義を記述し、全ソースファイルへincludeする方式を用いています。
※一方、CubeIDEは、CubeMXで生成するmain.cソースファイル1つへ、全ての制御を記述する方式を用いています。小規模なサンプルプロジェクトなどでは、解り易い方法です。
※但し、規模が大きくなると、ソースファイルを機能毎に分離し、ファイル単位の流用性やメンテナンス性を上げたくなり、弊社は、このファイル分離方法をテンプレートに採用中です。

3.UserDefine.hに、#include “main.h”の1行を追加します。

UserDefine.hへ#include "main.h" 追加
UserDefine.hへ#include “main.h” 追加

4.Clear Project後、Build Projectでコンパイルエラーは解消し、コンパイル成功します。評価ボード:STM32F103RBでF1BaseboardTemplate の最新開発環境での正常動作確認ができます。

最新ファームウェアは、全てのユーザ追加ソースファイルに、#include “main.h”が必須なことがトラブル原因でした。

最新開発環境への移設まとめ:6章

2017年9月にSW4STM32で開発完了したSTM32Fxテンプレートは、UserDefine.hに、#include “main.h”追記で、2019年11月STM32MCU最新開発環境:STM32CubeIDE v1.1.0、STM32CubeMX v5.4.0、STM32Cube FW_F1 V1.8.0/FW_F0 V1.11.0へ移設できます。

2019年6月にSW4STM32で開発完了したSTM32G0xテンプレートは、なにもせずに、2019年11月最新開発環境:STM32CubeIDE v1.1.0、STM32CubeMX v5.4.0、STM32Cube FW_G0 V1.3.0へ移設できます。
※STM32G0xテンプレートは、初めからUserDefine.hに、#include main.hが追記済みです。

Build Analyzer

SW4STM32からCubeIDEへ移設後、最初に目に付くIDE画面の差分は、ビルド成功時、右下表示のBuild Analyzerだと思います。

STM32CubeIDEのBuild Analyzer
STM32CubeIDEのBuild Analyzer

最初の図で示したG0AdcTemplate移設後のCubeIDE Build Analyzerを示します。RAM、FLASH使用率が一目で解ります。その他のIDE画面や操作は、旧SW4STM32と殆ど同じです。

Serial Console

CubeIDEは、Serial Console画面を持っています。従来環境では別途必要であったVirtual COM Port (VCP)用のTera Termなどのツールが不要となり、IDEだけでVCP入出力が確認できます。高まるVCP重要性が最新IDEへ反映されたと思います(関連投稿:STLINK-V3の4章)。

但し、バックグラウンドが、Tera Termの黒からSerial Console画面では白になったため、テンプレートで用いたVCP出力文字色を、デフォルトの白から黒へ変更した方が見易いです。この色変更後のSerial Consoleが下図右側です。

TeraTerm画面とSTM32CubeIDEのSerial Console画面
TeraTerm画面とSTM32CubeIDEのSerial Console画面

最新開発環境移設の課題と対策、テンプレート改版予定

現状のCubeIDE v1.1.0は、コード生成後、日本語コメントに文字化けが発生します。また、エディタタブ幅が2のまま変更できません。これら以外にも細かな不具合があります。このままでは、筆者には使いにくいIDEです。一方、Build AnalyzerやSerial Consoleは、とても役立ちます。
CubeIDEプラグイン版CubeMX v5.4.0は、Repository旧ファームウェアへの変更機能が無く、最新ファームウェアのみ利用可能です。

これら移設課題に対して、投稿その1から本稿で対策を示しました。

現状は、従来SW4STM32からCubeIDEへの「IDE移設過渡期」です。筆者は暫く両IDEを併用するつもりです。そして、新環境の使いにくい箇所が解消された時点でCubeIDEへ完全移設し、同時に汎用MCU第2位、シェア20%超のSTM32MCU向けテンプレートとしてSTM32FxテンプレートとSTM32G0xテンプレートを、本稿変更などを加え最新開発環境対応へ全面改版する予定です。

既に弊社テンプレートをお持ちの方や全面改版を待てない方は、まとめ6章の方法で移設可能です。但し、投稿その2で示した多くのリスクがありますのでお勧めはしません、自己責任で行ってください。

なお、新開発のSTM32G4テンプレートは、初めから最新CubeIDE、CubeMXで開発着手します。

*  *  *

STマイクロエレクトロニクスのSTM32CubeIDE v1.1.0改版により、旧SW4STM32開発アプリケーションを新環境へ移設する連続3回の投稿、いかがでしたでしょうか? 詳細説明がリンク先となり、筆者にしては長文投稿でしたので、解りづらかったかもしれません😌。

IoTによりMCU開発環境は、より急ピッチで変わります。最新デバイスと最新API利用が、その時点で最も効率的で優れたMCUアプリケーション開発手段です。環境急変にも柔軟対応できる開発者が求められます。

最新開発環境に上記のような課題が多少あっても、従来SW4STM32開発済みアプリケーションの最新STM32CubeIDE移設は、6章で示した1行追記のみで成功しました。

但し、顧客や管理者の方には、開発環境更新、移設の危うさや開発者の心理的負担、何よりもそれらへの対応時間は、あまり表に出てこない部分、また移設してみて初めて判る部分で理解されづらいものです。

本稿がMCUアプリケーション顧客、管理者、開発者の方々のご参考になれば幸いです。

P.S:2019年11月12日、2か月遅れでWindows 10 1909配布が始まりました。年2回のWindows 10大型更新トラブル話は多数あります。MCU開発環境は、年2回どころか度々更新されます。開発者は、その度にトラブル対処をしているのです👍。ちなみに本稿は、全てWindows 10 1903での結果です。

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習得に最適です。

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

続報: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からのマイグレーションを検討する予定です。

STM32G0xのLPUART利用法

STM32G0xデバイスは、従来からあるSTM32F0/F1デバイス通信機能USARTに、LPUART(Low Power UART)が新たに加わりました。本稿は、このSTM32G0xのLPUART利用法を解説します。

LPUARTとUSART

オンライントレーニング資料:STM32G0 – USARTのP26にLPUARTとUSARTの機能差分があります。

LPUARTとUSART差分(出典:STM32G0オンライントレーニング資料)
LPUARTとUSARTの差分(説明のため着色しています。出典:STM32G0オンライントレーニング資料)

USART1/2からIrDA:赤外線とLIN:車載通信機能を除いたサブセット版がLPUARTで、USART3/4より8バイトFIFO付きで高機能です。データシート:DS12232 Rev 2から抜粋した各消費電流が下記です。

LPUARTとUSART消費電流(出典:STM32G071xデータシートRev2)
LPUARTとUSART消費電流(出典:STM32G071xデータシートRev2)

LPUARTは、USART1/2とUSART3/4の中間、USART2.5/3.5が名前として適当かもしれません。API名を考慮し、USART1/2よりもLow Powerという特徴のLPUARTにしたのでしょう。

LPUARTサンプルプロジェクトは1個

前稿STM32G0xのADC利用法STM32G0xのADC利用法で示したように、LPUARTの実践的使い方習得には、AN5110記載のLPUARTサンプルプロジェクト理解が近道です。

しかし、現状の「LPUART」サンプルプロジェクトは、Examples_LLにあるLPUART_WakeUpFromStopの1個のみ、しかも、STM32CubeMXで生成できません(STM32G0x v1.1.0、STM32CubeMX v5.1.0)。
※HAL APIを使うExampleにも、LPUARTサンプルプロジェクトは現状なしです。
※4月末リリースSTM32G0x v1.2.0、STM32CubeMX v5.2.0でも状況は同じです。

一方、STM32CubeMXで生成できるLL API利用「USART」サンプルプロジェクトは多数あります。サンプルプロジェクト流用や活用で自分のソフトウェアを開発する場合、このような需要と供給のミスマッチは良くあります。

このミスマッチ対処方法を以下に示します。

供給USARTサンプルプロジェクトから需要LPUARTプロジェクト作成

初めに示したように、LPUARTはUSART1のサブセット版です。PCとのVirtual COMポート利用なら機能差はありません。従って、以下の手順でUSARTサンプルプロジェクからLPUARTプロジェクトを作成します。

USARTサンプルプロジェクからLPUART プロジェクト作成手順
USARTサンプルプロジェクからLPUART プロジェクト作成手順。簡単な変換作業で新プロジェクト作成ができる。

STM32CubeMXのLow-Layer API利用法 (1)で示したAPIユーザマニュアル:UM2319を見ると、ユーザソースコードAPIのUSART部分をLPUARTに変更すれば、API変換ができることも解ります。

この手順の良いところは、2と3が、簡単にできることです。

STM32CubeMXで生成できるサンプルプロジェクさえあれば、2と3は簡単で、しかもミスなくできます。つまり、サンプルプロジェク活用・流用がより簡単・正確にできます。筆者が、AN5110記載サンプルプロジェクトの中で、STM32CubeMX生成アイコン付きにこだわる理由がこれです。

1. USART_Comminication_Tx_Initサンプルプロジェクト動作確認

STM32CubeMXでUSART_Comminication_Tx_InitをSW4STM32用に生成します。評価ボードCN10#21とJP6のRX、CN10#33とJP6のTXを配線します。起動後USER BOTTONを押すとHyper Terminal(Tera Term)にメッセージが出力されLD4が点灯します。

※STM32CubeMXのSW4STM32用の使い方は、前稿ADC利用法のADC_SingleConversion_TriggerSW_InitのSW4STM32へのインポートの章を参照ください。

USART_Comminication_Tx_Initサンプルプロジェクト動作確認ができました。

USART_Comminication_Tx_Initサンプルプロジェクト実行結果
USART_Comminication_Tx_Initサンプルプロジェクト実行結果

2. STM32CubeMXでUSARTをLPUARTへ変更しコード生成

STM32CubeMXのPinout viewで、USART1をMode: Disable、LPUARTをMode: Asynchronous、115200bps/8Bits Word Lengthに設定します。LPUART1はProject Manager>Advanced SettingsでデフォルトのHALからLLへ変更します。GENERATE CODEでコード生成します。

STM32CubeMXでUSART1をLPUARTへ変更しコード生成
STM32CubeMXでUSART1をLPUARTへ変更しコード生成

3. SW4STM32でユーザコードをUSART APIからLPUART APIへ変更

生成されたSW4STM32の/* USER CODE BEGIN … */~/* USER CODE END … */の間のユーザコードは、コード再生成してもそのまま上書きされます。

従って、ソースコードで旧USART APIが残っているのは、この上書きユーザコード部分だけです。これ以外は、STM32CubeMXがコード生成時にLPUART APIへ変更済みです。

USART_Comminication_Tx_Initの場合は、下図赤線部分などです。これを青線のLPUART APIへ変更します。SW4STM32のFind/Replace機能を使うと、変更がミスなく簡単にできます。

ユーザコードのUSART API(赤線)からLPUART API(青線)へ変更
ユーザコードのUSART API(赤線)からLPUART API(青線)へ変更

4. LPUART変更後のプロジェクト動作確認

USARTからLPUARTへ変更したので、評価ボードCN10#16とJP6のRX、CN10#18とJP6のTXを配線します。起動後USER BOTTONを押すとHyper Terminal(Tera Term)にメッセージが出力されLD4が点灯します。LPUART変更プロジェクトの動作確認が出来ました。
※出力メッセージは、“LPUART project creation …”に変更しました。

作成したLPUARTプロジェクト実行結果
作成したLPUARTプロジェクト実行結果

手順1~4で作成したLPUARTプロジェクトから、LPUARTは、USARTと同じ使い方ができ、40%低電力(Table 33の数値比較)なサブセット版であることが解りました。

STM32G0xデバイスの新通信機能としてLPUARTを積極的に活用したいと思います。

※本章は、LPUARTの細かな使い方は、ソースコードを読めば解るという前提で説明しています。ソースコードの具体的な読み方は、前稿:STM32G0xのADC利用法のmain.cソースコードの読み方の章などを参考にしてください。

STM32G0xの実践的LPUART利用法まとめ

実践的に周辺回路利用法を習得するには、サンプルプロジェクト理解が近道です。

現状のSTM32G0x v1.1.0、STM32CubeMX v5.1.0は、LPUART習得に使えるサンプルプロジェクはLPUART_WakeUpFromStop の1個のみで、STM32CubeMXを使って生成はできません。
※4月末リリースSTM32G0x v1.2.0、STM32CubeMX v5.2.0でも状況は同じです。

一方、現状でもSTM32CubeMXで生成できるUSARTサンプルプロジェクトは多数あるので、これらを利用し、求めるLPUARTプロジェクトを作成する簡単でミスの少ない手順を示しました。

作成したLPUARTプロジェクトから、LPUARTは、USART1/2と同じ使い方で40%低消費電力な新通信機能であることが解りました。

速報:STM32CubeIDE

STマイクロエレクトロニクス(以下STM)公式ブログで、中国で開かれたSTM32 SummitにおいてSW4STM32とTrueSTUDIO、STM32CubeMXを統合した新しい統合開発環境:STM32CubeIDEを発表しました。

STM公式ブログ:STM32CubeIDE Makes a Massive Appearance in China。STM32CubeIDEは、既にSTMサイトよりダウンロード可能です。

STM32CubeIDE(出典:STMサイト)
STM32CubeIDE(出典:STMサイト)

STM32CubeIDEの主な特徴

  • EclipseベースIDE
  • マルチOS対応(Windows、Linux、macOS)
  • SW4STM32とTrueSTUDIOプロジェクトのインポート機能

STM32CubeIDE

早速STM32CubeIDEをインストールしてみました。所感は、STMが買収したAtollic® のTrueSTUDIOというよりむしろ、SW4STM32へSTM32CubeMXをプラグインしたような画面です。

STM32CubeIDE画面
STM32CubeIDE画面。SW4STM32へSTM32CubeMXをプラグインした画面に近い。

STM32CubeIDE v1.0.0は、最新版STM32CubeMX v5.2.0とSTM32G0 FW v1.2.0/STM32F0 FW v1.10.0 /STM32F1 FW v1.7.0など開発に必要となるツールもパッケージとしてインストールできます。従来の個別インストールとツールアップデートが面倒だと感じる方には、朗報になるでしょう。

現在STM32G0x専用テンプレート開発は、SW4STM32で継続中です。しかし、販売時にはこのSW32CubeIDEでリリースする方が、SW4STM32からのマイグレーションガイドUM2579も付属済みですので良いかもしれません。

マイグレーション操作は簡単です。販売中のSTM32Fxテンプレートへもこのマイグレーションで対応できると思います。

STM32MCU開発環境の場合、IDE、STM32CubeMX、デバイス毎のFW、これら3つのバージョンがともに最新でないと、上手く動作しないことや不具合発生はありえます(例えば、STM32CubeMX v5.1.0では最新のSTM32G0 FW v1.2.0がインストールできないなど)。

STM32CubeIDEの出現で、バージョン管理が容易になれば良いと思います。以上、速報をお伝えしました。
動画がコチラで見られます。

STM32G0xのADC利用法

STM32G0xのラインナップは、Value/Access/Access&Encryptionの3製品です。製品により内蔵周辺回路が異なりますが全製品共通回路が、2.5MSPS 12bit ADCです。本稿は、このSTM32G0xのADC利用法を解説します。

STM32G0xのADC資料一覧

時短に役立つ資料を表1にリストアップしました。

表1 STM32G0xのADC資料一覧(2019年4月現在)
資料名 概要
STM32G0 – ADC STM32G0のADCトレーニング資料。全20ページの内容は判り易く良書。
AN5110 STM32CubeMXを使い生成可能なSTM32G0x公式サンプルプロジェクト一覧表。
HAL API 4個、LL API 8個、HALとLL混在1個のADC公式STM32CubeMXプロジェクト掲載アプリケーションノート。
AN2834 全STM32MCUのADCを精度よく使う方法アプリケーションノート。全49ページ。

3資料と数は少ないですが、ADC内容は盛り沢山です。

STM32G0xのADC公式サンプルプロジェクトAN5110とオンライントレーニング資料を中心に、AN2834も参照するアプローチで解説します。

STM32G0とSTM32F0のADC差

STM32G0は最新IoT Edge MCU、STM32F0は普通の汎用MCUで、どちらもMainstream(≒汎用)MCUですが内蔵12bit ADCは異なります。トレーニング資料P18に特徴の比較があります。

STM32G0とSTM32F0のADC差
STM32G0とSTM32F0のADC差分(※説明のため着色しています。出典:ADCオンライントレーニング資料)

先ず、Conversion:ADC変換時間が0.4usと高速になった点。STM32G0xはMax. 64MHz動作(F0は48MHz)ですが2倍以上高速です。次に、Analog watchdog対応数が増え、バッテリー動作に備え低圧側に動作電圧が広がっています。ハードウェアオーバーサンプリングと高度なシーケンサーが新しい機能です。

勿論、普通のSTM32F0と同じADC制御もできますが、これら新機能を使いこなし、コアMCU負担を減らすように制御すると上手い使い方と言えるでしょう。

トレーニング資料は英文ですが、ポイントを抑えた非常に良くできた資料です。筆者の下手な解説より資料を読んで頂くと、STM32G0xのADCの使い方が判ると思います。

実践的ADCの使い方習得

トレーニング資料が一番効果的ですが、本稿では、開発中のSTM32G0x専用テンプレート動作確認評価ボードNucleo-G071RBで動作するAN5110のExamples_LL掲載サンプルプロジェクト(MXアイコン付きの下記8個)を使って、実践的にLL APIによるADCの使い方を習得します。

なぜLL APIを使うのかは、STM32G0x専用テンプレート開発全体像俯瞰、また、全般的なLL API利用法はSTM32CubeMXのLow-Layer API利用法 (1)~(3)を参照してください。

LL APIを使ったADCプロジェクト一覧(出典:AN5110)
LL APIを使ったADCプロジェクト一覧(出典:AN5110)

Descriptionを読むと、大別して4種類のサンプルプロジェクトがあることが解ります。AN5110は、Examples_LLフォルダを名前順に表示したもので、MXアイコン付き8個を制御別に解り易く並び変えたものが表2です。

表2 MXアイコン付き8プロジェクトを制御別に並び換える
制御 基本プロジェクト名(_Init省略) 応用プロジェクト名(_Init省略)
1 ADC SingleConversion TriggerSW

ADC SingleConversion TriggerSW DMA

ADC SingleConversion TriggerSW IT

ADC SingleConversion TriggerTimer DMA

2 ADC ContinuousConversion TriggerSW ADC ContinuousConversion TriggerSW LowPower
3 ADC Oversampling なし
4 ADC  AnalogWatchdog なし

4種類を整理すると、最も基本のADCプロジェクトが1です。

1のSingleConversion_TriggerSoftwareは、ソフトウェアトリガでADCを開始し、ポーリングでデータ取得、データ転送にDMA転送、割込みなどの応用例があります。タイマをトリガにDMA転送の発展例もあります。ADC処理回数は1回です。

2のContinuousConversionは、1のADC処理回数の連続形で、LowPowerでの応用例があります。
※1と2のConversion Mode説明が、トレーニング資料P11にあります。

3のOversamplingは、新機能のサンプルプロジェクトです。
※Hardware Oversampling説明が、トレーニング資料P12にあります。

4のAnalogWatchdogも、新機能の3個AnalogWatchdogを使ったサンプルプロジェクトです。
※AnalogWatchdog説明が、トレーニング資料P13にあります。

いかがですか? ADCサンプルプロジェクトだけでもおなか一杯で、しかも、これでもADCの豊富な機能の一部抜粋です。さらに、省電力動作や、実際に接続するアナログセンサ出力への対応、加えてAN2834記載の変換精度向上なども考慮すると、ADCだけでも上手く使うのはかなりのスキルや経験が必要なのが分ります。

こういう時は、最も基本のADC_SingleConversion_TriggerSWを先ず理解し、プライオリティに応じて順次ステップアップするのが常套手段です。プライオリティ無しの手当たり次第の理解は、消化不良を起こします😂。
※なおSTM32G0x専用テンプレートは、このADC_SingleConversion_TriggerSWを実装予定です。

ADC_SingleConversion_TriggerSW_InitのSW4STM32インポート

※統合開発環境SW4STM32とコード生成ツールSTM32CubeMXは、Windowsパソコンへインストール済みとします。インストール方法は、関連投稿を参照してください。

先ず、ADC_SingleConversion_TriggerSW_Initを使って、STM32G0xのADC使い方を説明します。

サンプルプロジェクト:ADC_SingleConversion_TriggerSW_InitをIDE:SW4STM32へインポートする方法は色々あります。簡単な方法が下記です。

1.STM32CubeMXをインストールしたPCの          、
STM32Cube\Repository\STM32Cube_FW_G0_V1.1.0\Projects\NUCLEO-G071RB\Examples_LL\ADC\ADC_SingleConversion_TriggerSW_Initフォルダを開き、ADC_SingleConversion_TriggerSW_Init.iocをクリックすると、STM32CubeMXが起動します。

2.起動したSTM32CubeMXのProject Manager>Projectで、Toolchain/IDEをSW4STM32へ変えます。Advanced SettingsタブでADCや周辺回路のLL利用を確認しておきます。

3.GENERATE CODEをクリックし、表示されるダイアログでOpen Projectをクリックすると、SW4STM32が起動します。ワークスペースを入力後、下記Successfully imported the project…が表示されればインポート完了です。

SW2STM32インポート成功時ダイアログ
SW2STM32インポート成功時ダイアログ

4.SW4STM32でreadme.txtを開くとインポートしたプロジェクト内容が解ります。評価ボード:Nucleo-G071RBのPA.04、またはArduinoコネクタCN8 A2接続の、0から3.3Vまでのアナログ入力電圧を、ソフトウェアトリガでADCスタートし、ADC完了ポーリングでデータ変換完了を確認するのがこのプロジェクトです。
評価ボード単独でもアナログ入力電圧は不定ですが、動作可能です。

サンプルプロジェクトmain.cソースコードの読み方

初めてmain.cを見た方は、ソースコード行数が多いのでビックリするかもしれません。しかし、以下のSTM32CubeMX(以下MX)生成ソースコードの構造を押さえて読めば簡単です。

  • 自動生成ソースコードは、ユーザコード/コメントを追記する部分と、MX生成部分の2つからなる
  • ユーザコード/コメント部分は、再度MXで新たにコード生成しても、上書きされそのまま残る
  • コーザコード/コメント部分は、/* USER CODE BEGIN… */ ~ /* USER CODE END… */で囲まれている

従って、サンプルプロジェクトのユーザコード/コメント部分は、「ユーザの代わりにSTMが作成したコードと明示的に説明を加えた箇所」です。注意して読みましょう。それ以外のMX生成部分は、コメントを眺める程度で十分です。

サンプルプロジェクトmain.c解説

ソースコードが読めると、サンプルプロジェクト内の重要関数も解ります。

ADC_SingleConversion_TriggerSW_Initの場合は、L121のConversionStartPoll_ADC_GrpRegular(void)とL120のActivate_ADC(void)が重要関数です。

これら以外のLED点滅関数(L122~124)とMX生成関数(L116~118)は、他のプロジェクトでも使える、いわばLL API開発時の汎用関数です。

ADC_SingleConversion_TriggerSW_Initのmain.c
ADC_SingleConversion_TriggerSW_Initのmain.c解説。重要関数と汎用関数に分けて読む。

L121へカーソルを移動し、F3を押すとConversionStartPoll_ADC_GrpRegular(void)の定義場所へ簡単に移動できます。

ConversionStartPoll_ADC_GrpRegular()
重要関数 ConversionStartPoll_ADC_GrpRegular()本体

ConversionStartPoll_ADC_GrpRegular(void)は、本来ユーザが作成する関数を、STMが代わりに作成した信頼性が高い関数です。ユーザが利用しない手はありません。ライセンス上も問題なく使えます。

しかも、STMが明示的に付けたコメントがありますので、自分の開発ソースコードへ利用・活用できるようにコメントを読んで内容を理解しておきましょう。内容理解には、readme.txtやトレーニング資料も役立ちます。

同様に、もう1つの重要関数:Activate_ADC(void)も利用・活用できるように理解しましょう。

以上のように重要関数を理解すると、サンプルプロジェクト:ADC_SingleConversion_TriggerSW_Initが示した処理内容とその中から利用できる関数を、自分が開発するプロジェクトの代替関数(≒一種の部品)として使えるようになります。

公式サンプルプロジェクトは、この「高信頼部品の宝庫」です。部品を利用すれば、開発速度が上がります。
また、公式サンプルプロジェクトは、「周辺回路利用時の作法」も明示STMコメントが示しています。

ユーザは、どこに、何を、追記すべきか

前章は、ADC_SingleConversion_TriggerSW_Initを使って、サンプルプロジェクトソースコード:main.cの理解方法を示しました。

一般的な周辺回路のユーザ追記箇所は、前章のように主としてmain.cの無限ループです。周辺回路の初期設定(前章で言えばMX_ADC1_Init(void)やMX_GPIO_Init(void))は、STM32CubeMXが担うからです。

サンプルプロジェクトには、周辺回路に割込みやDMAを利用した例もあります。

この場合は、STM32CubeMXのLow-Layer API利用法 (3)で示した割込みNVIC利用時のユーザ追記箇所と、本稿で示した周辺回路ユーザ追記箇所の2つに分けてソースコードを理解します。

STM32CubeMXが自動生成したソースコードの、「どこに、何を、ユーザが追記すべきか」は、本章で示した方法でサンプルプロジェクトを理解すれば、自然に解るようになります。
逆に、「どこに、何を、追記すべきか」かが解らないなら、まだサンプルプロジェクト理解が足りないと言えます。

公式サンプルプロジェクトのソースコードを作成するのは、STM32CubeMXと「ユーザ代替のSTMプロフェッショナル」です。両者の役割、作成部分やソースコード構造を理解するのがユーザ開発の第一歩です。

ここでは、表2の中で最も基本のADC_SingleConversion_TriggerSWサンプルプロジェクトを使って、STM32G0xのADC利用法を解説しました。

ADCサンプルプロジェクトは他にも多数あります。自分の開発プライオリティに応じて、他プロジェクトも同様に理解し、ステップアップすれば良いでしょう。

STM32G0x専用テンプレートの目的

MCUソフトウェア開発は、0から着手するのではなく、コード生成ツール:STM32CubeMX活用や前章で示した公式サンプルプロジェクトの部品利用・活用で、効率的に早く開発する、いわゆるプロトタイプ開発が主流です。また、プロトタイプ開発をしないと、競合他社とのビジネスには不利です。

プロトタイプ開発は、開発スピードが要求されます。何がしかの動作確認済みテンプレート(ひな形)と評価ボード、詳しい説明資料があれば、開発着手時のつまずきや手間が省け、より検討すべき項目に時間が割けます。
このテンプレートが、弊社汎用マイコンテンプレートです。

本稿のSTM32G0x専用テンプレートは、新しいEdge MCU「STM32G0xシリーズ専用」テンプレートで、STM32MCUで汎用性がある上記テンプレートとは異なりますが、目的や役割は汎用と同じです。

関連投稿:STM32G0x専用Edge MCUテンプレート開発

STM32G0x専用テンプレートには、本稿で示したADC重要関数や、USB経由のADC変換データパソコン出力、パソコンからの評価ボードLED点滅制御など、STM32G0x開発着手時に最低限必要な機能や部品をあらかじめテンプレートに実装済みです。

STM32G0x専用テンプレートをサンプルプロジェクトとの差分で説明すると、複数サンプルプロジェクトが実装済みで、プロトタイプ開発着手のレベルにより近いプロジェクト、これがテンプレートとも言えます。また、各種サンプルプロジェクト追加や削除が簡単なのも特徴です。

テンプレートのソースコードには、日本語コメントを豊富に付加し、初心・中級開発者が理解できるよう詳細な解説資料付きで提供します。

STM32G0x専用テンプレートを利用すると、STM32G0xプロトタイプ開発を即座に始められます。

STM32G0x専用テンプレートは、近日中に発売予定です。

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

STM32G0x専用テンプレートで使うSTM32CubeMXのLL API利用法第2回は、LL APIとHAL APIの違いを説明します。
専用テンプレートはLL、汎用テンプレートはHALを使う理由がお判りになると思います。

LL(Low-Layer)とHAL(Hardware Abstraction Layer)相対比較

第1回で示したLL API関連資料一覧のUM2319の最初のページに、LLとHALの定義が示されています。

・LL:HALよりもハードウェアに近く、高速で軽量なエキスパート向けレイヤー
・HAL:ハードウェア抽象化で、STM32MCU間で最大限の移植性を保証するレイヤー

MCUハードウェアに依存するLLは、高速・軽量ですが移植性が低いので、LL APIを利用するソフトウェア(=アプリケーション)はそのMCU専用になります。一方、HALはMCU移植性が高いため、HAL API利用アプリケーションはSTM32MCU間で汎用的に使えます。

HALの方が現代的で少ないユーザ記述でアプリケーション開発ができ、さらに汎用なので開発労力が無駄にならない利点があります。しかし、HALが隠蔽している制御の分Flash(ROM)やRAM容量が必要で、LLに比べ低速です。モーター制御など高速処理が必要な部分にはLLの方が向いているかもしれません。

以前の投稿STM32CubeMXの使い方で示した、HAL APIとLL API相対比較表を再掲します。

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

専用テンプレートと汎用テンプレート

LL APIの利点は、ハードウェア性能を活かし少ない容量で高性能アプリケーション開発ができる点です。これは、小Flashで高性能なSTM32G0xデバイスに最適と言えるでしょう。

現状はSTM32G0xが「単独デバイス」でSTM32F0/F1両方のMCU性能をカバーしているので「専用テンプレートが最適」だと言えます。しかし、「STM32G0xシリーズに更に高性能なSTM32G1xデバイス」が発売されれば、移植性が高いHALでSTM32G0xソフトウェア開発を行う方が良くなる可能性はあります。

但しこの場合には、HAL API利用の販売中汎用STM32FxテンプレートをSTM32G0xデバイスへ適用すれば済みます。汎用性を示すこの適用例は、近く投稿する予定です。

特定ハードウェア性能を活かす専用アプリケーションが、少ないROM/RAM容量でも開発できるLL APIメリットを示すデバイス例としてSTM32G0xを選び、専用テンプレートを開発中です。

LL APIとHAL APIのアプリケーションサイズ実例比較

LL API利用時、容量がHAL APIに比べどの程度小さくなるかを実例で示します。

これも前の投稿STM32CubeMXの使い方で示したように、一般的にはLLの方がHAL比60~80%小さくなると言われます。

実例に評価ボードNucle-G071RBに処理は何もせず、64MHz動作のみをLL APIとHAL APIだけを変えてビルドした結果が下記です(SW4STM32 v2.8.1、STM32CubeMX v5.1.0、STM32G0 v1.1.0)。

  text data bss 使用容量 容量比(%)
LL API 3120 12 1564 4696 59
HAL API 9680 20 1708 11408 100

LL API利用の方が 59%小さく実現できることが判ります。

LL APIとHAL API混合利用時の注意点

AN5110には、LLとHAL両方を混在させた公式サンプルプロジェクトのExamples_MIXがNucleo-G071RBでも9例と少ないながら掲載されています。

LLとHAL混在利用の公式サンプルプロジェクト(出典:AN5110)
LLとHAL混在利用の公式サンプルプロジェクト(出典:AN5110)

LLとHALを混在利用時は、色々な注意点があります。UM2319の5章に詳細がありますが、一部抜粋します。

・同じ周辺回路をHALとLLで混在制御するのは避ける
・LLはHALがハンドルしているレジスタを上書きすることがあるので注意

また、UM2303の2章にLLとHALの示すアーキテクチャが示されています。

STM32CubeG0 Firmware Architecture(出典:UM2303)
STM32CubeG0 Firmware Architecture(※説明のため着色しています。出典:UM2303)

つまり、上層HALが下層LLを利用する場合がある訳です。LLは、HALがどのように周辺回路を制御しているかを知ることなく直接ハードウェアレジスタにアクセスします。混在時はレジスタ競合などの詳細な注意がAPI利用者側で必要です。

Nucleo-G071RB 利用時LLとHAL混在利用は、Examples_MIXの9例を除いては避けた方が良さそうです。
BSP(Board Support Package)も、同じ理由でSTM32G0x専用テンプレートには使いません。

※以上は、同一周辺回路でLLとHALを混在利用する場合の注意点です。
※では、周辺回路が異なれば混在は問題ないのでしょうか? 例えば、I2CはHAL、GPIOはLLの場合などです。この場合でも、HALがLLを利用することを考慮すると、アプリケーションレベルでの安全側評価では混在は避け、LLまたはHALに統一して利用する方が無難だと思います。

STM32CubeMXのLow-Layer API利用法 (2):LL APIとHAL APIの違いまとめ

STM32G0x専用テンプレートは、HAL APIとの混在利用は避け、LL APIのみで開発します。

従って、STM32G0xデバイス専用のアプリケーションとなります。
汎用テンプレートSTM32Fxテンプレートは、HAL APIを使っていますので、STM32MCUで汎用的に使えるアプリケーションです。
※このSTM32Fxテンプレート汎用性を示すため、STM32G0xデバイスへこの汎用テンプレートを適用した例を示す予定です。

LLとHAL混在アプリケーション開発は、レジスタアクセス競合などの詳細注意が、API利用アプリケーション側で必要です。
公式サンプルプロジェクトExamples_MIXで示されたやむを得ない場合を除いては、避けた方が無難です。