STM32マイコン統合開発環境:SW4STM32の構築

STM32マイコンの統合開発環境: IDEは、EWARM、MDK-ARM、TrueSTUDIO、SW4STM32の4種類から選びます。

EWARM:IAR社Embedded Workbench for ARM。汎用IDE。無償版32KBコードサイズまで。
MDK-ARM:Keil社Microcontroller Development Kit for ARM。汎用IDE。無償版32KBコードサイズまで。
TrueSTUDIO:Atollic社Eclipse ベースSTM32専用IDE。無償版コードサイズ制限なし。
SW4STM32:仏)AC6社マルチOS EclipseベースSTM32専用IDE。無償版コードサイズ制限なし。本ブログはWindows版で説明。

STM資料は、これら4種IDEを併記していますので、英文量が増えます。4IDE同時に使う人はいませんので、自分が使うIDEの説明箇所のみを拾い読めば十分です。4IDE併記は、全てのSTM資料に共通ですので覚えておくと良いと思います。

また、コード生成ツールSTM32CubeMXも、4IDE対応で作られておりIDE名称を知らないとフォルダ名に戸惑うことになります(後で示すFigure3や4参照)。

今回は、これら資料の特徴を知ったうえで、SW4STM32へコード生成ツールSTM32CubeMXをプラグインしたSTM32マイコンテンプレート統合開発環境の構築と、評価ボードを使った構築環境の検証までを示します。

SW4STM32統合開発環境構築手順

前回記事に示したように、STM32テンプレート開発環境は、IDEにSW4STM32、評価ボードにNUCLEO STM32F072RBを使います。

1) SW4STM32インストールとUpdate
2) STM32CubeMXプラグインとUpdate
3) STM32CubeMXへ評価ボードMCUコアのライブラリダウンロード
4) ライブラリ(サンプルソフトとドライバ)のファイル構成確認
5) 評価ボードデモソフト説明と構築環境の動作検証

1)~5)がこの開発環境の構築手順です。上手く構築できたかどうかを、評価ボードデモソフトに変更を加え検証します。手順の内容を示します。

1)SW4STM32インストールとUpdate

最新版SW4STM32は、OpenSTM32 Communityページ中頃のdownload areaからダウンロードします(要ログイン)。旧版ではUpdateで最新版へ更新できる場合とできない場合がありますので、最新版のダウンロードをお勧めします。最新版へ更新できない時は、その旨の親切なメッセージが、Update実行後に出力されます。

SW4STM32のインストールは、ダウンロードインストーラの実行だけですので、特に問題ないと思います。忘れてはいけないのは、最新版(今日現在v2.0)でもインスト後、Updateが必要な事です。トラブル回避の為にも、SW4STM32のHelp>Check for UpdatesでIDE更新を実行後、次の手順へ進むようにしてください。

2)STM32CubeMXプラグインとUpdate

STM32開発で使うコード生成ツールSTM32CubeMXのプラグインインストール方法は、UM1718の3.3を参照してください。これも記載手順で行えば、問題なくできます。インストール後、3.4.3と3.5~3.5.1を参照し、STM32CubeMXのUpdateを行います。

3)STM32CubeMXへ評価ボードMCUコアのライブラリダウンロード

評価ボードMCUコアは、ARM Cortex-M0です。これをSTMは、STM32F0シリーズと呼びます。MainstreamのFx: x=0/1/2/3/4/7シリーズがCortex-M0/M3/M4/M7、ultra-Low-powerのLx: x=0/1/4シリーズがCortex-M0+/M3/M4コアを使います。F3≠M3なので注意してください。

UM1718の3.5.2のライブラリ選択で、STM32CubeF0の1.8.0版を選択し、Install Nowでサンプルソフトとドライバ等がIDEへインストールされます。最新版(STM32CubeF0の場合1.8.0)インストールで旧版分も含むので最新版のみでOKです。

今日現在は、1.8.0のパッチパッケージは無いので、以上の手順で、SW4STM32とSTM32CubeMXプラグイン設定が完了し、統合開発環境:IDEの構築は完成です。後は、UM1718の6~10に使用例がありますので、これらを習得すればSTM32開発ができます。

