MCU:マイコン,LPCマイコン,Cortex-M4コアテンプレート,FreeRTOS,LPCXpreosso54114,LPCXpresso SDK,freertos_generic,FreeRTOSConfig.h,周期処理

前稿の弊社FreeRTOSアプリケーションテンプレートのベースとなったMCUXpresso SDK付属FreeRTOSサンプルプロジェクトfreertos_genericの詳細、主にソフトウェアタイマ関連とその用途を説明します。

freertos_genericのHook関数とFreeRTOSConfig.h

Step5:FreeRTOS低電力動作
Step5:FreeRTOS低電力動作

前稿Step5でOSアイドルタスクの「Hook関数」にWFI()を追記し、FreeRTOSに低電力動作を追加しました。ベアメタル開発者には馴染みの少ないHook関数とは、MCU開発者がOSに独自処理を追加する仕組み(Wikipedia)です。ハッカーに悪用される危険性もありますが、元のOSソースはそのままで動作を変更できる便利な機能です。

freertos_genericは、このアイドルタスクの他に、スタックオーバーフロー、マロックエラーと、ソフトウェアタイマの周期割込みに後述のHook関数を用いています。スタックオーバーフローやマロックエラー発生時は、Hook関数内でMCUが動作停止しますので、対策検討の手始めになります。

これらソースコード内に記述したHook関数を有効にするには、FreeRTOSConfig.h内のマクロ設定が必須です。試しに、Step5で追記したWFIへブレークポイントを設定し、FreeRTOSConfig.hのconfigUSE_IDLE_HOOKマクロを1以外に設定するとWFIでブレークしません。configUSE_IDLE_HOOKを1に戻すと、当然ですがブレークします。

このように、ソースファイル記述よりも「FreeRTOSConfig.hのマクロが優先」されます。これが、前稿でFreeRTOSConfig.hを最重要ファイルとした理由です。

万一FreeRTOSConfig.hに記述ミスがあると、開発者が所望処理をソースへ加えても、何も無かったかのようにFreeRTOSは処理します。

そこで前稿新規プロジェクトのStep4で示したfreertos_genericのFreeRTOSConfig.hを上書きコピー後、オリジナルと内容一致を確認するのが良いと思います。但し、MCUXpresso IDEのColors&Fontを、例えばメイリオ11Pへ変えると、インデントやタブ表示なども変わるため見易く修正を加えた場合、Consolas利用のオリジナルと完全一致では無くなります。

Notepad++のCompareプラグイン実行結果。スペースが異なっても内容同じなら黄色、異なれば赤表示。
Notepad++のCompareプラグイン実行結果。スペースが異なっても内容同じなら黄色、異なれば赤表示。

そんな時に役立つツールが、Notepad++のCompareプラグイン機能です。コード内容が一致していれば挿入スペース数などが異なっても黄色、内容自体が異なれば赤で表示されるので、一目でソースコード内容差が判ります。筆者は、この機能を使ってFreeRTOSConfig.h記述ミスを回避しています。

freertos_genericソフトウェアタイマISRのHook関数

ソフトウェアタイマは、tick間隔2msの周期割込みを発生し、このISRがvExampleTimerCallback関数、このHook関数がvApplicationTickHookです。

vApplicationTickHookで2ms割込み発生を500回カウント後、イベントセマフォをprvEventSemaphoreTaskへ送出、イベントセマフォを取得したprvEventSemaphoreTaskが1秒毎に”Event task is running”をコンソールへ出力します。

freertos_genericソフトウェアタイマ処理の流れ
freertos_genericソフトウェアタイマ処理の流れ

vExampleTimerCallbackへのコード記述を少なくするのは常套手段で、ベアメタル開発でもFreeRTOSでも同じです。通常は割込みフラグクリアなどを行いますが、リロードタイマですのでvExampleTimerCallbackはカウンタインクリメントのみを行っています。

Hook関数vApplicationTickHookの500回カウント判断を変更すれば、2ms分解能で任意間隔のイベントセマフォ送出が可能です。これは、SWチャタリングやADCノイズ対策などの周期処理同期に最適です。

イベントドリブンが基本のFreeRTOSですが、割込み処理によりSWチャタリング対策を行うよりも、ソフトウェアタイマとそのHook関数を利用した周期ポーリング処理で行う方が簡単なのが判ります。

freertos_genericの原本

freertos_genericは、FreeRTOS DemoのHardware Independent FreeRTOS exampleがその原本です。原本には、より詳しい英文解説が付いています。また、前章のイベントセマフォによるタスク同期に比べ、45%高速でRAM使用量も少ないタスク通知方法など、FreeRTOS機能強化やTipsなど開発者向け情報も満載です。

6E販売開始予定の弊社FreeRTOSアプリケーションテンプレートを入手後、この開発者向け情報を活用し、FreeRTOSの更なる基礎固めと習得をお勧めします。

なお原本とfreertos_genericには、異なる動作箇所もあります。例えば、FRO:Free Run Oscillator=12MHz、System Clock=96MHzなどです。これはHardware Independentな原本を、LPCXpresso54114動作用にポーティングした結果、生じた箇所です。この部分が、freertos_genericに明記されていない場合もありますので、参照時には注意してください。

弊社は、NXP以外のMCUベンダCortex-M4クラス向けFreeRTOSアプリケーションテンプレートにも、このベンダ非依存のHardware Independent FreeRTOS exampleをベースとして使う予定です。

同一アプリケーションによるベアメタルとFreeRTOS比較が出来る特徴に加え、同一ベース利用によりベンダ間(例えば、STマイクロエレクトロニクスやCypressとNXP)のFreeRTOSアプリケーション開発比較も可能となると考えています。

freertos_genericソフトウェアタイマまとめ

開発中のNXP)LPCXpresso54114向けFreeRTOSアプリケーションテンプレートのベース、MCUXpresso SDK付属FreeRTOSサンプルプロジェクトfreertos_genericのソフトウェアタイマを説明しました。

ソフトウェアタイマのISRフック関数により任意周期イベントセマフォ送出が可能で、イベントドリブンが基本のFreeRTOSにおいて、SWチャタリングやADCノイズ対策などの周期ポーリング処理を行うのに適しています。

ソースコードに記述したフック関数は、FreeRTOSConfig.hのマクロ設定で有効になります。設定ミスを避けるため、オリジナルとの設定内容比較にNotepad++のCompareプラグイン機能を使いました。

なお、freertos_genericのQによるデータ送受信機能は、後半部分として別稿で説明する予定です。

あとがき

MCU開発初心者~中級の方が対象の販売中Cortex-M0/M0+/M3コアMCUテンプレートとは異なり、本稿Cortex-M4コア利用FreeRTOSアプリケーションテンプレートは、ベアメタルMCU開発経験を既にお持ちの方を対象としています。
※投稿内容と対象MCUは、コチラの一覧表を参照してください。

そこで本稿は、ベアメタルとFreeRTOS開発の差分などに関する説明は加えますが、ベアメタルは既知の内容として説明を省略しています(筆不精で、すいません😌)。

投稿内容が判りにくい場合やご質問などは、customerservice@happytech.jpへお寄せください。

MCU:マイコン,LPCマイコン,Cortex-M4コアテンプレート,アプリケーション,リアルタイムOS,IoTマイコン,FreeRTOS,LPCXpresso SDK,LPCXpresso54114,freertos_generic,FreeRTOSConfig.h

NXP)LPCXpresso54114(Cortex-M4/100MHz、Flash/256KB、RAM/192KB)で動作するFreeRTOSアプリケーションテンプレート開発に着手しました(関連投稿:FreeRTOSアプリケーションテンプレート構想)。

