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での結果です。

汎用STM32FxテンプレートのSTM32G0x使用法

LL APIを利用するSTM32G0x「専用テンプレート」開発は、3月からの投稿で一応目安が付きました。
※投稿下欄タグ:専用テンプレートをクリックすると本稿を含め関連投稿が読めます。

これらの投稿で販売中の汎用STM32Fxテンプレートは、HAL APIを使っているので別STM32MCU、例えばG0シリーズMCUのSTM32G071RBなどへの使用・移植も簡単であることを何度か書いてきました。

そこで、この「汎用テンプレート」のSTM32G071RBへの使用法を説明します。

STM32Fxテンプレートは、図1に示すようにF0シリーズMCUのSTM32F072RBと、F1シリーズMCUのSTM32F103RB両方で動作確認済みです。本稿は、このSTM32FxテンプレートをSTM32G0へポーティングします。

汎用STM32Fxテンプレートのソフトウェアアークテクチャ
汎用STM32Fxテンプレートのソフトウェアアークテクチャ

汎用STM32FxテンプレートのSTM32G0x使用法まとめ

  • HAL APIはSTM32MCUで共通なので、HAL API利用アプリケーション(この場合はテンプレート、STM32Fx Template)は、STM32デバイスが変わってもそのまま使える
  • HAL APIより下層のソフトウェアは、STM32CubeMXを使って自動生成
  • STM開発環境にMCU移植機能が無い現状では、移植デバイス先のSTM32CubeMX設定さえ間違わなければ、HAL APIより上層アプリケーションの使用・移植は、簡単

汎用STM32Fxテンプレートを購入検討中の方、または既にSTM32Fxテンプレートをお持ちの方は、HAL API利用STM32Fxテンプレートの別デバイス移植性が優れていることが本稿でご理解頂けると思います。

汎用STM32F0シンプルテンプレートのSTM32G071RB移植手順

手順1.SW4STM32で、F0SimpleTemplateプロジェクト名をG0SimpleTemplateへリネームコピー

手順2.STM32CubeMXで、評価ボードNucleo-G071RBプロジェクトを新規作成し、F0SimpleTemplate.icoと同じ変更を加え、手順1でリネームしたG0SimpleTemplate.icoへ上書き保存後、コード生成

手順3.SW4STM32で、G0SimpleTemplateのmain.cとUserDefine.hなど数か所を変更&コンパイル

手順4.STM32G071RB評価ボードNucleo-G071RBで、移植シンプルテンプレート動作確認

文章で書くと手順1~4のように量が多くなります。しかし、HAL APIはSTM32MCUで共通、デバイスが変わってもHAL API利用アプリケーションをそのまま使うために、下層の構築にSTM32CubeMXを使うだけです。HAL APIアプリケーション移植は簡単です。

手順詳細を説明します。

手順1:SW4STM32で、F0SimpleTemplateプロジェクトをG0SimpleTemplateへリネームコピー

F0SimpleTemplateをコピー、同じワークスペースへペーストする時にG0SimpleTemplateへリネームします。

F0SimpleTemplateをG0SimpleTempleteへリネームコピー
F0SimpleTemplateをG0SimpleTempleteへリネームコピー

G0SimpleTemplateフォルダ内のF0SimpleTemplate.iocをG0SimpleTemplate.iocへF2:リネームします。
※手順1の目的は、F0SimpleTemplateソースコードのユーザ追記部分を、丸ごとG0SimpleTemplateで流用するためです。

手順2:STM32CubeMXで、Nucleo-G071RB新規作成とコード生成

現状のSTM32CubeMXには、MCUデバイス間の移植機能がありません。そこで、F0SimpleTemplate.iocファイルを見ながら、新規作成Nucleo-G071RBの周辺回路を手動で同じ設定にします。

先ずG0SimpleTemplete.iocファイルを新規作成し、手順1でリネームしたG0SimpleTemplete.iocへ上書き保存します。その後、STM32CubeMXの2重起動を活かしF0SimpleTemplate.iocを見ながらG0SimpleTemplete.ioc周辺回路を同じ設定にします。最後に、全ての周辺回路をHAL APIでコード生成します。

STM32CubeMXのNucleo-G071RB設定
STM32CubeMXのNucleo-G071RB設定

※Connectivityは、F0SimpleTemplateに合わせてUSART2、Clock Configurationは、HCLK Max.の64MHz、Timerは、F0SimpleTemplateのTIM3機能に近いTIM7を使いました。

手順3:SW4STM32で、main.cとuserdefine.hの数か所を修正&コンパイル