4)ライブラリ(サンプルソフト)の構成確認

3でインストールしたサンプルソフトやドライバは、デフォルトではドキュメントフォルダではなく、下記STM32Cubeフォルダになります。

C:\Users\ユーザ名\STM32Cube\Repository

ドキュメントフォルダ等へ変更したい方は、STM32CubeMXのUpdater Settingsで場所を変更してください。

STM32CubeMX Update Setting
STM32CubeMX Update Setting

このRepository内に、ダウンロードしたSTM32F0シリーズのZipファイルとこれを展開したファイルが同居しています。STM32CubeF0_V1.1.0の展開ファイル例が下記です。

STM32CubeF0 Firmware Structure
STM32CubeF0 Firmware Structure
STM32CubeF0 Example Overview
STM32CubeF0 Example Overview

Figure 4は、Figure 3のProjects/STM32F072RB-Nucleo下の構成を示します。Figure 3のドライバ(=Drivers)やFigure 4のサンプルソフト(=Examples)を活用すれば、アプリケーションの早期開発ができます。弊社STMテンプレートもこれらを使います。

注意点として、評価ボードNUCLEO STM32F072RB 以外のボードや、SW4STM32以外のIDE、つまりEWARMやMDK-ARMやTrueSTUDIOのUtilities等も含まれていることです。これらは、NUCLEO STM32F072RB(STM32F072RB-NucleoとFigure3表記)とSW4STM32を使う限りは不要です。
※STM資料もそうでしたが、STMソフトもまた4つのIDEや動作する全評価ボードに1ソフトで対応するように作られているので、上記のように使わないものが含まれています。

サンプルソフトの使い方は、UM1779の4.1にSW4STM32の記載があります。

5)評価ボードデモソフト説明と構築環境の動作検証

評価ボード購入直後、電源を入れると収納ケース裏GETTING STARTED記載の緑LED LD2が点滅し、その点滅間隔がB1ボタンを押す度に50/100/500msと変わるデモソフトが起動します。このデモソフトソースが、Figure 4のDemonstrations内にあります。そこで、このデモソフトを構築した環境へImportし、点滅間隔を変えることで環境が正しく構築されたかを検証します。

UM1787: STM32CubeF0 Nucleo demonstration firmwareにデモソフトの詳細が示されています。評価ボードに下図Arduinoシールドを装着すると、ジョイスティックやLCD表示も可能です。

Adafruit 1.8” TFT shield
Adafruit 1.8” TFT shield

デモソフト緑LED LD2の点滅箇所を抜粋したソースを示します。

LED Blink Routine
LED Blink Routine

簡単に説明すると、シールド未実装の場合はLED2_Blink()が実行され、BSP_PB_Init()で設定された割込みでHAL_GPIO_EXTI_Callback()が実行されBlinkSpeedをインクリメント、HAL_Delay()で点滅間隔が変わる、となります。

そこで、main.cのL574のHAL_Delay(500)をHAL_Delay(1000)などへ変更し、ビルド→デバッグでLD2の点滅間隔が変われば、構築した開発環境が正しく構築できたことを、評価ボードを使って検証できます。perspectiveをデバッグに切換えた画面を示します。

Debug Perspective View
Debug Perspective View

デバッガ接続に万一トラブルが発生した場合には、Run>Debug Configurations…で、STM32F072B0-Nuclei.elfを見つけてください。他の設定は、デフォルトで問題ありません。

Debug Configurations
Debug Configurations

デバッグ中は、評価ボードST-Link部実装の2色LED(赤緑)がキラキラして眩しいです。

SW4STM32の使い勝手は、画面切り替えにperspectiveクリックが必要など、NXPのMCUXpressoと比較すると、やや劣る操作性です。素のEclipse IDEに近いのだと思います。

さいごに

STMマイコンは、他社比ROM/RAM容量が大きいわりに低価格です。CMSISやHALを使うと、これぐらいの大きさが必要になるのだと思います。CMSISやRTOSが普及し始めると、Cortex M系コア性能に依存しないソフト開発ができるので、既に第5位ですが更に脚光を浴び始めるベンダかもしれません。