FreeRTOS Application Template (NXP Version)
FreeRTOS Application Template (NXP Version)

この開発で用いる新規FreeRTOSプロジェクト作成方法、新規作成プロジェクトとMCUXpresso SDK付属FreeRTOSサンプルプロジェクトとの違いを示し、FreeRTOSアプリケーションテンプレートのベースプロジェクトを解説します。

まとめ:新規FreeRTOSプロジェクト作成方法とFreeRTOSベースプロジェクト

新規NXP FreeRTOSプロジェクト作成方法をまとめました(詳細は、次章サンプルプロジェクト留意点の後に説明)。

Step1:MCUXpresso SDKで評価ボード選択
Step2:FreeRTOS選択(デフォルト:ベアメタル)
Step3:FreeRTOSドライバ選択(デフォルト+ユーザ追加ドライバ)し、新規プロジェクト作成
Step4:新規プロジェクトへ、サンプルプロジェクトのfreertos_generic.cとFreeRTOSConfig.hを上書き
Step5:アイドルタスクへ低電力動作WFI()を追記し、FreeRTOSベースプロジェクト完成

Step3までが、一般的なFreeRTOSプロジェクト作成方法、Step4と5が、弊社FreeRTOSアプリケーションテンプレート向け工夫箇所です。

弊社FreeRTOSアプリケーションテンプレートは、Step5で作成したFreeRTOSベースプロジェクトへ、例えばADC.cやLCD.cなど制御対象毎のソースファイルを追加して開発します(最初の図)。LCDを使わないアプリケーションの場合は、LCD.cをベースプロジェクトから除外すればそのまま使えるなどポータビリティも考慮しています。

Step3で、ユーザ未追加ドライバ、例えばFreeRTOSメールボックスドライバを、SDKを使わずにベースプロジェクトへ手動で追加するのは、手間やケアレスミスが発生します。

最初から全てのドライバをベースプロジェクトへ追加しておくのも1つの方法ですが、弊社は、必須ドライバでアプリケーションを開発し、追加が必要な時には、再度SDK新規プロジェクト作成からドライバを追加する方法を推薦します。

必須ドライバは、SDKサンプルプロジェクト:freertos_genericで使用中のドライバとADC、VCOMです。これらドライバを追加したベースプロジェクトであれば、FreeRTOSアプリケーションテンプレート構想3章で示したアプリケーション動作に必要十分だと現時点では考えています。

※サンプルプロジェクト:freertos_genericの詳細は、後日、別途投稿を予定しています。freertos_generic名称から判るように、キューやセマフォなど汎用FreeRTOS処理実装のサンプルプロジェクトです。サンプルプロジェクトの概略は、関連投稿を参照してください。

SDK FreeRTOSサンプルプロジェクトと新規作成プロジェクトの違い

MCUXpresso SDK付属のFreeRTOSサンプルプロジェクトと、前章の新規作成FreeRTOSプロジェクトは、ファイル構成が異なります。

FreeRTOSサンプルプロジェクトと新規作成プロジェクトの構成差(FreeRTOSConfig.hの場所が異なる)
FreeRTOSサンプルプロジェクトと新規作成プロジェクトの構成差(FreeRTOSConfig.hの場所が異なる)

構成が異なる理由は、サンプルプロジェクトがFreeRTOS個別技術の説明に重点を置いており、これに都合が良いファイル構成になっているからです。

つまり、左側のsourceフォルダ内にあるfreertos_サンプル.c とFreeRTOSConfig.hの2ソースコードさえ読めば、提供処理が判るように全てのサンプルプロジェクトが作成されています。
※FreeRTOSConfig.h は、FreeRTOS全体動作を決める最重要ファイルです。後日freertos_generic投稿時に説明を加えます。

右側新規作成FreeRTOSプロジェクトと比べると、ポータビリティなどは犠牲になっています。SDKやFreeRTOS自身もバージョンアップしますので、開発済みアプリケーションのポータビリティは重要です。

新規作成ファイル構成で開発したアプリケーションであれば、バージョンアップした環境でも開発済みアプリケーションの移設は容易です。

FreeRTOSサンプルプロジェクトは、機能理解専用と考えれば良いでしょう。なお、FreeRTOS基本機能は、弊社特集サイトを参照ください。

Step1:評価ボード選択

以降は、1章:まとめで示した新規FreeRTOSプロジェクト作成方法とFreeRTOSベースプロジェクトの詳細を示します。

Step1:評価ボード選択
Step1:評価ボード選択

MCUXpresso IDEのNew projectをクリックし、SDK Wizardで評価ボード:lpcxpresso54114を選択、Nextをクリックします。

Step2:FreeRTOS選択

Step2:FreeRTOS選択
Step2:FreeRTOS選択

ComponentsウインドのOperating Systemタブで、デフォルトbaremetalをFreeRTOS kernelへ変更します。

Step3:FreeRTOSドライバ選択

Step3:FreeRTOSドライバ選択
Step3:FreeRTOSドライバ選択

Driversタブでデフォルトドライバに加えadcとusart_freertosを追加します。Components selection summaryウインドのDriversを開くと、実装ドライバが一覧表示されます。Finishクリックで新規FreeRTOSプロジェクトを作成します。

Step4:freertos_generic.cとFreeRTOSConfig.h上書きコピー

Step4:FreeRTOS_generic.cとFreeRTOSConfig.hの上書きコピー
Step4:FreeRTOS_generic.cとFreeRTOSConfig.hの上書きコピー

作成した新規FreeRTOSプロジェクト(Project0)のsource>Project0.cとfreertos>template>ARM_CM4F>FreeRTOSConfig.hを、サンプルプロジェクトlpcxpresso54114_freertos_genericのsource>freertos_generic.cとFreeRTOSConfig.hで上書きします。

Step5:FreeRTOS低電力動作追記

Step5:FreeRTOS低電力動作
Step5:FreeRTOS低電力動作

FreeRTOSアイドル時に低電力動作させるため、上書きしたProject0.cのvApplicationIdelHook()へ、WFI()を追記します。BuildしFreeRTOSベースプロジェクトが完成です。

あとがき:ダークモードと日本語コメント

Step4と5の図は、MCUXpresso IDEのAppearanceをデフォルト:ClassicからDarkに変更しています。

流行のDarkの方が、コード自体は見易いがコメントの方は今一歩に感じます。弊社FreeRTOSアプリケーションテンプレートは、Colors and Fontsにメイリオ11Pを使い、追記日本語コメントを文字化け無しに表示する方針で開発します。ClassicかDarkかは、お好みで選択してください。

MCU:マイコン,Kinetisマイコン,STM32マイコン,Cortex-M4コアテンプレート,アプリケーション,IoTマイコン,mbed OS,FreeRTOS,Amazon Web Service,Azure,μITRON

2021年6E目標に、FreeRTOSアプリケーションテンプレート新発売(税込価格2000円予定)を目指しています。このFreeRTOSアプリケーションテンプレート構想を示します。

FreeRTOSアプリケーションテンプレート構想骨子

FreeRTOSアプリケーションテンプレート構成ボード
FreeRTOSアプリケーションテンプレート構成ボード
  • 実務利用可能なFreeRTOSアプリケーションテンプレート提供
  • FreeRTOS開発とベアメタル開発のアプリケーション直接比較可能
  • 第1弾はNXP)LPCXpresso54114のSDK(Software Development Kit)で開発、次回STMのコード生成ツールなど利用予定

FreeRTOSソフトウェア開発は面白いです。従来ベアメタル開発手法が使える部分と、新たにFreeRTOS向きの工夫が必要な部分、つまり差分があるからです。

弊社FreeRTOSアプリケーションテンプレートは、この面白さや差分を開発者に味わって頂き、IoT MCUのRTOS普及期に備えることを目的に開発しようと考えています。