どのようなアプリケーションソフトでも、デバイス依存の箇所があります。F0SimpleTemplateも同様です。これらは手動で変更・修正するとビルドが成功します。変更・修正箇所が下記です。

  • HALライブラリとBSP(Board Support Package)変更
    stm32f0xx_hal.h→stm32g0xx_hal_conf.h、stm32f0xx_nucleo.h→stm32g0xx_nucleo.h(UserDefine.h)
  • BSPはRepository\STM32Cube_FW_G0_V1.2.0\Drivers\BSP\STM32G0xx_Nucleoのstm32g0xx_nucleo.c/hをSrc/Incへコピー
  • TIM3の代わりにTIM7を使ったので、htim3→htim7(main.c)
  • G0SimpleTemplateに無関係ファイル削除(stm32f0xx_nucleo.c/h, system_stm32f0xx.c)

手順4:評価ボードNucleo-G071RBで動作確認

F0SimpleTemplateをG0SimpleTempletaへ流用したVitrual COMポート画面
F0SimpleTemplateをG0SimpleTempletaへ流用したVitrual COMポート画面

※表示メッセージは、STM32G0xデバイス対応に変更しています。

あとがき

繰返しますが、文章で書くと移植手順は長く複雑に感じます(特に手順3)。しかし、ソフトウェアアーキテクチャ図1が理解済みならHAL API利用アプリケーションの別デバイスへの移植は簡単です。手順3内容は、デバイスが変われば当然必要となる事柄です。

HAL API利用アプリケーションの最大メリットは、MCU移植が容易なことです。つまり、HAL APIアプリケーションは、「STM32MCUデバイス非依存」とも言えます。

現状では、このメリットを活かす開発環境が不備なだけです。不備分は手動で補い、STM32F0/F1アプリケーションをSTM32G0アプリケーションへ移植する方法を示しました。

近い将来、STM開発環境にMCUデバイス移植機能が提供されると筆者は思います。

お知らせ:LL APIを利用するLL APIのSTM32G0x「専用」テンプレートの販売時には、本稿のHAL API利用「汎用」G0SimpleTemplateも添付し、専用と汎用の両方を1パッケージで販売する予定です。

※LL APIとHAL APIの差を把握したい方は、STM32CubeMXのLow-Layer API利用法(2)を参照ください。

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 5.1.0でSTM32G0 1.1.0公式サンプルプロジェクト生成可能

前投稿で2019年3月末時点ではSTM32G0 V1.1.0の公式サンプルプロジェクト内の付属STM32CubeMX全プロジェクトファイルが未完成と書きましたが、一部改善されました。
つまり、公式サンプルプロジェクトExamples_LLがSTM32CubeMXで生成可能になりました。

お詫びして😔、訂正いたします。

STM32CubeMXは、起動毎に更新チェックやインストール済みのMCUパッケージを自動更新します。STM32G0 1.1.0のままプロジェクトファイルからの生成が可能に変わりましたので、STM32CubeMX本体が更新されたと思うのですが、版数はVersion 5.1.0のままで変わりません(何回か起動を繰返すと正常化するのかもしれません😅、同じ症状の方はお試しを…)。

なんにせよ、STM32G0x専用テンプレートで使うSTM32CubeMXのLL(Low-Layer) API開発には朗報に変わりありません。めでたしめでたしです。

朗報:STM32G0公式サンプルプロジェクトがSTM32CubeMXで生成可能

STマイクロエレクトロニクス(以下STM)の新MCU:STM32G0xシリーズだからこそできた快挙です。AN5110 – Rev 3 – February 2019で、STM32G0公式サンプルプロジェクトが、付属STM32CubeMXプロジェクトファイル(拡張子.ioc)で生成できるようになりました(Table 1のMXアイコン部分)。

AN5110のTable 1
AN5110掲載のTable 1(一部抜粋)

従来サンプルプロジェクトとSTM32G0サンプルプロジェクト比較

例えば、従来のSTM32F0公式サンプルプロジェクトは、エキスパート自作のもの(多分、むかしの標準ペリフェラルライブラリ利用)でした。STM32ソフトウェア開発は、今はSTM32CubeMXコード生成出力へユーザコードを追加する方式です。

従って、従来サンプルソースコードを利用するには、エキスパート作成の必要部分を解読後カットし、STM32CubeMXで生成した自分のソースコードへペーストして流用してきました。