mbedでも使える評価ボードの入手性も良いので、今のうちに個人レベルで習得すると、慌てずに済むお勧めMCUです。

STM32評価ボードNUCLEO-F072RB選定理由

STM32マイコンテンプレートを開発するにあたり、秋月電子さん販売中の多くのSTM32評価ボードのうち、Cortex-M0のNUCLEO-F072RBとCortex-M3のNUCLEO-F103RBを選びました。今回は、この選定理由を示します。

STM Evaluation Boards and MCUs Performance
STM Evaluation Boards and MCUs Performance

NUCLEO-F072RB選定の理由(ARM Cortex-M0)

STMサイトに散りばめられたSTM32 MCU情報から、NUCLEO-F072RB選定の決め手となった資料が下記4つです。UM: User Manual、AN: Application Noteです。

1) UM1779          Getting started with STM32CubeF0 for STM32F0 Series
2) AN4735           STM32Cube firmware examples for STM32F0 Series
3) UM1718          STM32CubeMX for STM32 configuration and initialization C code generation
4) UM1727          Getting started with STM32 Nucleo board software development tools

1)はボード毎に提供されるサンプルソフト数を記載し、STM32F072RBが134個と断トツに多いことが判ります。STM32F072RBとは、NUCLEO-F072RB実装MCUです。MCU/ボードの混在表記なので注意が必要です。2)は、1)のサンプルソフト詳細内容が示されています。

3)は、2)のサンプルソフトを生成するコード生成ツールSTM32CubeMXのユーザマニュアルで、スタンドアロンやEclipse IDEプラグインなどの3動作モードと使用法が書かれています。4)は、STM32MCU開発に使える4IDEの紹介です。

これら資料から、STM32マイコンテンプレートの開発環境を以下としました。

・評価ボード: NUCLEO-F072RB(64ピンSTM32F072RBT6実装、ROM 128KB/RAM 16MB、DAC/CAN/USB等)
・統合開発環境:SW4STM32(無償版コード生成サイズ制限なし)+STM32CubeMxプラグイン

※KeilのuVision(MDK-Lite)は、STM32F0/L0専用ライセンスを使うとコードサイズ256KBまで利用可能です。しかし、F0/L0専用となりSTM32F1開発(NUCLEO-F103RB選定理由参照)には残念ながら使えませんのでやめました。F0/L0のみ開発をする方は、2018年2月までの期間限定のようですが、無料で全機能使えます(少し使ってみた感想はエディタが貧弱ですがまあまあという感じです)。

数種類の評価ボードが簡単に入手できても、STM提供サンプルソフト数が少ないものもあります。弊社マイコンテンプレートは、これらサンプルソフトが簡単に組込めることを特徴としますので、サンプル数の多さは、テンプレート活用機会も多くします。

以上のことから、STM32マイコンテンプレート開発環境を決めました。

STM32 Template Development Environment
STM32 Template Development Environment

STM32マイコンテンプレート開発方針

これら4つ以外にも、様々な有用資料(例えばAN4617:Migrating between STM32F0 and STM32L0 microcontrollersなど)がサイト内に散りばめられていて、ハッキリ言ってCypressサイトなどと比較すると、平面的で資料が見つけにくいサイト構成です。応答速度も遅いです。
しかし、掲載資料は、いずれも優秀なエンジニアが書いたものと思われ、英文量は多いものの中身は良好です。

STM32マイコンテンプレート開発では、このSTMサイトリンクもブログ記事に積極的に掲載しようと思います。私の下手なブログ記事を読むより、STMサイトへ直接アクセスする方が良い読者も多いと思うからです。その結果、2016年マイコン売上5位の実力を持つSTM MCUを使う弊社STMマイコンテンプレートのご購入者が増えることも期待もしております。

NUCLEO-F103RB選定の理由(ARM Cortex-M3)

これまで弊社テンプレート対象MCUは、Cortex-M0/M0+クラスでした。しかし、前回記事に記載したようにRTOSやCMSIS普及を考慮すると、このクラスに拘る必要が薄くなってきました。

