STM32CubeMXの使い方Tips

STM32CubeMXは、STM32Fxマイコンのコード生成ツールとして良く出来ています。但し、現状1つ残念なことがあります。HAL:Hardware Abstraction Layerに加え、BSP:Board Support Packagesをドライバとして出力しないことです。そこで、現状のHALドライバのみ出力に対策を加えます。

STM32CubeMX
STM32CubeMX

STM32Fxファームウエア構成

STM32Fx Software Structure
STM32Fx Software Structure

STM32Fxファームウエア構成が上図緑線の個所です。STM32Fxマイコンサンプルソフトは、使用するファームウエアライブラリに応じて、Low Layer examples、Mixed HAL & Low Layer examples、HAL examplesの3種類あります。

各ファームウエアの差や、サンプルソフトの場所は、以前記事で解説しました。ここでは、STM32F0からSTM32F1へのポータビリティが最も高いHALライブラリ(=ドライバ)を使うサンプルソフト:HAL examplesに的を絞って解説します。

HAL Examples

このサンプルソフトの優れた点は、評価ボード実装済みの青SW(USER Blue)と緑LED(LD2)のみで全てのサンプルソフト動作を確認できることです。SW入力と、LED点滅間隔を変えることで、正常/NG/入力待ちなど様々なサンプルソフトの動作状態を表現します。

この青SWと緑LEDを制御するには、GPIO定義とHALライブラリを組合せた一種のサブルーティンがあると便利です。このサブルーティンが、BPS:Board Support Packagesです。例えば、下記などです。

BSP_LED_On()、BSP_LED_Off()、BPS_LED_Toggle()、BPS_PB_GetState()

BSP_が先頭に付いているので、一目で評価ボード実装済みの青SWや緑LEDを制御していることが判りますし、HALライブラリを使って表現するよりも、可読性もより高まります。BPSの中身は、HAL自身ですので、Drivers層のBSP、HALともに同じ黄緑色で表示しています。

HAL exampleは、これらBSPとHAL両方を使って記述されています。

STM32CubeMX

STM32CubeMXは、最初に使用する評価ボードを選択後、コード生成が行えます。

STM32CubeMX Board Selector
STM32CubeMX Board Selector

但し、生成コードに含まれるのは、HALドライバのみです。BSPは、HALサブルーティンですので、自作もできますが、評価ボードを選択するのですから、せめてHALのみか、それともHALとBSPの両方をドライバとして出力するかの選択ができるように改善してほしい、というのが私の希望(最初に言った現状の残念なこと)です。

もしHALとBPSドライバ両方がSTM32CubeMXで出力されると、多くのHAL Examplesを殆どそのまま流用できるメリットが生じます。HAL Examplesは、残念ながらエキスパートの人手で開発したソースですが、これを自動コード生成の出力へ、より簡単に流用できる訳です。

STM32CubeMX出力ファイルへのBSP追加方法

BSPドライバを自動出力しない現状のSTM32CubeMXで、上記希望をかなえる方法は、簡単です。

STM32CubeMX出力ファイルへのBSP追加
STM32CubeMX出力ファイルへのBSP追加

手動でBSPのstm32f0xx_nucleo.cとstm32f0xx_nucleo.hをSTM32CubeMX生成プロジェクトのSrcとIncフォルダへコピーし、main.cのL43へ、#include “stm32f0xx_nucleo.h”を追記すればOKです。
※stm32f0xx_nucleo.c/hは、\STM32Cube\Repository\STM32Cube_FW_F0_V1.8.0\Driversにあります。

たとえSTM32CubeMXで再コード生成しても、stm32f0xx_nucleo.c/hはそのままですし、追記した部分もそのまま転記されます。この方法で、HAL Examplesの流用性が向上します。

HAL Examplesを読むと、周辺回路の細かい設定内容が解ります。この設定をそのままSTM32CubeMXに用いれば、周辺回路の動作理解が進み、さらに自動コード生成ソースへ、Examplesソースをそのまま流用できるので、評価ボードでの動作確認も容易です。