AN5110は、この公式サンプルプロジェクトが、付属STM32CubeMXで直接生成できることを示しています。サンプルプロジェクト流用・活用が、これまで以上に簡単・便利になります。従来のソースコードカット&ペーストから、付属STM32CubeMX変更と生成コードへユーザコードを追加すれば済むからです。

STM32ソフトウェア開発の最重要ツール:STM32CubeMX活用に即した方法がAN5110と言えます。

2019年3月末時点では付属STM32CubeMXプロジェクトファイル未完成

重要なのは、ここからです。

3月末時点では、公式サンプルプロジェクト内のSTM32CubeMXプロジェクトファイルが未完成です。例えば、Table 1一番上のNucleo-G071RBのADC_AnalogWatchdogプロジェクト付属STM32CubeMXプロジェクトファイルを開いた様子が下図です。

ADC_AnalogWatchdogの.ico
図1 ADC_AnalogWatchdogサンプルプロジェクト付属STM32CubeMXプロジェクトファイルの.iocを開いた様子

このままコード生成してもADC_AnalogWatchdogサンプルプロジェクトはできません😴。

ADC_AnalogWatchdogプロジェクトだけではなく、全ての公式サンプルプロジェクトで同様です。

つまり、現時点では、残念ながら公式サンプルプロジェクト内の付属STM32CubeMXプロジェクトファイルは未完成です。公式サンプルプロジェクトの素:STM32G0 1.1.0改版を待たねば、AN5110は実現しません。
前投稿で書いたようにSTM32G0 1.1.0(2019/02/26)は、STMに買収されたAtollic TrueSTUDIOへも未対応でした(図1にTrueSTUDIOフォルダが無いことからも判る)。

新しいMCU発売にはありがちですが、開発に一番重要なツール完成には、開発元ベンダーであっても年単位の時間が必要です(AN5110 Revision historyより)。

STM32CubeMXを使って公式サンプルプロジェクトを生成するAN5110の方向性は、正しいと思います。
新MCU:STM32G0シリーズSTM32G0だけでなく、他の既存MCU:STM32F0/F1シリーズSTM32F0/F1などもこの方向の対応を期待します。

まとめ

以上のように、STM32G0x専用テンプレート開発環境は整いつつありますが、少し待ってから、具体的には、STM32CubeMXへインストールするSTM32G0xシリーズMCUパッケージ、STM32G0 V1.1.0改版を待ってから先へ進めた方が良さそうです。

この改版までの待ち時間は、STM32G0x専用テンプレート開発で使うLL(Low-Layer)APIの習得に充てます。

TrueSTUDIOとSTM32CubeMXインストール方法、STM32G0xとSTM32F0xの差異

STM32G0x専用テンプレートのIDE:TrueSTUDIOを使った開発環境構築手順も、汎用STM32Fxテンプレートのそれと同じです。

本稿はSTM32G0x専用テンプレート開発用IDE TrueSTUDIOとスタンドアロン版STM32CubeMXのインストール方法を示し、インストールしたSTM32CubeMXを使って同じ汎用MCUでもSTM32G0xとSTM32F0xのどこが違うかを具体的にまとめます。

STM32G0x専用テンプレートIDE:TrueSTUDIOを使った開発環境構築手順

2017年5月投稿のSW4STM32のIDE構築手順が左側、これがTrueSTUDIOに変わると右側になります。

表1 TrueSTUDIOとSTM32CubeMXインストール手順とSW4STM32構築時の比較
手順 SW4STM32で構築(2017年5月) TrueSTUDIOで構築(本稿)
1 SW4STM32インストールとUpdate TrueSTUDIOインストールとUpdate
2 STM32CubeMXプラグインとUpdate STM32CubeMXスタンドアロン版とUpdate
3 評価ボードMCUコアのライブラリダウンロード STM32G0パッケージのダウンロード
4 ライブラリのファイル構成確認 同左(しかし、当面見合わせ)
5 評価ボードデモソフト説明と構築環境の動作検証 同左(しかし、当面見合わせ)

差分はIDEと、STM32CubeMXスタンドアロン版をインストールする点、評価ボードがNucleo-F072RBからNucleo-G071RBに変わったので、STM32CubeMXへダウンロードするMCUパッケージにSTM32G0を加える点です。

前半で手順1~5の簡単な説明、後半は、インストールしたSTM32CubeMXを使って同じ汎用MCUグループのSTM32G0xとSTM32F0xが、電源ピン数やデフォルト使用周辺回路が異なることを示します。

手順1 TrueSTUDIOインストールとUpdate