対象者は、既にMCUベアメタル開発ができ、新たにFreeRTOSを習得したい開発者とします。過去に弊社テンプレートのご購入者様は、50%割引特典の1000円で購入できます。MCUコアは、FreeRTOS能力を十分引き出すCortex-M4クラスを利用します。

FreeRTOS講座問題点

MCUベンダによるFreeRTOS講座は、①FreeRTOS基礎知識、②FreeRTOSのIDE利用方法、③クラウド接続例など盛りだくさんの内容です。

  1. FreeRTOS基礎知識で、セマフォなどのFreeRTOS関連技術やタクス分割、ユーザタスクプライオリティ、RAM使用量増加などが理解できますが、サンプルコード以外の具体的なアプリケーションでもFreeRTOSを動作させたいと欲求不満になります。
  2. FreeRTOSのIDE利用時、特にコード生成ツールをIDEと併用する場合、①で使ったFreeRTOSサンプルソースコードに、更にベアメタル開発が前提のコード生成ツール出力コードも加わるため、追加分がFreeRTOS理解の邪魔になります。
  3. IoTクラウド接続にFreeRTOSは必須です。しかし、主流のAWS(Amazon Web Services)以外にもMicrosoftのAzureなどもあり、FreeRTOS以外の様々な知識(例えばMQTTプロトコルなど)がクラウド接続のためだけに必要です。

FreeRTOS本体とユーザ追加タスク、この「両方の動作」をしっかりと把握しないとFreeRTOS開発のメリットが享受できないこと、これがベアメタル開発との最大の差です。

FreeRTOSとベアメタルとの違いを理解することが最優先、2. はSDK利用で回避、3. は時期尚早です。

ベンダ講座の主旨は、①FreeRTOS基礎知識に加え、自社製品へのユーザ囲い込みも目的のため、②や③は必然です。しかし、現段階ではFreeRTOSそのものを知り、IoT MCUのRTOS普及期(FreeRTOS、Mbed OS、μITRONなど)に備えるためのツールが欲しいと思い、ネット検索しましたが見当たりません。

そこで、開発するのが弊社FreeRTOSアプリケーションテンプレートです。

FreeRTOSアプリケーションとベアメタル比較

FreeRTOSサンプルコードは、セマフォなどのFreeRTOSで使う技術解説が目的です。従って、サンプル付属タスクはシンプルで解り易く作られています。

サンプルコードは、実務アプリケーションとは乖離しており、タスク分割やユーザタスクが複数ある時の優先順位設定、RAM使用量がベアメタル比どれ程増加するかなど肝心のFreeRTOS実務利用時ノウハウは、サンプルコードからは判りません。

そこで、弊社が過去提供してきたベアメタル開発のIoT Baseboardテンプレートと同じ動作のアプリケーションを、FreeRTOSを使って開発します。つまり、同じ評価ボードで同じアプリケーション動作を、FreeRTOSとベアメタルの両方で開発します。

ベアメタル開発IoT Baseboardテンプレート(評価ボードはFRDM-KL25Z、これがLPCXpresso54114に変る)
ベアメタル開発IoT Baseboardテンプレート(評価ボードはFRDM-KL25Z、これがLPCXpresso54114に変る)

FreeRTOS/ベアメタル両アプリケーションの比較により、複数実務タスクでの優先順位設定やRAM増加量が具体的に判ります。また、優先順位やRAM使用法などのFreeRTOS重要パラメタを変えた時の動作変化も判ります。

もちろん一例にすぎませんが、FreeRTOS/ベアメタルのアプリケーション差、開発困難/容易、消費電力差など、実務開発時に知りたい事柄を評価でき、かつ、基本的なFreeRTOSアプリケーションのテンプレートとしても利用可能です。
※FreeRTOS/ベアメタル評価は、ご購入者様ご自身で行ってください。

FreeRTOSアプリケーションテンプレートは、下記動作を予定しています。

  • 評価ボード搭載LED周期点滅とVCOMメッセージ入出力
  • Arduinoプロトタイプシールド搭載ユーザSWプッシュによる搭載LED点滅
  • Baseboard搭載LCDメッセージ出力とポテンショメータADC変換値のLCD出力

FreeRTOS/ベアメタル両アプリケーションは、評価ボード+Arduinoプロトタイプシールド+Baseboardで動作確認済みです。FreeRTOSアプリケーションテンプレートには、FreeRTOS/ベアメタルそれぞれの動作プロジェクトファイルがあり、FreeRTOSアプリケーション詳細説明を付属資料へ添付します。
※ベアメタルアプリケーションの説明は、紙面が多くなり、過去弊社テンプレートご購入者様には不要ですので省略予定です。

SDKとコード生成ツールのAPI比較

FreeRTOSアプリケーションテンプレートの第一弾評価ボードは、NXPのLPCXpresso54114 (Cortex-M4/100MHz、256KB/Flash、192KB/RAM)を使います。

弊社MCU RTOS習得(2020年版)の解説にも使っていること、FreeRTOSサンプルコードが11種類と多く、かつSDKで提供されていることが理由です。

SDKとコード生成ツールのAPI比較は、コチラの関連投稿の3章をご覧ください。SDK利用を、関連投稿ではMCU設定タイプと記載しています。

APIパラメタが多いのがSDKです。このパラメタをFreeRTOS側でも使う可能性があること、コード生成ツールの使い方を別途説明しなくてもFreeRTOSサンプルコードのみに集中できること、これらも第一弾評価ボードにLPCXpresso54114を選定した理由です。

STマイクロエレクトロニクスのコード生成ツール:STM32CubeMXも、FreeRTOSアプリケーション開発に適応済です。第1弾はSDK利用ですが、STM32G4(Cortex-M4/170MHz、512KB/Flash、96KB/RAM)評価ボードなど、コード生成ツール利用のCortex-M4クラスMCUも、順次FreeRTOSアプリケーションテンプレートを開発したいと考えています。

クラウド接続はブラックボックスライブラリ利用

IoT MCUと接続するクラウドは、無償ではありません。接続には、クラウド側から有償接続ライブラリを取得し、これをIoT MCUのFreeRTOSへ組込んだ後、必要な接続APIを利用します。

有償ライブラリ自身は、ユーザがその内容を変える必要は無く、ブラックボックスとして利用するだけです。IoTクラウド接続時には必須ですが、FreeRTOS理解・習得時には不要です。

まとめ

Cortex-M4クラスのIoT MCUへFreeRTOSを利用するメリットは、独立の単体タクス設計ができ開発タスク資産化も容易なことです。

しかし、複数タスクをFreeRTOSで上手く動作させるには、タスク間の優先順位設計やRAMメモリ使用法などベアメタル開発には無かったFreeRTOS向けの新スキルが必要になります。

これらスキル習得とFreeRTOS基礎固め、FreeRTOS/ベアメタル比較評価のため、開発者個人で低価格購入できるFreeRTOSアプリケーションテンプレートを6E目標に開発予定です。これは、基本的なFreeRTOSアプリケーションのテンプレートとしても利用可能です。

発売時には、FreeRTOSアプリケーションで実際に使用した実務FreeRTOS技術、優先順位設計結果なども付属資料で示します。

本FreeRTOSアプリケーションテンプレートに関するご意見などは、info@happytech.jpへお寄せください。

MCU:マイコン,Kinetisマイコン,Cortex-M0+コアテンプレート,Cortex-M0+,IoTマイコン,Kinetis L,FreeRTOS,FRDM-KL25Z,IoT汎用Baseboard

FRDM-KL25ZとIoT汎用Baseboardを使った、NXP Kinetis Lシリーズ向けテンプレートを1000円(税込)で発売します。