まとめ

現状のSTM32CubeMXは、BSPドライバを出力しません。対策に、手動でBSPドライバを追加する方法を示しました。これによりエキスパートが開発したサンプルソフトを、より簡単に自動生成ソフトへ組込むことができます。

開発中の弊社STM32Fxテンプレートも、サンプルソフトを流用/活用が使いこなしのポイントです。そこで、このBPSを組込む方法をSTM32Fxテンプレートへも適用し、サンプルソフト流用性向上を図っています。

評価ボードNUCLEO-F072RB/F103RBのピン選択指針

STマイクロエレクトロニクスの評価ボード、NUCLEO-F072RBやNUCLEO-F103RBを使って、ボード外部と接続する際の、ピン選択に関する指針を示します。

NUCLEO-F072RBの外部接続ピン
NUCLEO-F072RBの外部接続ピン

評価ボードのピン配置とSTM32CubeMXのピン選択

評価ボードには、外部接続用のピンとしてArduinoピン(ピンク色)と、NUCLEOボード独自のMorphoピン(青色)があり、Morphoピンの一部は、Arduinoピンと共用(赤囲み)です。2つの黄色マークは後述します(評価ボードのユーザマニュアルは、コチラを参照)。

Arduinoピンは、メスコネクタ、一方Morphoピンは、オスコネクタを使っており、ブレッドボードや弊社マイコンテンプレートで使うBaseboardとの接続には、Arduinoピンを使いオスーオス結線が便利です(Baseboardやオスーオス結線のメリットはコチラの記事を参照)。

評価ボードNUCLEO-F072RB (=STM32F072RB)やNUCLEO-F103RB (=STM32F103RB)を使う時のコード生成ツールが、STM32CubeMXです(STM32CubeMXはこちらの記事などを参照)。

STM32CubeMXは、MCUパッケージイメージから使用ピンを選択、設定します。色付きピンは、既に評価ボードで使用済みのピン、灰色ピンが未使用ピンです。

例えば、灰色ピンのPB7は、I2C 1_SDA~GPIO_EXIT7までの広い範囲で自由に機能を設定可能です。

STM32CubeMXのピン選択
STM32CubeMXのピン選択

STM32F072RBとSTM32F103RBは、どちらもLQFP64パッケージでピンコンパチです。緑色のB1 [Blue Push Button] :PC13と、LD2 [Green LED] :PA5の2ピンを評価ボードで使用しますので、前述の評価ボード接続ピンに、既に使用済みという意味で黄色マークを付けました。

長くなりましたが、ここまでが、前置きです。これらの前置きを知ったうえで、STM32CubeMXで自由に設定できる灰色ピンの内どれを使うと、効果的な評価ボード開発ができるのかを明らかにするのが本記事の目的です。

STM32CubeMXのピン選択指針

STM32F072RBやSTM32F103RBのソフト開発の場合、最初にSTM32CubeMXで使用ピンを決め、コード生成をします。もちろん使用ピンは、コード生成後も変更できますが、変更のたびに再コード生成が必要です。再コード生成の手間は、できれば避けたいです。

こんな時、ピン選択の指針があると便利です。

前置き情報から、Arduinoピンを使うと、ブレッドボードやBaseboardとの接続が、オスーオス結線で簡単、市販Arduinoシールドも使えることが判ります。そこで、Morpho ピンで、Arduinoピンと共用しているピンを昇順に抜粋すると、下記になります。

GPIOA:            PA0/PA1/PA2/PA3/PA4/PA5/PA6/PA7/PA8/PA9/PA10
GPIOB:            PB0/PB3/PB4/PB5/PB6/PB8/PB9/PB10
GPIOC:            PC0/PC1/PC7/PC9

GPIOAが多数ですが、Arduinoピン名をみるとA0などのアナログ入力ピンとの共用が多いので、デジタル入出力と思われるD0~D15での共用が多いGPIOBから先に割り当てる方針を立てました。