Atollic TrueSTUDIO for STM32 9.3.0(2019/2/22リリース)は、atollicサイトからダウンロードボタンのクリックで入手できます。以後、Windows版で説明します。

ダウンロード後、インストーラを実行すると言語選択ダイアログが現れます。日本語を選択するとインストール後のTrueSTUDIOメニューも自動的に日本語化されます。
インストール後、ヘルプ(H)>更新の検査、をクリックしTrueSTUDIO を最新状態にします。

※TrueSTUDIOインストール検討中の方は、手順4を読んだ後に再検討してください。

手順2 STM32CubeMXスタンドアロン版とUpdate

コード生成ツールSTM32CubeMX V5.1.0は、SW4STM32と今回インストールするTrueSTUDIOの両方で使います。そこで、各IDEのプラグインではなく、スタンドアロン版としてインストールします。インストール方法は、UM1718 Rev28の3.2を参照してください。
インストール後、Help>Check for Updates、をクリックしSTM32CubeMXを最新状態にします。

※UM1718は、チュートリアルも豊富でSTM32CubeMXの重要マニュアルです。全356ページと分量は多いのですが、読む章を選択するなどして目を通すことをお勧めします。

スタンドアロン版はSTM32CubeMX更新が簡単で、1つのSTM32CubeMXで両方のIDEに生成ファイルを出力する時に便利です。

手順3 評価ボードMCUコアのライブラリダウンロード

評価ボードNucleo-G071RBのMCUコアは、Cortex-M0+です。STM32Fxと同じMainstream(≒汎用)MCUですが、新世代の汎用MCUです。
関連投稿:STM32G0x専用Edge MCUテンプレート開発

STM32CubeMXのHelp>Manage embedded software packagesでSTM32G0を選択し、最新版Package1.1.0をインストールします。

STM32G0インストール
STM32G0 MCU Packegae 1.1.0のインストール

手順4 ライブラリのファイル構成確認

STM32CubeMXは優れものソフトウェアで、IDEプラグインからスタンドアロン版へ途中変更してもデフォルトRepositoryディレクトリ(C:\Users\ユーザ名\STM32Cube\Repository)を変えなければ、プラグイン版Packagesの各MCUパッケージがスタンドアロン版へそのまま引き継がれます。

ただし今回のSTM32G0は、ライブラリファイル構成がSTM32F0/F1をインストールした時と一部異なります。

Repository/STM32Cube_FW_G0_V1.1.0\Projects\NUCLEO-G071RB\Templatesフォルダ内にTrueSTUDIOフォルダが無いのです(EWARM/MDK-ARM/SW4STM32は以前と同様有るが、UM1718にもTrueSTUDIO説明無し)。

残念ながら、手順3でインストールしたSTM32G0は、TrueSTUDIOへ生成コードを現状は出力できないようです😴。

SW4STM32の必然性
TrueSTUDIOではなくSW4STM32の必然性を示す結果となった

という訳で、手順4と5以降は、STM32G0がTrueSTUDIOへ対応した後に検証を行います。Communityによると次版のSTM32G0で対応予定だそうです。

STM32G0x専用テンプレート開発IDEに、SW4STM32からSTM買収後のAtollic TrueSTUDIOへの変更必要性を示すつもりが、今現在は、SW4STM32の使用を続ける必然性を示す結果となりました😴。

STM32CubeMXを使ったSTM32G0xとSTM32F0xの差異まとめ

TrueSTUDIOへ生成コードを出力しなければSTM32CubeMXに問題はないので、(個人的にはマルチOS対応SW4STM32が好きですし……気を取り直して…)、STM32CubeMXを使いSTM32G0xとSTM32F0xの違いをまとめます。

STM32G0xもSTM32F0xも共にMainstream、つまり、汎用MCUに属します。しかし、STM32CubeMXを使うと、評価ボード実装の同じ64ピンパッケージでも、電源ピン数やデフォルト利用の周辺回路が異なることが良く判ります。

Nucleo-G071RBとNucleo-F072RB差異
Nucleo-G071RB(左)とNucleo-F072RB(右)の利用ピン差異

Tips:STM32G0 1.1.0では、評価ボードNucleo-G071RB使用中のLD4(PA5)とB1(PC13)がPinout & Configurationに表示されません。その理由は不明ですが、手動で追加設定する必要があり上左図は設定済みのものを示しています。ちなみに、上右図Nucleo-F072RBは、LD2とB1がデフォルトで表示されます。

電源ピン(VDD/VSS)数