IoT Baseboardテンプレート
IoT Baseboardテンプレート
IoT BaseboardテンプレートのVCOM
IoT BaseboardテンプレートのVCOM
IoT Baseboardテンプレート右横から
IoT Baseboardテンプレート右横から

Kinetis LシリーズとFRDM-KL25Z

超低消費電力と高性能を特徴とするNXPのKinetis Lシリーズは、2013年旧Freescale発売のCortex-M0+コア汎用マイコンです。FRDM-KL25Z(Cortex-M0+:48MHz、Flash:128KB、RAM:16KB)は、このKinetis Lシリーズ汎用マイコン習得ができる低コスト評価ボードです。

FRDM-KL25Zは、MCUXpresso SDK内にFreeRTOSとUSBのサンプルプロジェクトもあり、またmbed開発も可能です。様々なMCUアプリケーション開発に汎用的に使え、初心者から中級レベル以上の方でも満足できる仕様を持っています。

今年で発売から8年経過したKinetis Lシリーズは、最新のNXP開発環境MCUXpresso IDE/SDK/CFGでサポートされており、弊社Kinetis Lテンプレートもこの最新開発環境で開発しました。

Kinetis Lテンプレート

FRDM-KL25Z評価ボードのVCOMGPIOタッチスライダなどの基本的な使い方は、本ブログで既に説明してきました。

問題は、これら使い方を複数組み合わせてアプリケーションを開発する段階になった時、具体的にどうすれば開発できるかがマイコン初心者には解りにくく、つまずき易い点です。

Kinetis Lテンプレートは、この問題に対して1つの解決策を示します。詳細は、Kinetis Lテンプレートサイトと、付属説明資料のもくじ(一部ダウンロード可能)を参照ください。

FRDM-KL25Zで動作確認済みのKinetis Lテンプレートには、FRDM-KL25Z単体動作のシンプルなテンプレート応用例(Simpleテンプレート:下図)と、LCDやポテンショメータが動作し、様々なArduinoシールド追加も簡単にできるIoT汎用Baseboardとを併用したテンプレート応用例(IoT Baseboardテンプレート:最初の図)の2種類を添付しています。

Simpleテンプレート
Simpleテンプレート
SimpleテンプレートのVCOM
SimpleテンプレートのVCOM

マイコン初心者や中級レベル開発者の方が、テンプレート付属説明資料とSimpleテンプレートを利用するとKinetis Lシリーズの効率的習得、IoT Baseboardテンプレートを利用するとLCD/ADC動作済みでシールド追加も容易な段階からアプリケーション開発やIoTプロトタイプ開発が直に着手できるツールです。

これらテンプレートに、もくじ内容の付属説明資料を付けて1000円(税込)で販売中です。購入方法は、コチラを参照ください。

FRDM-KL25ZのFreeRTOSとUSB

MCUXpresso SDKが提供するFRDM-KL25Z評価ボードFreeRTOSサンプルプロジェクトは、弊社MCU RTOS習得(2020年版)で解説したNXP LPCXpresso54114 (Cortex-M4:100MHz、Flash:256KB、RAM:192KB)と同じ内容です。このRTOS習得ページを参照すれば、FRDM-KL25ZによるFreeRTOS理解も容易です。

また、難易度は高くなりますがUSBサンプルプロジェクトも、参考になる情報満載です。これらFreeRTOS、USBサンプルプロジェクトは、中級レベル以上のマイコン開発者に適しています。

初心者、中級レベル向け弊社Kinetis Lテンプレート付属説明資料には、FreeRTOS、USB関連情報は情報過多になるため含んでおりません。

テンプレート付属説明資料の範囲
テンプレート付属説明資料の範囲

しかし、テンプレートを使ってKinetis Lシリーズマイコン開発を習得すれば、スキルを効率的にレベルアップでき、難易度が高いFreeRTOSやUSB開発へも挑戦できます。

つまり、Kinetis Lテンプレートは、初心者、中級レベルの上級マイコン開発者への近道とも言えます。

あとがき

年末年始休暇中に、Cortex-M0+コアのKinetis Lテンプレート発売に何とかたどり着きました。

2021年は、Cortex-M4コアテンプレート化、無線やセキュリティなどのIoT MCU重要課題に対してサイト/ブログを見直すか?とも考えております。皆様のご意見、ご要望などをinfo@happytech.jpへお寄せ頂くと参考になります。

本年も引き続き、弊社マイコンテンプレートサイトと金曜ブログ、よろしくお願いいたします。

MCU:マイコン,Kinetisマイコン,Cortex-M0+コアテンプレート,Cortex-M0+,Arduino Uno,IoTマイコン,Kinetis L,FRDM-KL25Z,Baseboard

弊社が考えるIoT MCU向き汎用Baseboardを示します。要件は、(1)IoT MCU向き、(2)低価格、(3)入手性の良さです。

Arduino UNOプロトタイプシールド ブレッドボード付き(¥480)と、従来から使ってきたBaseboardを併用した汎用Baseboardの特徴、FRDM-KL25Zを使った3.3V MCUと5V LCDのCMOSデバイス直結適用例を示します。

図1 Arduino UNO プロトタイプ シールド ブレッドボード 付き
図1 Arduino UNO プロトタイプ シールド ブレッドボード 付き

NXP IoT Module Baseboard

“IoT Baseboard”で検索すると、NXPのIoT Module Baseboard($160)が現れます。これは、右下にLPC54018(Cortex-M4/180MHz)をAdd-onし、EthernetやSD Card等の機能追加を行う「専用」Baseboardです。Baseboardに加え、ArduinoコネクタでもLPC54108へ機能追加できることが判ります。

図2 IoT Module Baseboard(UM11079に加筆)
図2 IoT Module Baseboard(UM11079に加筆)

LPC54018専用Baseboardで$160と高価ですが、Arduinoシールドが追加できる点が重要です。つまり、IoT Module Baseboardで基本機能追加、開発用途に応じた機能追加はArduinoシールドやPmodで行うという2通りの機能追加方式です。

Arduinoシールドで、様々なプロトタイピング開発に対応できる訳です。

Arduinoシールド

多くのMCU評価ボードは、上記LPC54018専用Baseboardと同様、Arduinoコネクタで機能追加が可能です。安価で豊富な種類のArduinoセンサシールドが販売中であることがその理由です。

弊社IoT MCU汎用Baseboardも、Arduinoシールドで機能追加できることをポイントと考えました。FRDM-KL25Zを例に説明します。

FRDM-KL25Zは、Arduinoコネクタが未実装ですのでコネクタを追加したのが図3です。Arduinoコネクタは、複数シールドをスタッカブルに装着するため、上側がメス、下側がオスの貫通ピンで構成されます。

図3 Arduinoコネクタ追加のFRDM-KL25Z
図3 Arduinoコネクタ追加のFRDM-KL25Z

Arduinoコネクタピン(青色)と、FRDM-KL25Zピン(赤色)の対応表です。例えば、右下のPTA1は、D0に対応するなど、MCU評価ボード開発時は赤色ピン、これがArduinoコネクタ利用時は青色ピンへ変わります。

図4 Arduinoコネクタピン(青色)とFRDM-KL25Zピン(赤色)対応表
図4 Arduinoコネクタピン(青色)とFRDM-KL25Zピン(赤色)対応表

MCU評価ボードにはArduinoピンのシルク印刷はありません。開発するMCU評価ボードのArduinoコネクタ対応表をよく見て、MCU評価ボードピンとArduinoピンマッピングを間違わないように注意する必要があります。

Arduino UNOプロトタイプシールド プレッドボード付き