BaseboardとのLCD接続

この方針でBaseboardのLCDと接続し、LCD出力した例を示します。本方針が、LCD接続では有効であることが判ります。

NUCLEO-F072RBとBaseboard接続しLCD出力
NUCLEO-F072RBとBaseboard接続しLCD出力

まとめ

開発中のSTM32Fxマイコンテンプレートは、テンプレート応用例としてシンプル/Baseboardテンプレートの2つを添付します。シンプルテンプレートは、評価ボード単体で動作しますので、使用する外部接続ピンに悩む必要はありません。

Baseboardテンプレートは、評価ボードとBaseboardを接続して動作させますので、効果的な接続方法として、評価ボード外部接続ピンの選択指針を検討しました。

デジタル接続なら、Arduinoピンとのデジタル共用が多いGPIOBから選択し、アナログ接続なら、GPIOAから選択する指針を示し、この指針に基づいてBaseboardのLCDと接続し出力を確認しました。

追記

評価ボードのArduinoとMorphoの共用コネクタ部分の回路図を抜粋したのが下図です。

NUCLEO64 Boardのコネクタ回路図
NUCLEO64 Boardのコネクタ回路図(ユーザマニュアルより)

評価ボード裏面のジャンパー(回路図のSBxxなど)を、工夫(オープン/ショート)すると、ArduinoピンとMorphoピンの共用ピンをさらに変更できることが判ります。よく考えられた評価ボードです。

RL78ファミリのロードマップ

最新RL78 MCUファミリのカタログから、ルネサスRL78 MCUの開発ロードマップを抜粋しました。今後のRL78 MCUの方向性として、アナログ、センサ対応力強化が見えてきます。

RL78ロードマップと周辺回路の強化ポイント

RL78ロードマップ
RL78ロードマップ(カタログP2より)

ページ2ロードマップの赤字コメントは、ルネサスがその製品特徴を一言で表したキーワードです。緑色新製品MCUの赤字記載で目立つのは、アナログ強化とセンサです(ここでは、前提条件として無償版開発環境CS+で開発できるMCUでフィルタリングするので、ROM64KB以上の製品は除外します)。

さらに、このアナログ強化とセンサの詳細内容をカタログ記載の各MCUから読むと、S1/S2/S3コアへ、周辺回路PGA:Programmable Gain Amplifierとコンパレータ、ADC/DACを強化した製品であることが判ります。汎用製品でも、よりIoT向けのMCUへ変化しつつあることが、同ページのRL78応用分野からも解ります。

ARM Cortex-M系に勝るRL78の高品質サンプルソフト

ARM Cortex-M系が全盛な低価格MCUの市場で、唯一独自16ビットS1/S2/S3コアでライバルと争っているRL78。この市場で生き残るには、価格や開発環境の良さに加えて、実際の開発がラク、手軽になることです。

前回、RL78開発者の方々へ少し悲観的な記事を書きましたが、RL78 MCUは、使えるサンプルソフトが豊富で解説が親切、理解しやすいことも特徴です。サンプルソフトの良さ悪さは、アプリケーションの早期開発(=プロトタイピング)には重要な要素です。プロトタイピングには、ルネサスの高品質サンプルソフトと、弊社RL78/G1xテンプレートを活用してください。

開発環境CS+のサンプルソフトは、付属のスマートブラウザーを使うと、検索が簡単です。

CS+スマートブラウザーによるサンプルソフト検索
CS+スマートブラウザーによるサンプルソフト検索

残念ながら、サンプルソフトの質は、評価しにくい項目なので、MCU選定時の項目からは除外されがちです。本ブログでは、RL78サンプルソフトの質が優れた特徴をもっとアピールしていきたいと考えています。

*  *  *

PS:LPC81x/82x共通化を目指したLPC8xxテンプレートV3の開発は、7Eを予定していましたが、LPCOpenライブラリv3.01付属サンプルソフトに複数の不具合があるため、一時停止としました。これら不具合解消後、再開します。