STM32G0xは、黄色で示された電源ピン(VDD/VSS)が1組、一方STM32F0xは4組あります。STM32G0xのCortex-M0+コアと70nmプロセスの結果、電力供給1組でも十分動作します。

不要になった電源ピンは、GPIOに変更し同じ64ピンパッケージでもSTM32F0xよりも多くの外部制御が可能です。

パッケージのピン配置

STM32G0xシリーズのパッケージピン配置が下図です。将来リリース予定の4パッケージピン配置は一貫しています。これにより、基板アートワークや周辺部品の配置も一貫した設計計画が立てられます。

電源ピンはどのパッケージでも1組で、左辺中央です。

STM32G0xシリーズパッケージピン配置(出典:STM32G0 and CubeMX Webinar)
STM32G0xシリーズのパッケージピン配置(出典:STM32G0 and CubeMX Webinar)

デフォルト利用周辺回路

STM32G0xのConnectivity(通信処理)は、デフォルトでLPUART1(Low Power UART、Stopモードからの再起動可)ですが、STM32F0xはUSARTです。STM32G0xもUSARTを実装していますが、低電力動作に適したLPUARTを推薦しているためと思います。

LPUARTとUSARTの差異(出典:STM32G0オンライントレーニング)
LPUARTとUSARTの差異(出典:STM32G0オンライントレーニング)

その他の差異

これら以外にも、STM32G0xは、USB Type-C™ Power Delivery controllerや2.5MspsのADC、メモリープロテクションなどIoT Edge MCU向きの周辺回路を実装済みです。

また、Nucleo-G071RB評価ボードのUSBはMicro-Bコネクタ、Nucleo-F072RBはMini-Bコネクタです。

USB Micro-BとMini-Bコネクタ(出典:ウィキペディア)
USB Micro-BとMini-Bコネクタ(出典:ウィキペディア)

まとめ

STM32G0x専用テンプレート開発に使うTrueSTUDIOとSTM32CubeMXインストール方法を示し、そのSTM32CubeMXを使ってSTM32G0xとSTM32F0xの差異を示しました。

STM32CubeMXは2重起動可能です。STM32G0xとSTM32F0xそれぞれのSTM32CubeMXプロジェクトファイルを同時に開いて比べると、各デバイスのデータシートで比べるより差異が早く良く判ります。

STM32G0x専用テンプレート開発IDEには、当面、筆者が好きなSW4STM32が適していることも判りました。

STM32G0x専用テンプレート開発全体像俯瞰

STM32G0x専用テンプレートの開発着手にあたり、汎用STM32Fxテンプレート開発から2017年9月のテンプレート発売までをざっと振り返り、今回の専用開発との差分になりそうな箇所を示しSTM32G0x専用テンプレート開発全体像を俯瞰、力を入れる投稿予定を示します。

汎用STM32Fxテンプレート開発History

汎用STM32Fxテンプレート開発時の主な投稿と内容
年月日 投稿タイトル 主な内容
2017年5 STM32マイコンIDE構築 SW4STM32の構築
2017年6 STM32CubeMXの使い方 HAL APIの選定理由と利用法
STM32CubeMX生成ファイルのユーザ追記箇所 HAL利用時のユーザ追記箇所
2017年8 評価ボードの利用ピン指針 Baseboardとの接続指針
2017年9 STM32Fxテンプレート発売 汎用STM32Fxテンプレート発売

2017年5月当時は、4種ある無償IDEの中からマルチOS(Windows/MacOS/Linux)対応、仏/AC6社のSW4STM32を使いました。2017年末、無償IDE TrueSTUDIO提供のスウェーデン/Atollic社がSTマイクロエレクトロニクス(以下STM)に買収され、公式にはTrueSTUDIOがSTM32マイコンの純正無償IDEに昇格(!?)したようです😅。

関連投稿:STM32のStep-by-Step Guideの、気になる点1:TrueSTUDIO参照

STM32G0x専用テンプレート開発IDE:TrueSTUDIO

そこで、STM32G0x専用テンプレート開発には、TrueSTUDIO無償版(Windows/Linux対応、MacOSなし)を使います。現在SW4STM32を使っている方にも判り易いようにTrueSTUDIOとの差分を説明する予定です。

但し、筆者はSW4STM32利用中の開発者が、あえてTrueSTUDIOに変更する必要は、今のところ少ないと考えています。ソフトウェア開発の主役は、STM純正コード生成ツールSTM32CubeMXだからです。最新STM32CubeMXを使えば、IDE差は少ないと今は思っています。