図1のArduino UNOプロトタイプシールドは、MCUボード上に装着してもFRDM-KL25Zのタッチセンススライダの操作はできます。また、評価ボード上のLED動作は、プロトタイプシールドのスルーホールから目視できます。

さらに、プロトタイプシールドには、評価ボードRESETに並列接続済みリセットボタンと2個のLED、1個のSWが実装されています(図1回路図参照)。

プロトタイプシールドのLEDとSWは、評価ボードとは未接続ですが、付属のブレッドボードを使って配線すれば、LチカなどのMCU動作確認にも便利に使えます。

※Arduino UNOプロトタイプシールド プレッドボード付きの動作は、5章:3.3V MCUと3.3V LCD接続で示します。

IoT MCU汎用Baseboardと適用例

以上のようにArduino UNOプロトタイプシールドは、Arduinoコネクタを持つMCU評価ボードの機能追加や動作テストに便利に出来ています。

そこで、このプロトタイプシールドを、弊社が従来から使ってきた5V動作Baseboardと併用します。

MCU評価ボードへのIoTセンサやセキュリティ機能などはArduinoシールドで追加、LCDやポテンショメータなどの機能は5V動作Baseboardにより追加、この2通り機能追加で「汎用開発」に使えるIoT MCU Baseboardになります。

MCU評価ボードとして3.3V動作FRDM-KL25Zと、Baseboard実装の「5V動作LCD」とをCMOSデバイス直結で接続した適用例を示します(CMOSデバイス直結は、関連投稿を参照してください)。

図5 IoT MCU汎用BaseboardのFRDM-KL25Z適用例
図5 IoT MCU汎用BaseboardのFRDM-KL25Z適用例

※IoTセンサシールド等を追加する場合は、MCU評価ボード(FRDM-KL25Z)の直上、または直下へスタック装着を想定しています。図5は、IoTセンサシールド等を省略した例と考えてください。

3.3V MCUと3.3V LCD接続

プロトタイプシールドを装着したFRDM-KL25Zへ、前章の「5V動作LCD」の代わりに「3.3V動作LCD」を接続した例も示します。FRDM-KL25Zソフトウェアは、どちらも同じものです。

関連投稿では未検証であった3.3V MCU開発ソフトウェア動作確認に、CMOSデバイス直結を利用し5V動作Baseboardが利用できることが、LCD表示が同じであることにより実証できました。

図6 プロトタイプシールド利用の3.3V MCU評価ボードと3.3V LCD接続例
図6 プロトタイプシールド利用の3.3V MCU評価ボードと3.3V LCD接続例

ブレッドボードに実装したのは、LCD表示コントラスト調整用スライド抵抗です。5V系センサ等と3.3V MCU評価ボードをCMOSデバイス直結時に必須となるMCU入力電流保護抵抗は、ブレッドボードへ実装し対応できます。

まとめ

Arduinoプロトタイプシールドと、従来から弊社が使ってきた5V Baseboard併用の、IoT MCU汎用 Baseboardを示しました。IoT関連の機能追加はArduinoシールドで、LCD等の機能追加は5V Baseboardで行い、低価格、入手性が良く、様々なIoT MCUプロトタイピングに使えます。

最低限必要なロジックをプロトタイプシールド付属ブレッドボードへ実装すれば、3.3V系MCU評価ボードと5V系ハードウェアの制御ソフトウェア開発に、CMOSデバイス直結が使えることを実証しました。

本稿で示したFRDM-KL25Z とIoT MCU汎用Baseboardを使ったKinetis Lテンプレートは、年内に発売予定です。ご期待ください。

サイト関連,RL78マイコン,MCU:マイコン,LPCマイコン,Kinetisマイコン,Windows,PC:パソコン,STM32マイコン,PSoC/PRoCマイコン,お知らせ,MSP432マイコン,Cortex-M0+コアテンプレート,IoTマイコン,セキュリティ,Firefox Send,ファイル共有,Google Drive,利便性

クラウドファイル共有サービス:Firefox Sendが2020年9月17日終了となりました。弊社テンプレート配布に最適なFirefox Send終了、残念です。代替にGoogle Driveを使いますが、送受双方に手間が1つ増えます。

本稿は、この増えた手間を説明し、セキュリティと利便性が相反することを示します。

Firefox SendからGoogle Driveへクラウドファイル共有サービス変更
Firefox SendからGoogle Driveへクラウドファイル共有サービス変更

Firefox SendとGoogle Drive比較

Firefox Sendは「ファイル共有」専門サービス。共有ファイル保存期間はアップロード後最大7日、または、ダウンロード1回で共有ファイルがオンライン上から自動的に消去されるなど、「ファイル保存」が主目的のGoogle Driveにない使い勝手がありました。

ファイル共有Firefox Sendとファイル保存Google Drive比較
Firefox Send Google Drive
ファイル共有期間 最大7日 設定不可
受信側ダウンロード回数 1回 設定不可
利用料金 無料(最大2.5GB) 無料(最大15GB)
ダウンロード側ログイン 不要 不要
パスワード保護 可能 可能
特徴 ファイル共有に最適 ファイル保存に最適

共有ファイルダウンロードリンクを送信側から受信側へメール通知、受信側がFirefox/Chrome/Edgeなどのモダンブラウザを使って共有ファイルダウンロードに成功しさえすれば、ファイル共有は終了です。ここまでは、Firefox SendとGoogle Drive全く同じです。Firefox Sendは処理完了です。

違いは、Google Driveがファイルの共有期間やダウンロード回数の制限を設けることができない点です。また、受信側が共有ファイルをダウンロードしたことを、送信側が知る手段もありません。

Google Driveでのダウンロード成功後、受信側に成功通知メールをお願いするのは、Firefox Sendでは自動で行われる共有ファイル削除、または、共有停止を送信側が手動にて行うためです。

Firefox Sendに比べ、Google Driveでは送受双方に処理完了までにこの手間が1つ余分に掛かる訳です。

Firefox Send終了理由

Firefox Sendサービス終了の理由は、マルウェア配布手段として悪用されるケースが増え、開発元Mozillaがサービスラインナップ全体コスト、戦略的焦点を見直した結果と発表されています。

高度な暗号化とファイル自動消去のFirefox Send共有サービスは、Firefoxという誰にでも知られた信頼性の高いダウンロードリンククリックだけで簡単にマルウェアをデバイスへ送れます。一般のユーザだけでなく、ハッカーにとっても便利なツールとして悪用されたのでしょう。

無料一時保存ファイルのマルウェア排除を実施することは、無理だとMozillaがあきらめたのだと思います。ただ、次々に生まれるマルウェア排除は、たとえ有料でも困難かもしれませんが…。

セキュリティと利便性の相反例です。また、セキュリティとその対価:費用対効果を考えさせる例でもあります。

企業が自社クローズドサーバーでのみ社員ファイル共有を許可するのは、費用対効果の実現解なのでしょう。
※同様に、IoT MCU開発でもセキュリティ実現解検討が必須です。

Google Drive代替理由

Firefox Send代替にGoogle Driveを選んだ理由は、ファイルの「ダウンロード前や共有前」に、ウィルススキャンが自動的に行われるからです。ウィルス検出時は、警告表示があります。

※ウィルススキャンは圧縮ファイルでも実施されます。但し、パスワード保護を行うとスキャン不可能になりますのでパスワードは設定しません。Firefox Sendでもこれら処理は実施されていたと思いますが…、ハッカーはパスワード保護でスキャンをかわしたのだと思います😥。

無償、セキュリティ、信頼度の高さ、モダンブラウザで利用できる点、これらからGoogle Driveを代替として弊社は選びました。

全テンプレート継続販売