MCU価格では、Cortex-M4のSTM32F303K8T6が410円、Cortex-M0のSTM32F042K6T6が250円とややM4が高いものの、ここで使うM0/M3評価ボード価格は、どちらも1500円で同じです(2017年5月秋月販売価格)。

製品の大きさが許せば、評価ボードをそのまま製品へ実装するというのは、いつも私が考える製品構想です。評価ボードが同価格なので、コア性能が不足しても、ホードごと載せ替え可能で安心です。STM32評価ボードは、UM1724: STM32 Nucleo-64 boardで詳細が解ります。

しかも、STM32ソフトウエアスタック(UM1779掲載)から、コアクラスの依存性が低いテンプレート作りも可能だと思います。つまり、LL: Low Layerの代わりにHAL: Hardware Abstraction Layerを使ってテンプレート開発すれば、STM32F0(Cortex-M0)以外にSTM32F1(Cortex-M3)、他のコアへも適用できると考えるからです。

STM32CubeMx Software Stack
STM32CubeMx Software Stack

この可能性を検証するために選んだCortex-M3評価ボードが、NUCLEO-F103RB(64ピンSTM32F103RBT6実装、ROM 128KB/RAM 20MB、CAN/USB等)です。勿論、LLの方が高速処理可能でしょうが、HALの移植性の高さも捨てがたい利点があります。

NUCLEO-F103RB
NUCLEO-F103RB

そこで、STM32マイコンテンプレートでは、あえてF0やF1などと対象コアを明記せず、両方に対応できる(と今は思っている)HAL版テンプレートと、速度重視のLL版テンプレートの両方を開発する予定です。HALで共通化できない場合には、LL版のみをリリースします。この開発経緯などもブログに記載していきます。

*  *  *

STMのMCUが、2016年マイコン売上5位というのは驚きでした。少なくとも私の周りにはSTMマイコンを使う人がいなかったからです。入手性も良く評価ボードも低価格です。STMサイトの情報がもう少し解り易く整理されれば、日本でも人気がでるMCUだと思います。また、HALやCMSIS対応も他社に比べて早そうなので、今後の発展性も期待できます。

まとめると、STM評価ボードは、サンプル数の多さからCortex-M0のNUCLEO-F072RBを選び、M0/M0+とM3とのテンプレート共通化検証のためCortex-M3のNUCLEO-F103RBを選びました。IDEは、Eclipse IDEベースのSW4STM32へSTM32CubeMXをプラグインしてテンプレート開発に使います。

私は、STMサイト構成が、平面的、網羅的で情報検索しにくいと思うので、ブログに関連資料などへのリンクを掲載し、テンプレート開発経緯を記載していきます。

MCU開発におけるベンダ専用IDEと汎用IDE

ARM Cortex-M系(M0、M0+、M3、M4…)のMCUを開発する時のIDEは、Eclipse IDEベースが一般的です。同じEclipseを使って各ベンダ専用IDEが開発されますので、ウインド構成や操作性(F5やF7の機能など)は同じです。

MCUXpresso IDE Perspective
NXPのMCUXpresso IDE画面(ユーザカイドより)

今回は、MCU開発スピードを左右する、専用IDEと汎用IDEの差と将来性を考察します。

ARM Cortex-M系のIDE

弊社マイコンテンプレートで使用中の専用IDE(ベンダ)が下記です。いずれもコードサイズ制限はありません。

・MCUXpresso(NXP)
・SW4STM32(STM)
・PSoC Creator(Cypress)
CS+ for CC/CA,CX(Runesas)、64KBコードサイズ制限あり

このうち、CS+ for CC/CA,CXは、ルネサスRL78系MCUなので除外します。今回から、2016年MCUベンダ売上5位のSTM32のマイコンテンプレートも開発しますので、追加しました。

一方、MCUベンダに依存しない汎用IDEで有名なのが、下記です。

・IAR Embedded Workbench for ARM(IAR) (=EWARM)、無償版32KBコードサイズ制限
・uVision(Keil) (=MDK-ARM)、無償版32KBコードサイズ制限
mbed(ARM)、コードサイズ制限なし