勿論、TrueSTUDIOの買収昇格時点でBetterなのは当然だと思います。専用テンプレート開発を通じBetterよりもSW4STM32からTrueSTUDIOへ変更するMust条件が判れば、本ブログでお知らせします。

Tips:STMの日本語資料強化の一環なのか、TrueSTUDIOはEclipseベースIDEなのにインストーラは日本語対応、メニューも日本語になっています(下図参照)。但し、C\ユーザ名\Atollic\TrueSTUDIO for STM32 9.3.0\Manuals\Generalにある重要マニュアル5種は全て英文です。例えば、SW4STM32プロジェクトのTrueSTUDIOインポート方法や注意点は、User GuideのP75~に英文で詳しく説明されています。

日本語対応のTrueSTUDIOメニュー
日本語対応のTrueSTUDIOメニュー

STM32CubeMX:LL API(Application Programing Interface)利用

STM32G0x専用テンプレートは、汎用STM32Fxテンプレート開発で使ったHAL(Hardware Abstraction Layer)APIに変わりLL(Low Layer)APIを使います。LL利用により、STM32CubeMX生成ファイルの初期化コードやユーザ追記箇所がHALとは異なります。LL APIの利用は、専用テンプレートの肝ですので、ブログで詳しく説明します。

IoTサービス例:2.5Msps12ビットADC必須+α

汎用STM32Fxテンプレートは、Baseboardと評価ボードを接続し、基本動作完成形のBaseboardテンプレートを開発しました。STM32G0x専用テンプレートは、Arduinoコネクタに何らかのIoTサービスを示すシールドを接続する予定です。しかし、最悪の場合、汎用と同じBaseboard接続にする可能性もあります。

ただし、特に2.5Mspsの12ビットADCは、3タイプある全STM32G0xデバイスに実装済みで、IoTサービス必須機能ですので、このADCを活かしたIoTサービスは実装必須にします。その他のIoTサービスに関しては、今後決めます。

2.5Msps12ビットADC (RM0444より)
2.5Msps12ビットADC (出典:RM0444)

STM32G0x専用テンプレート発売:2019/3Q~

汎用STM32Fxテンプレートは、5か月の期間で開発しました。STM32G0x専用テンプレートは、HALよりもLL API利用難易度が高いことを考慮すると、最低でも同じ開発期間が必要だと思います。

STM32G0x専用テンプレート開発全体像俯瞰の結果

以上、STM32G0x専用テンプレート開発の全体像を俯瞰しました。
SW4STM32からTrueSTUDIO IDEへの変更必要性、STM32CubeMX のLL API利用法、全STM32G0xデバイス実装済みでIoTサービス必須機能2.5Msps12ビットADC使用法、これらを読者の方々が理解できよう力を入れて投稿記事を作成します。

Edge MCU評価ボード要件と検索方法

前稿で示したEdge MCUテンプレート構想を具体化します。MCU動作だけでなく、IoTサービス例を、開発者個人が、低価格かつ簡単に示すことを目的とするこの新しい「Edge MCUテンプレート」は、弊社が従来から販売してきた「汎用MCUテンプレート」のアプローチとは少し異なります。

それは、テンプレート出力がMCU動作だけでなくIoTサービスも含めるからです。たとえEdge MCUであっても普通のデバイスです。ベンダーは、その評価ボードでEdge MCUの特性を活かしたIoTサービスを示す場合が多いです。
従って、Edge MCUテンプレートのポイントは、いかに上手くIoTサービスを示すベンダー評価ボードを選べるかに掛かっています。

本稿は、Edge MCUテンプレートに用いるEdge MCU評価ボードの3要件と、これら要件を満たす評価ボード検索方法を示します。

Edge MCUテンプレートに用いるEdge MCU評価ボードの3要件

以下3要件を、Edge MCUテンプレートに用いるEdge MCU評価ボードと考えます。

  • R1. 低価格、入手先豊富なEdge MCU評価ボード <¥3,000
  • R2. 最新Edge MCU使用(2018年後半の新しいIoTトレンドに沿って開発されたEdge MCUであること)
  • R3. 何らかのIoTサービス例を簡単に示せる

要件(Requirements)を満たさない場合は、どの項目がNGかが解れば、開発者や場合によってはOKの場合もあります。¥3,000が低価格かは懐具合次第ですし、開発年度が新しいか古いか、何らかのIoTサービスなど、全て主観です。

ただ主観であっても、Edge MCU評価ボード選択にあたりR1~R3の要件があると、採否が簡単になります。仮に、最新Edge MCUでは無いが、低価格でIoTサービスも示せる評価ボードがあった場合には、「R2_NG」だが採用するなどの特例も取れます。そこで次に、この3要件を満たすEdge MCU評価ボードを効率的に選ぶ方法を示します。