販売中の弊社テンプレートは、戦略的焦点(???)から販売継続いたします。販売中止のサイト変更手間と消えるリンク対応などを考慮すると、そのまま継続販売する費用対効果が高いからです。

本ブログでは、その時々に応じてテンプレート販売中止・終了予定なども記載しますが、マイコンテンプレート名が購入サイトに掲載している限り販売は継続いたしますので安心(?)してご購入ください😌。

MCU:マイコン,Linux,Kinetisマイコン,Windows,PC:パソコン,Cortex-M0+コアテンプレート,ARMマイコン,Kinetis E,Kinetis Design Studio,IoTマイコン,FRDM-KL25Z,MCUXpresso IDE,Linux Mint,MCUXpresso SDK,FRDM-KE02Z40M,OpenSDA

Kinetis E(Cortex-M0+/40MHz、5V Robust)テンプレートv2開発障害となっている評価ボード:FRDM-KE02Z40MのOpenSDAとMCUXpresso IDEデバッガ間の接続問題は、残念ながら未解決です。今回は、このOpenSDA問題を簡単に整理します。また、Linuxによる第2のMCU開発環境構築の新設カテゴリも示します。

Kinetis OpenSDA

OpenSDA Block Diagram(出典:OpenSDA Users Guideに加筆)
OpenSDA Block Diagram(出典:OpenSDA Users Guideに加筆)

Figure 1は、MCUXpresso IDEとKineties MCU間のブロック図です。旧Freescaleは、Kinetis Design Studio:KDSというFreescale製IDEとKinetis MCU評価マイコンボード間の接続は、OpenSDAというインタフェースで接続していました。

このOpenSDAは、KDS直接接続だけでなく、PC(Windows 7)との接続時、File System(USBメモリ)として動作し、クラウド開発環境:mbed開発にも利用できる2種類のプログラミング機能を持ちます。

現在問題発生中のFRDM-KE02Z40MのOpenSDAも、Windows 7当時は問題なく動作していました。その結果、Kinetis Eテンプレートv1発売ができました。

MCUXpresso IDE接続問題(Windows 10)

Freescaleを買収したNXPは、自社LPCと新旧Freescale Kinetis両マイコンに新しい統合開発環境:MCUXpresso IDEを用意しました。このMCUXpresso IDEの評価ボード接続インタフェース一覧(一部抜粋)が下図です。

MCUXpresso SDK support platform(出典:Getting Started with MCUXpresso)
MCUXpresso SDK support platform(出典:Getting Started with MCUXpresso)

簡単に説明すると、MCUXpresso IDEは、NXP純正評価ボードEVKやLPCXpresso54xxx接続インタフェース:CMSIS-DAPと、新旧FRDM評価ボード接続インタフェース:OpenSDA v1系/v2系とmbedの3種類全てをサポートします。

接続問題が発生するのは、OpenSDAの一部です(表内にFRDM-KE02Z40Mが無いのは不安ですが、記載漏れだと思います)。FRDM-KL25Z(Cortex-M0+/48MHz、General Purpose)のOpenSDAは、MCUXpresso IDEと問題なく接続できています。

接続問題解決には、Figure 1のMSB Bootloaderを、MCUXpresso IDE対応済みの最新版へUpdateすることが必要です。

MSB Bootloader更新注意点(Windows 10)

MSB Bootloader更新方法は、評価ボードのリセットボタンを押しながらPC(Windows 10)とUSB接続し、エクスプローラーに現れるBootloaderフォルダへ、最新版:BOOTUPDATEAPP_Pemicro_v118.SDAをドラッグ&ドロップするだけです(FRDM-KE02Z40Mの最新Bootloaderは、コチラから取得できます)。

この操作後、再度評価ボードとPCを接続すると、今度はエクスプローラーに通常モードのFRDM-KE02Z40Mフォルダが現れ、更新完了となるハズです。ところが、筆者の評価ボードは、Bootloaderモードから通常モードへ復帰しません。

従って、MCUXpresso IDEとFRDM-KE02Z40MをUSB接続しても、IDEは評価ボード無しに認識します。

簡単に説明しましたが、実際はWindows 10でのBootloader 更新時、「Windows 7では不要であったストレージサービスの一時停止が必須」です(詳細は、コチラのNXP情報のStep 2を参照してください)。

調べると、Windows 8以降に一般的なユーザには知らせずに追加したWindows PCのUSBメモリへの隠しフォルダ書込み機能(これが上記一時停止するストレージサービス)が、諸悪の根源のようです。

FRDM評価ボードOpenSDA接続問題整理と対策(Windows 10)

以上を整理し、対策をまとめます。

・旧Freescale製FRDM評価ボードが、新しいNXP MCUXpresso IDEと接続できない原因は、評価ボードOpenSDAのMSB Bootloaderにあり、対策は、MCUXpresso IDE対応版Bootloaderへの更新を、Windows 10ストレージサービスを停止させた状態で行うことが必要。

旧Freescale製(つまりWindow 7対応)のまま入手したFRDM評価ボードは、FRDM-KE02Z40M以外でもIDE接続問題が発生することがありますので、上記まとめを参考に対策してください。

このまとめと対策にたどり着く前に、Windows 10でストレージサービスを停止せずにFRDM-KE02Z40MのOpenSDA MSB Bootloader更新を何度か繰返しました。評価ボードが、Bootloaderモードから通常モードへ復帰しない理由は、これかもしれません😥。

筆者は、Windows 7時代からFRDM評価ボードを活用してきました。まさか、Bootloaderモード時にWindows 10ではサービス一時停止が必須だとは思いもしませんでした。しかも、このサービスは隠しフォルダ対応なので、通常ではWindows 7と同様にBootloader更新が正常終了したように見えます。

事前に調査しなかった筆者が悪いのですが、旧Freescale評価ボード記載Windows 7対応マニュアル通りに対処すれば、筆者と同じトラブルに出会う人は多いハズです。

また、OpenSDAユーザズガイドにも上記トラブルからの復帰方法の記載はありません。ネット検索か、NXP communityが解決手段でしょう😥。解決方法が見つかれば、本ブログでお知らせします。

エンドユーザを無視したかのようなWindows 10の度重なる変更に起因するトラブルは、今後も増える可能性があると思います。次章は、その対策です。

Windows MCU開発者向けLinuxカテゴリ新設

筆者は、昨年からLinux MintでのMCUXpresso IDE開発環境もWindows 10のバックアップ用に構築しています。このLinux環境でも、残念ながら今回のトラブル回復はできていません。

今回はLinux/Windows両方NGでしたが、Windows以外の第2のMCU開発環境があると、何かと便利です。

そこで、本ブログで、Windows MCU開発に慣れた開発者が、簡単にLinuxを使うための情報も発信したいと思います。このための新設カテゴリが、PC:パソコン>Linuxです。
※親カテゴリPC:パソコンへ、LibreOfficeとWindowsも移設しました。

Windows 10、Linuxともに単なるPC OSです。Linux上でMCU開発アプリケーション、本ブログではNXP MCUXpresso IDEやSTM STM32CubeIDEを利用するために、最低限必要な情報に絞って説明する予定です。

Linux情報量もまたWindows同様多いのですが、Windowsに慣れたMCU開発者としては、当面不要な情報も多く、Windowsの代わりにLinuxを短期間で効率的に活用するMCU開発環境構築が目標・目的です。今回のようなWindows PCでのトラブル発生時、Linux PCへ移ってMCU開発を停止することなく継続するのが狙いです。

MCU Devopments Windows and Linux 2 Routes
MCU Devopments Windows and Linux 2 Routes