残念ながら汎用IDE無償版はコードサイズ制限があります。勿論、商用版は制限なしですが1ライセンスあたり数十万円程度もします。

mbed(ARM)は、サイズ制限なしでベンダにも依存しませんが、ブラウザでコンパイルとダウンロード(=書込み)はできても、デバッグ機能がありませんので、今回は汎用IDEから除外しました。
※IDEへエクスポート(下図)すればデバッグ可能との記載はありますが、今のところ私は成功していません。

mbed Export to IDE
mbedのIDEエクスポート

汎用IDEのメリットは、ベンダが変わっても同じIDEが使えること、開発したソフトのベンダ間流用障壁が専用IDEよりも低い(可能性がある)こと、技術サポートがあることなどです。

Eclipse IDEのプラグイン機能とCMSIS

オープンソースのEclipse IDEは、プラグインで機能を追加できます。もしベンダ専用機能が、全てプラグインで提供されれば、毎年更新される生のEclipse IDEへ、これらを追加すればIDEが出来上がります。これが一番低価格で良いのですが、Unixならともかく、Windowsでの実現性は低いと思います。

一方、CMSISが普及すると、開発ソフトのベンダ間流用問題はいずれ解決します。従って結局、ベンダ専用IDEで最後まで残る差は、コード生成機能になると思います。

同じCortex-M系MCUであっても、周辺回路はベンダ毎に異なる差別化部分です。コード生成機能は、汎用IDEの弱点でもあります。使いやすコード生成を提供できるMCUベンダが、生き残るでしょう。

一長一短があるChrome、Firefox、IE、Edgeなどのブラウザ同様、Cortex-M系MCU開発は、ベンダ専用IDEを使うのが良さそうだと思いました。

2016年MCUシェア1位はNXP

2016年主要マイコンシェア/販売額の記事がEE Times Japanに記載されました。2016年は、主要MCUベンダの買収が盛んでしたが、買収後で集計されているので、MCUの現状が示されています。

2016 MCU Share
2016 MCU Share(記事より)

車載半導体はNXPが2015年にルネサスを抜いて1位になっており、2016年のMCUシェア首位とともにNXPの躍進が明確になりました。

NXPの新IDE MCUXpresso

2017年4月時点の最新MCUXpressoIDE_10.0.0_344と、最終LPCXpresso_8.2.2_650の違いは、FreeRTOSタブが追加されたことのみです。残念ながらMCUXpressoのFreeRTOSもv8.0.1のままでした。

FreeRTOS V9はFreeRTOSサイトからダウンロードできます。が、これをMCUXpressoのv8へ手動で上書きインストールして問題なく動作させる自信はありません。FreeRTOS v9がNXPにより提供されるまで待つ方が、トラブルがなく得策と判断しました。
※MCUXpressoは、旧LPCXpressoプロジェクトフォルダがそのまま使えます。
※MCUXpressoに、PE: Processor Expertをアドインし旧Kinetis Design Studio代用とする方法は、調査中です。

マイコンテンプレートラインナップ

MCU Templates Lineup
MCU Templates Lineup

弊社マイコンテンプレートラインナップを、2016 MCUラインキング順に並べたのが上表です。おかげさまでテンプレートは、Runesas>NXP(Freescale含む)>Cypressの順に売れております。が、MCU順位5のSTM向けテンプレートもあれば、と思いました。

STMの場合、Cortex-M0/M0+を対象コアとすると、STM32F0/L0がテンプレートの対象です。しかし、このクラスのMCUへのRTOS適用によるROM/RAM大容量化や、IoT向けMCUの販売個数の増大などを考慮すると、より高性能なCortex-M3クラスも視野に入れた開発も必要か?と思っています。

CMSIS準拠でソフト開発すると、コア差はCMSISで隠蔽されるので、要求性能に応じたMCU選択が可能でクラス別けの必要もなくなります。また、RTOSでマイコンテンプレート相当が本当に必要か?という懸念もあります。

2016MCUシェアから、ルネサスの順位低下傾向が今後気になるところです。また、マイコンテンプレートについても、これらシェアの動きに合わせて、変わり続ける必要性を実感しました。