3要件を満たすEdge MCU評価ボード検索方法

最新Edge MCUで、R1~R3要件を満たすEdge MCU評価ボードを選ぶには、Mouserの新製品(メーカー別)ページが便利です。DigiKeyやチップワンストップにも同様ページがありますが、サムネイル写真と概要付きなのでMouserが最も使いやすいと思います。

Mouser新製品ページ
Mouser新製品(メーカー別)ページ。メーカーロゴクリックで集計される。カテゴリ別や週別でも選べて便利。

例えば、STマイクロエレクトロニクス(以下STM)をクリックすると、「発売日順」にサムネイルと商品名、概要が列挙されます。この中から、Edge MCUテンプレートに使えそうな評価ボードの商品詳細を読み、3要件で採否を判断すれば良いという訳です。

STマイクロエレクトロニクスの発売日順検索結果
STマイクロエレクトロニクスの発売日順検索結果。写真、製品名、概要が判る。

守備範囲が広いSTM32G0投稿で示したNucleo-G071RB(¥1,203)もこの方法で上位ページ、つまり新商品順に表示されるので、直に探せます。
※年始には1ページ目上部に示されたNucleo-G071RBが、2ページ目下部に示されました。STMは他ベンダー比、新製品が多いのにも驚かされます!
※このようにベンダー毎の新製品数、評価ボード搭載デバイスの単体価格なども簡単に分かる点がマウザー新製品ページの利点です。

NXP、サイプレス、ルネサスとベンダーを変えて上記検索をすれば、R1~R3要件を満たすEdge MCU評価ボードが簡単に見つかります。

ルネサスは投稿時3要件を満たすEdge MCU評価ボードなし

残念ながらベンダーをルネサスで検索しても、2月末時点では価格要件:R1を満たすEdge MCU評価ボードが見つかりません。

例えば、RL78ファミリのロードマップ投稿で示したRL78/G11評価ボードYQB-R5F1057A-TB(¥3,961…!)やYRPBRL78G11(¥6,437)※秋月電子でも¥4,320は、ともに¥3,000を超えます。

また、低価格がセールスポイントのRX評価ボードTarget Board for RX130/231/65NでもR1を満たしません。

つまり、ルネサスEdge MCU評価ボードは、他ベンダー比、どれも価格高めです。企業レベルでの購入なら問題ないでしょう。しかし、これら価格は、実装部品から推測しても“個人開発者は顧客として眼中に無いのでは(!?)”、とも疑われるコスパだと思います。

※東洋経済Online2月19日に、ルネサス急ブレーキのしかかる1兆円買収記事が掲載されています。ルネサスを応援したいのですが、Edge MCU評価ボード入手も含め、手を出しにくい状況です。

守備範囲が広いSTM32G0

2018年12月のSTM32マイコンマンスリー・アップデートのトップページに、先日投稿した新汎用MCU STM32G0の概要とブロック図が記載されました。また、12月18日のEDN JapanにもIoT機器を小型化効率化する32ビットマイコンとしてSTM32G070(48ピン/ROM128KB)が約69セントと安価であることが紹介されています。

STM32G0シリーズブロック図
STM32G0シリーズブロック図(出典:マンスリー・アップデート2018年12月トップページ)

本稿は、これら新MCU STM32G0記事を整理し、開発ベースとして最適なアクセス・ライン製品STM32G71と評価ボードの入手性、価格について示します。

3製品:バリュー・ライン、アクセス・ライン、アクセス・ライン&エンクリプション

STM32G0の説明がある時、3製品のどれを説明しているかを区別、意識する必要があります。というのは、STM32G0のアプリケーション守備範囲が、とても広いからです。3製品の特長をまとめたのが下表です。

STM32G0の3製品特徴
製品ライン 型番例 特徴
バリュー・ライン STM32G70 コスト最重視のエントリクラス製品
アクセス・ライン STM32G71 ハードウェアセキュリティ搭載の標準製品
アクセス・ライン&エンクリプション STM32G81 アクセス・ラインに暗号化機能搭載製品

EDN Japan記事のSTM32G070(48ピン/ROM128KB)の69¢は、バリュー・ラインのことです。マンスリー・アップデートのブロック図は、3製品機能をAND表示したものです。

3製品差を理解するには、STMサイトのSTM32G0製品シリーズと、オンライントレーニング資料STM32G0 Series Presentation P2が役立ちます。