Linuxのシステム動作要件は下記で、Windows 10よりも低いので、古いPCでも快適に動作します。ただし新しいOS利用なら「64ビットCPUは必須」ですが…😅。32ビットPC OSの新規開発は、終了しました。

  • 1GB RAM (2GB recommended for a comfortable usage)
  • 15GB of disk space (20GB recommended)
  • 1024×768 resolution

COVID-19の影響で、市場に中古PCが安価で数多く出回っていますので、これら活用も一案かと思います。

MCU:マイコン,STM32マイコン,Cortex-M0+コアテンプレート,セキュリティ,STM32G071,STM32G0x,STM32CubeIDE,STM32G0 FW,HAL API

STマイクロエレクトロニクス統合開発環境STM32CubeIDEのHAL APIを利用し開発したSTM32G0xテンプレートVersion2を、6月1日から発売します。

上記弊社サイトよりテンプレート付属説明資料P1~P3が無料ダウンロードできますので、ご検討ください。

STM32G0xテンプレートV2内容

従来よりも高性能で低消費電力動作の新汎用MCU:STM32G0シリーズのアプリケーション開発を、初心者でも簡単に始められ、しかも、処理能力やセキュリティ要求が変化した場合でも、開発資産を活かしたままMCU変更が可能なHAL APIプログラミングに重点を置きました。

そこでVersion2では、LL APIからHALAPI利用アプリケーション開発用テンプレートへの変更、統合開発環境SW4STM32から、STM32CubeIDEへの変更に対応しました。

STM32G0xのもう一つの特徴であるセキュアブート、セキュアファームウェア更新機能を活用する機能は、G0xテンプレートV2以降で対応します。

これらセキュリティ機能は、関連投稿:STM32G0/G4のRoot of Trust(1)~(3)で示したように、IoT MCUでは必須です。これら実装のメインストリーム(=汎用)・マイコンは、現在G0/G4シリーズです。

Root of Trust対応中のSTM32マイコン一覧(出典:FLXCUBESBSFU0819J)
Root of Trust対応中のSTM32マイコン一覧(出典:FLXCUBESBSFU0819J)

汎用性とセキュリティの両方を持つSTM32マイコンをご検討中の方は、先ずはSTM32G0xテンプレートV2で汎用性の部分をマスターできます。

STM32G0xテンプレートV2のご購入、お待ちしております。

Windows 10 May 2020 Update(バージョン2004)対策

5月28日、Windows 10の新バージョン2004の配布が始まりました。残念ながら、早くも複数の大型更新トラブルが発生中です(10件の更新トラブル情報)。

Fast/Slow リングの目的、月一Windows 10 Updateでの多くのトラブル、一般PC利用者への悪影響…等々、このところのMicrosoftは、何か変だと思わずにはいられません。

バージョン2004への更新を暫く避けようと考えている方は、Pro/Homeともに、コチラの方法が参考になります。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M0コア,Cortex-M3コアテンプレート,STM32F1x,STM32F072RB,STM32F103RB,STM32CubeMX,STM32F0x,STM32CubeIDE

STマイクロエレクトロニクス統合開発環境STM32CubeIDEのHAL APIを利用し開発したSTM32FxテンプレートVersion2を発売します。

上記サイトよりテンプレート説明資料P1~P3が無料ダウンロードできますので、ご検討ください。本稿は、この「ダウンロード以外」の資料項目を簡単に示します。

全ツールビルトインSTM32CubeIDE

STM32CubeIDEは、従来は別ツールとして提供してきたSTM32CubeMXがビルトイン済みです。しかも開発ツール全てが自動的に最新版へ更新します。もちろんHelp>Check for Updatesで手動更新も可能です。

2020年5月15日現在のブログ関連STM32MCUに関係するSTM32CubeIDE状況が下図です。

STM32CubeIDE状況(2020年5月15日現在)
STM32CubeIDE状況(2020年5月15日現在)

STM32FxテンプレートV2は、HAL(Hardware Abstraction Layer)API利用アプリケーション開発用テンプレートですので、MCU性能過不足時、他のSTM32MCUコアへも開発アプリケーションが流用可能で、プロトタイプ開発に最適です。

STM32FxテンプレートV2ダウンロード説明資料以外の概略

以下、単語の頭に付くSTM32は省略して記述します。また、付属説明資料も同様にSTM32を省略記述していますので、ご注意ください。

AN記載CubeMXプロジェクトが読めない時の対策

アプリケーション開発の出発点となるビルトインツール:CubeMXが最新版へ自動更新されるのは、次々に発売される最新STデバイスを直ぐに開発できるメリットがあります。しかし、逆に開発者が参照するアプリケーションノート(AN)記載のCubeMXプロジェクトとの版数差が大きくなるデメリットもあります。

この版数差が大きくなると、AN記載CubeMXプロジェクトが、ビルトインCubeMXで読めない場合があります。特にF0/F1シリーズなど古くから提供されてきたデバイスのANに顕著です。STM32FxテンプレートV2付属説明資料で、この対策を示しています。

CubeIDE新規プロジェクト作成(1)/(2)/(3)の違い

STM32CubeIDEの3新規プロジェクト作成の差
STM32CubeIDEの3新規プロジェクト作成の差

CubeIDEユーザマニュアル:UM2553には、本日時点で新規プロジェクト作成説明は(1)/(3)のみです。未説明の最新版新規プロジェクト作成(1)/(2)/(3)の違いなど、開発をスムースに進める様々なTipsも説明資料に加えています。

CubeMX変更箇所、別資料化

STM32FxテンプレートVersion1では、CubeMX周辺回路の設定をテンプレート説明資料内に記載しておりました。ご購入者様からのご質問も、このCubeMX設定に関するものが多く、このツールの重要性が判ります。

そこでVersion2は、このCubeMX設定をCubeMX変更箇所.pdfとして別資料化し、CubeIDEプロジェクト内に添付しました。CubeMXプロジェクト編集時に、同時参照ができます。

STM32CubeIDEプロジェクト内添付のSTM32CubeMX変更箇所説明資料
STM32CubeIDEプロジェクト内添付のSTM32CubeMX変更箇所説明資料

例えば、ベースボードテンプレートのLCD接続に利用したSTM32F0評価ボード:Nucleo-F072RBのGPIOピン設定方針なども記載しています。CubeMXピン配置は、MCUパッケージで選択しますので、評価ボード利用のCubeMX使用ピン設定時に、下図は便利だと思います。

ベースボードと評価ボード接続時のSTM32CubeMX使用ピン設定方針
ベースボードと評価ボード接続時のSTM32CubeMX使用ピン設定方針

STM32FxテンプレートV2と添付説明資料を使うと、STM32汎用MCU開発をスムースに進められます。

STM32FxテンプレートV2のご購入、お待ちしております。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M0コア,Cortex-M3コアテンプレート,STM32F1x,STM32F072RB,STM32F103RB,STM32CubeMX,STM32F0x,STM32G071,STM32G0x,STM32CubeIDE

サードパーティ仏)AC6社の統合開発環境SW4STM32で開発したSTM32FxテンプレートとSTM32G0xテンプレートを、新しいSTマイクロエレクトロニクス純正STM32CubeIDE対応のVersion2:V2へ更新し販売開始します(STM32Fxテンプレートは2020/05/15、STM32G0xテンプレートは2020/05/30)。

V2では、V1ご購入者様から頂いたご意見ご感想を反映し、新しいSTM32CubeIDEやビルトインSTM32CubeMX使い方説明に工夫を加え、開発トラブル回避、既存アプリケーション資産活用方法などの新たなTipsも添付解説資料に加えました。

テンプレートと合わせてスムースなSTM32MCUアプリケーション開発にお役に立てると思います。

本稿は、説明を工夫したSTM32CubeIDEビルトインSTM32CubeMX使い方の一部を紹介します。

