STMicroelectronixは同社のARM CORTEX-M マイコンSTM32シリーズ用に、STM32CubeMX、SW4STM32というソフトウェアをリリースしています。最近この2つのソフトウェアを触り始めました。
以下、メモ代わりにあれこれ書いておきます。
SW4STM32
SW4STM32は、EclipseベースでのIDEで、プログラムの編集、ビルド、デバッグをGUIで行うことができます。
最近のUbuntuはリポジトリにarm gccが用意されているため、比較的簡単にビルド環境までは用意できます。しかしながら、SW4STM32はST MicroelectronicsのST-Linkデバッガのドライバを内蔵しており、同社のNucelo シリーズボードと直結してすぐに使えるという気安さがあります。Nucleoシリーズはmbedに対応しているボードも多く、開発環境無しですぐにプログラムを組むことができますが、SW4STM32を使えばすぐにより複雑なプログラムに取り組むことができます。
SW4STM32は構成要素がEclipse, gcc, gdbとあって、地味な印象ですが、その分安定しているのではないかと期待しています。
STM32CubeMX
一方、STM32CubeMX(以下CubeMX)は、STM32シリーズマイコン用のスケルトン・ジェネレータです。
最近のSoCマイコンは複雑化が進み、リファレンス・マニュアルが1000ページを越えるものも珍しくありません。STM32F72xのリファレンス・マニュアルであるRM0431はRev 1が1371ページ有ります。これらのSoCマイコンは昔のワンチップ・マイコンの単純な拡大版ではなく、例えばクロック・ツリーの制御などの点で非常に複雑な構成になっています。
そういったICの場合、プラットホームが何処まで面倒を見てくれるかで随分使い勝手が変ります。例えば昨年作ったUnzenフレームワークはmbedをプラットホームとして使用していました。しかし、mbedはSAIペリフェラルを考慮しておらず、結果的にUnzenの中でクロック初期化の面倒まで見るはめになりました。
また、SoCマイコンはピンに多くの機能が多重化されているため、それらをきちんと設定するまでペリフェラルを動かすこともできません。
CubeMXはこの面倒な設定への回答になっています。
CubeMXはGUIベースのソフトウェアで、ピンの多重化状況を見ながら機能設定を割り振っていけるほか、利用するペリフェラルの初期化をGUIで行うことができます。
CubeMXはST MicroelectronicsのSTM32マイコン用HALとLL (Lower Layer )ライブラリに依存しています。CubeMXが出力するスケルトンはこれらのライブラリを使ってペリフェラルを初期化します。これは単にHEX値でレジスタを初期化する場合に比べて大変読みやすいコードを出力してくれると言うことですが、一方でマイコンの機能に加えてHALやLLの事を知っていないとCubeMXを使えないことを意味しており、決して手放しで喜べるわけではありません。また、STM32のHALにはかなり出来の悪い物もあります。それらはちっともHardware Abstractionをしてくれないので、レジスタレベルまで理解しておく必要があります。
一方で、かなりよくできているなと感じるのはクロックツリーの設定です。STM32F746のクロックツリーは複雑で、レジスタも使いにくい上にマニュアルも読みにくいため大変苦労しました。CubeMXはこのツリーをダイアグラムとして表示しつつ、直接設定を行うことができるため、非常に使いやすくなっています。
また、FreeRTOSが統合されており、プリエンプティブ・マルチタスクのRTOSをすぐに使うことが出来るという利点があります。FreeRTOSはTOPPERS/JSP, TOPPERS/ASPと異なり、コンフィギュレータ無しでタスクやセマフォを生成できます。この機能を活用して、ある種のペリフェラルは思い切ったカプセル化を進めることができそうです。
CubeMXは私がやろうとしている工作の範囲を全部カバーしているため、しばらくはこれをいじって遊んでいこうと思っています。
対象とするハードウェア
CubeMX、SW4STM32のいずれもSTM32シリーズ全種類をカバーするようです。私自身はSTM32F722を対象とします。Nucleo F722を購入したので、これをいじりながら理解を深めていく予定です。