STM32G0製品シリーズ
STM32G0製品シリーズ(出典:STMサイト)
STM32G0の3製品差
STM32G0の3製品差(出典:STM32G0 Series Presentation P2)

現在供給中の3製品差と、今後のラインナップを整理すると以下になります。

供給中デバイスと開発予定ラインナップ
供給中デバイスと開発予定ラインナップ(出典:STM公式ブログ)

バリュー・ライン(灰色)
アナログフロントエンド向きのアプリケーションに特化した2.5Mspsの高速12ビットADC実装のバリュー・ライン(STM32G070)は、価格最重視のエントリ製品でEDN Japan記事のように1$以下の調達ができます。また、供給中と今後のラインナップの図から、8/20ピンなどの小ピン&小ROM製品が予定されていることも解ります。

アクセス・ライン(水色)
バリュー・ラインと同様小ピン&小ROM製品に加え、100ピン&大ROM製品の予定もあります。アプリケーションに応じてDAC、USB-PO、CAN FDなどの周辺回路が実装可能です。さらに、1.65-3.6Vと他製品より低電圧側への広い動作も特徴です(Presentation P2参照)。

これらの仕様の幅広さから、STM32G0の最も標準的なベースMCUと言えます。アクセス・ラインでプロトタイプ開発しておけば、内蔵周辺回路が同じシリーズのバリュー・ラインやアクセス・ライン&エンクリプションへそのまま応用・適用できるからです。

アクセス・ライン&エンクリプション(紺色)
IoTアプリケーションでは必須になるハードウェア暗号化機能をアクセス・ラインに追加しています。

STM32G0の幅広いMCUコア性能

これも先の投稿で示したSTM32FxとSTM32G0の違い図から、STM32G0はSTM32F0より低い消費電力と、STM32F1並みの高性能をハイブリッドしたMCUであることが解ります。つまり、STM32G0(Cortex-M0+/64MHz)で、F0~F1のMCUコア性能範囲をカバーできるのです。

STM32G0のGは、アプリケーション守備範囲の広さを示すGlobal、またはGeneral(汎用性)を表しているのかもしれません。STM32FxのFは、Flexibilityでしょうか?

STM32G0のサンプルソフトウェア

アクセス・ラインSTM32G071RB(64ピン/ROM128KB)実装の評価ボードNUCLEO-G071RBは、STMの公式サンプルソフトウェア数が159個(AN5110参照)と現在最も多く、STM32G0のアプリケーション開発に適していると思います。

この評価ボードとサンプルソフトを活かして開発したソフトは、バリュー・ラインやアクセス・ライン&エンクリプションへも同じシリーズですので、容易に応用・流用が可能です。

また、暗号化機能搭載のアクセス・ライン&エンクリプションSTM32G081RB搭載の評価ボードSTM32G081B-EVAL board:$382を使えば、暗号化認証手順や鍵管理などのセキュリティ関連が効率的に習得できるハズ(?)です。
※セキュリティ関連は、ホストとスレーブの2役が必要など、筆者自身不明な点も多いため、今後別途調査したいと考えています。

STM32G0の入手性と価格

ネット通販が盛んになったおかげで、近頃は新発売後1ヶ月も経っていない最新デバイスであっても、個人で1個から入手できます。

2018年12月24日現在、Mouser(マウサー日本)のアクセス・ラインSTM32G071RB(64ピン/ROM128KB)と、評価ボードNUCLEO-G071RBの価格表です。もちろん代理店経由なら、この価格よりも安く入手できるでしょう。

STM32G0の価格(2018年12月調査)
Mouser入手の場合 数量 価格(JPY
STM32G071RB 1 398
10 360
100 298
1000 213
NUCLEO-G071RB 1 1,203

STM32G0は、たとえ個人でも、入手性良く低価格で入手できると言えるでしょう。

まとめ

新発売STM32G0は、従来メインストームSTM32F0~STM32F1で開発していた広いアプリケーション範囲をカバーできる汎用MCUです。またIoTエッジMCUに必要になる暗号化機能をハードウェアで実装済みの製品もあります。

3種ある製品のうち、アクセス・ラインのSTM32G071RB(64ピン/ROM128KB)実装の評価ボードNUCLEO-G071RB は、STM公式サンプルソフトウェア数が現時点で最も多く、STM32G0の汎用性、広範囲アプリケーション対応性を活かした開発のベースに最適と評価しました。

これら評価ボードとSTM32G071RBデバイスは、個人でも比較的安価に入手できることも分かりました。