STM32CubeMX使い方:コツ

※以下、用語の頭に付く「STM32」は省略して記述します。

MCU周辺回路の初期化コードを自動生成するCubeIDEビルトインCubeMXも、以前投稿したスタンドアロンCubeMXの使い方と同じです。

CubeMXはSTM32MCU開発の出発点となるツールですので、十分理解した上で着手したいものです。テンプレートV2では、ビルトインCubeMXが生成するファイルに着目し、説明に以下の「使い方のコツ」と「簡単な順位」を追加しました。

CubeMXは、生成するファイル数が多い上に、使用するMCU周辺回路が増えると、生成コード量も多くなり、初めての方には少し解りにくいツールです。弊社テンプレートV1も、このCubeMXに関する質問を多く頂きました。それでも、コツを知っていれば十分使いこなせます。

そのコツとは、以下2点です。
・チェックが必要な自動生成ファイルは、main.hのみ
・main.cに自動追加される周辺回路ハンドラと、初期化コードが分かれば使える

F1シリーズSTM32F103RBの評価ボード:Nucleo-F103RBに弊社テンプレートを応用した例で説明します。

STM32CubeMX生成のF1BaseboardTemplateファイル構成
STM32CubeMX生成のF1BaseboardTemplateファイル構成

CubeMXが自動生成するファイルが、赤:CubeMX生成欄の9個です。このうち注目すべきは、太字赤☑で表示したmain.hとmain.cです。

main.hは、CubeMXで設定したユーザラベル、評価ボードならばB1[Blue PushButton]やUSART_TX/RX、LD2[GreenLed]などを定義した生成ファイルです(※[ ]内は、自動生成時に削除されますので覚え書きなどに使えます)。

main.hのコメント:Private definesの後にこれらの定義が生成されます。これら定義をチェックしておくと、「CubeMX自動生成コードを読むときに役立ち」ます。

main.cは、CubeMXが生成するメイン処理で、評価ボードのCubeMXデフォルトでコード生成:(Alt+K)した場合には、main.cのコメント:Private variablesの後にUSARTハンドラ:huart2と、コメント:Private function prototypesの後にUSART2の初期化コード:MX_USART2_UART_Init()と、その「初期化コード本体がmain.cソースの後ろの方に自動生成」されます。

その他の7個ファイルは、当面無視しても構いません。CubeMXデフォルトのHAL (Hardware Abstraction Layer)APIを利用し、割込みを使わない限り、ユーザコードには無関係だからです(※7個ファイルを知りたい方は、関連投稿:STM32CubeMX生成ファイルのユーザ処理追記箇所を参照してください)。

CubeMXが周辺回路:USART2初期化コードとそれに使う定義を自動生成済みなので、後は、main.cの無限ループ内の指定区間:USER CODE BEGIN xyz~USER CODE END xyzに、Usart2やLD2を使ったHAL APIユーザコードを追記すれば、アプリケーションが完成します。

追記したユーザコードは、再度CubeMXでコード生成しても、指定区間のまま引き継がれます。

ちなみに、アプリケーションで使用可能なHAL APIは、Ctrl+Spaceでリスト表示されます(Content Assist)。そのリストから使用するHAL APIを選択すれば、効率的なユーザコード追記が可能です。
※Content Assistの賢いところは、「ソースコード記述の周辺回路ハンドラを使ってHAL APIをリスト化」するところです。記述なしハンドラのAPIはリスト化されません。

つまり、CubeMXのPinout & Configurationタブで周辺回路を設定後コード生成しさえすれば、直ぐにユーザコードを追記できるファイルが全て自動的に準備され、これらファイルの指定区間へユーザコードを追記すれば、アプリケーションが完成する、これがCubeMXの使い方です。

このCubeMX使い方理解に最低限必要なファイルが、簡単順位:0のmain.hとmain.cの2個です。CubeMX生成ファイル数は9個ありますが、先ずはこの2個だけを理解していれば十分です。

LD2を点滅させるアプリケーションなどを指定区間へ自作すると、具体的に理解が進みます。

STM32CubeMX使い方:周辺回路のファイル分離

評価ボードのCubeMXプロジェクトファイル(*.ioc)は、デフォルトでB1[Blue PushBotton]とUSART2、LD2[GreenLed]を使っています。これらは、評価ボード実装済み周辺回路です。

これら評価ボード実装済み周辺回路へ、弊社テンプレートを適用したのが、シンプルテンプレートです(表:シンプル追加の欄)。

例えば、B1スイッチ押下げ状態をSW_PUSH、USART送信タイムアウトをUSART2_SEND_TIMEOUTなどソースコードを読みやすくする定義の追加は、CubeMX生成main.hの指定区間へ追記することでもちろん可能です。

しかし、他MCUコアへの移植性や変更のし易さを狙って、あえて別ファイル:UserDefine.hへこれらを記述しています。

同じ狙いで、LD2とB1、USART2のユーザ追記制御部分を、Led.cとSw.c、Usart2.cへファイル分離しています。ファイル分離により、HAL API利用のためMCUコア依存性が無くなり、例えば別コアのF0やG0評価ボードで同じ周辺回路を使う場合は、そのファイルのまま流用可能になります。

これらファイル分離した周辺回路の追記制御部分を、main.cの無限ループと同様に起動するのが、Launcher.cです。

つまり、シンプルテンプレートは、評価ボード実装済み周辺回路に、何も追加せずに弊社テンプレートを適用したシンプルな応用例です。その理解に必要なファイルが、緑:シンプル追加欄の☑で、簡単な順に1~5の番号を付けています。

CubeMXのそのままの使い方で周辺回路を追加すると、生成ファイル数は、赤:9個のままですが生成コード量が増えます。周辺回路の初期設定コード増加は当然ですが、この部分はCubeMX自動生成のためミス発生はありません。

しかし、ユーザコード指定区間へ、追加した周辺回路の制御コードを追記するのは、ユーザ自身です。様々な周辺回路制御が混在し追記量が増えてくると、バグやケアレスミスの元になります。

この対策に、周辺回路毎にファイルを分割し、この分割したファイルへ制御コードを記述するのが、シンプルテンプレートです。1周辺回路の制御コードが1ファイル化されていますので、簡単順位1~5の内容は、どれもとても簡単です。

さらに、ADC制御やLCD制御など、殆どの組込アプリケーションで必要になる周辺回路を追加し、Baseboardと評価ボードを結線、デバッグ済みのアプリケーションがベースボードテンプレートです(橙:ベースボード追加欄の3個)。

ユーザ追加ファイルは、全てMCUコア依存性がありません。CubeMXのHAL APIコード生成を行えば、コアに依存する部分は、CubeMX生成ファイル内に閉じ込められるからです。つまり、ユーザ追加ファイルは、全てのSTM32MCUへ流用できる訳です。

これらシンプルテンプレート、ベースボードテンプレートから新たなSTM32MCUアプリケーション開発を着手すれば、新規にアプリケーションをゼロから開発するよりも初期立上げの手間を省け、さらに機能追加や削除も容易です。

STM32CubeMX使い方:周辺回路プロパティ、既存AN利用法

CubeMXへ追加した周辺回路のプロパティ設定値やその理由、更に、既存アプリケーションノート利用方法など、新しいSTM32CubeIDE開発トラブルを回避し、スムースに開発着手できる様々なTipsをテンプレート添付説明資料へ加えています。

マイコンテンプレートサイトでSTM32Fxテンプレートは2020/05/15、STM32G0xテンプレートは2020/05/30発売開始です。ご購入をお待ちしております。
※STM32Fx/G0xテンプレートV1ご購入後1年以内の方は、後日V2を自動配布致しますのでお待ちください。