STM32G0x性能をフル発揮するアプリケーションのプロトタイプ開発に最適です。※STM32G0xや専用テンプレートの本ブログ関連投稿は、下欄タグ🏷:STM32G0x、または、専用テンプレートをクリックしてください。APIテンプレートも添付します。同一アプリケーションでのLLとHALのリソース使用量、ユーザ記述量、API可読性などを具体的に評価・分析できます。全て評価ボード:Nucleo-G071RB上で動作確認済みです。STM32G0x専用テンプレート適用例SimpleTemplateは、最も簡単なテンプレート適用例で、基本的なSTM32G071RB周辺回路とテンプレート動作が理解できます。12ビットADC制御をSimpleTemplateに追加し、全てのSTM32G0xプロトタイプ開発の起点となるテンプレートです。APIテンプレートを提供します。API利用アプリケーションプロジェクトです。※HAL版はAPI比較評価用です。APIでのみSTM32G0x性能をフルに引き出すことができます。APIを利用したソフトウェア開発を希望される方は、STM32Fxテンプレートの購入をご検討ください。APIアプリケーション開発着手時の障害解消STM32G0x専用テンプレート付属説明資料のもくじを示します。STM32G0x専用テンプレート付属説明資料もくじ説明資料P1~P3は、STM32G0x専用テンプレートサイトから無料ダウンロード可能です。APIが理解でき、STM32G0xデバイス専用アプリケーションのプロトタイプ開発着手時の様々な障害を取り除き、スピード開発するのに専用テンプレートは最適です。STM32G0x専用テンプレートは、コチラの手順でご購入可能です。v5.2.1改版時の注意点2019年5月24日、STM32CubeMXがv5.2.1へ改版されました。インストール時の注意点を示します。Nowクリックのみです。してインストールを実行する必要がありますので注意してください。v5.2.1.Update。インストールは管理者として実行する必要がある。APIを利用するSTM32G0x「専用テンプレート」開発は、3月からの投稿で一応目安が付きました。※投稿下欄タグ:専用テンプレートをクリックすると本稿を含め関連投稿が読めます。APIを使っているので別STM32MCU、例えばG0シリーズMCUのSTM32G071RBなどへの使用・移植も簡単であることを何度か書いてきました。そこで、この「汎用テンプレート」のSTM32G071RBへの使用法を説明します。STM32Fxテンプレートは、図1に示すようにF0シリーズMCUのSTM32F072RBと、F1シリーズMCUのSTM32F103RB両方で動作確認済みです。本稿は、このSTM32FxテンプレートをSTM32G0へポーティングします。API利用STM32Fxテンプレートの別デバイス移植性が優れていることが本稿でご理解頂けると思います。文章で書くと手順1~4のように量が多くなります。API利用アプリケーションをそのまま使うために、下層の構築にSTM32CubeMXを使うだけです。APIアプリケーション移植は簡単です。手順詳細を説明します。手順1:SW4STM32で、F0SimpleTemplateプロジェクトをG0SimpleTemplateへリネームコピーF0SimpleTemplateをコピー、同じワークスペースへペーストする時にG0SimpleTemplateへリネームします。F0SimpleTemplateをG0SimpleTempleteへリネームコピーG0SimpleTemplateフォルダ内のF0SimpleTemplate.iocをG0SimpleTemplate.iocへF2:リネームします。※手順1の目的は、F0SimpleTemplateソースコードのユーザ追記部分を、丸ごとG0SimpleTemplateで流用するためです。現状のSTM32CubeMXには、MCUデバイス間の移植機能がありません。そこで、F0SimpleTemplate.iocファイルを見ながら、新規作成Nucleo-G071RBの周辺回路を手動で同じ設定にします。G0SimpleTemplete.iocファイルを新規作成し、手順1でリネームしたG0SimpleTemplete.iocへ上書き保存します。その後、STM32CubeMXの2重起動を活かしF0SimpleTemplate.iocを見ながらG0SimpleTemplete.ioc周辺回路を同じ設定にします。APIでコード生成します。Max.の64MHz、Timerは、F0SimpleTemplateのTIM3機能に近いTIM7を使いました。手順3:SW4STM32で、main.cとuserdefine.hの数か所を修正&コンパイルどのようなアプリケーションソフトでも、デバイス依存の箇所があります。F0SimpleTemplateも同様です。これらは手動で変更・修正するとビルドが成功します。変更・修正箇所が下記です。※表示メッセージは、STM32G0xデバイス対応に変更しています。あとがき繰返しますが、文章で書くと移植手順は長く複雑に感じます(特に手順3)。API利用アプリケーションの別デバイスへの移植は簡単です。手順3内容は、デバイスが変われば当然必要となる事柄です。API利用アプリケーションの最大メリットは、MCU移植が容易なことです。APIアプリケーションは、「STM32MCUデバイス非依存」とも言えます。現状では、このメリットを活かす開発環境が不備なだけです。不備分は手動で補い、STM32F0/F1アプリケーションをSTM32G0アプリケーションへ移植する方法を示しました。近い将来、STM開発環境にMCUデバイス移植機能が提供されると筆者は思います。API利用「汎用」G0SimpleTemplateも添付し、専用と汎用の両方を1パッケージで販売する予定です。API利用法(2)を参照ください。UART)が新たに加わりました。本稿は、このSTM32G0xのLPUART利用法を解説します。USARTのP26にLPUARTとUSARTの機能差分があります。LPUARTとUSARTの差分(説明のため着色しています。出典:STM32G0オンライントレーニング資料)USART1/2からIrDA:赤外線とLIN:車載通信機能を除いたサブセット版がLPUARTで、USART3/4より8バイトFIFO付きで高機能です。2から抜粋した各消費電流が下記です。LPUARTとUSART消費電流(出典:STM32G071xデータシートRev2)LPUARTは、USART1/2とUSART3/4の中間、USART2.5/3.5が名前として適当かもしれません。Powerという特徴のLPUARTにしたのでしょう。前稿STM32G0xのADC利用法STM32G0xのADC利用法で示したように、LPUARTの実践的使い方習得には、AN5110記載のLPUARTサンプルプロジェクト理解が近道です。APIを使うExampleにも、LPUARTサンプルプロジェクトは現状なしです。v5.2.0でも状況は同じです。API利用「USART」サンプルプロジェクトは多数あります。サンプルプロジェクト流用や活用で自分のソフトウェアを開発する場合、このような需要と供給のミスマッチは良くあります。このミスマッチ対処方法を以下に示します。初めに示したように、LPUARTはUSART1のサブセット版です。COMポート利用なら機能差はありません。従って、以下の手順でUSARTサンプルプロジェクからLPUARTプロジェクトを作成します。プロジェクト作成手順。簡単な変換作業で新プロジェクト作成ができる。(1)で示したAPIユーザマニュアル:UM2319を見ると、ユーザソースコードAPIのUSART部分をLPUARTに変更すれば、API変換ができることも解ります。この手順の良いところは、2と3が、簡単にできることです。STM32CubeMXで生成できるサンプルプロジェクさえあれば、2と3は簡単で、しかもミスなくできます。サンプルプロジェク活用・流用がより簡単・正確にできます。筆者が、AN5110記載サンプルプロジェクトの中で、STM32CubeMX生成アイコン付きにこだわる理由がこれです。USART_Comminication_Tx_Initサンプルプロジェクト動作確認STM32CubeMXでUSART_Comminication_Tx_InitをSW4STM32用に生成します。評価ボードCN10#21とJP6のRX、CN10#33とJP6のTXを配線します。Term)にメッセージが出力されLD4が点灯します。※STM32CubeMXのSW4STM32用の使い方は、前稿ADC利用法のADC_SingleConversion_TriggerSW_InitのSW4STM32へのインポートの章を参照ください。USART_Comminication_Tx_Initサンプルプロジェクト動作確認ができました。Lengthに設定します。SettingsでデフォルトのHALからLLへ変更します。CODEでコード生成します。*/の間のユーザコードは、コード再生成してもそのまま上書きされます。APIが残っているのは、この上書きユーザコード部分だけです。APIへ変更済みです。USART_Comminication_Tx_Initの場合は、下図赤線部分などです。SW4STM32のFind/Replace機能を使うと、変更がミスなく簡単にできます。LPUART変更後のプロジェクト動作確認USARTからLPUARTへ変更したので、評価ボードCN10#16とJP6のRX、CN10#18とJP6のTXを配線します。Term)にメッセージが出力されLD4が点灯します。LPUART変更プロジェクトの動作確認が出来ました。...”に変更しました。33の数値比較)なサブセット版であることが解りました。STM32G0xデバイスの新通信機能としてLPUARTを積極的に活用したいと思います。※本章は、LPUARTの細かな使い方は、ソースコードを読めば解るという前提で説明しています。ソースコードの具体的な読み方は、前稿:STM32G0xのADC利用法のmain.cソースコードの読み方の章などを参考にしてください。STM32G0xの実践的LPUART利用法まとめ実践的に周辺回路利用法を習得するには、サンプルプロジェクト理解が近道です。1個のみで、STM32CubeMXを使って生成はできません。v5.2.0でも状況は同じです。現状でもSTM32CubeMXで生成できるUSARTサンプルプロジェクトは多数あるので、これらを利用し、求めるLPUARTプロジェクトを作成する簡単でミスの少ない手順を示しました。作成したLPUARTプロジェクトから、LPUARTは、USART1/2と同じ使い方で40%低消費電力な新通信機能であることが解りました。WithHappySTM32G0xのラインナップは、Value/Access/Access&Encryptionの3製品です。本稿は、このSTM32G0xのADC利用法を解説します。時短に役立つ資料を表1にリストアップしました。STM32G0のADCトレーニング資料。全20ページの内容は判り易く良書。STM32CubeMXを使い生成可能なSTM32G0x公式サンプルプロジェクト一覧表。8個、HALとLL混在1個のADC公式STM32CubeMXプロジェクト掲載アプリケーションノート。全STM32MCUのADCを精度よく使う方法アプリケーションノート。3資料と数は少ないですが、ADC内容は盛り沢山です。STM32G0xのADC公式サンプルプロジェクトAN5110とオンライントレーニング資料を中心に、AN2834も参照するアプローチで解説します。トレーニング資料P18に特徴の比較があります。STM32G0とSTM32F0のADC差分(※説明のため着色しています。出典:ADCオンライントレーニング資料)先ず、Conversion:ADC変換時間が0.4usと高速になった点。64MHz動作(F0は48MHz)ですが2倍以上高速です。watchdog対応数が増え、バッテリー動作に備え低圧側に動作電圧が広がっています。ハードウェアオーバーサンプリングと高度なシーケンサーが新しい機能です。普通のSTM32F0と同じADC制御もできますが、これら新機能を使いこなし、コアMCU負担を減らすように制御すると上手い使い方と言えるでしょう。トレーニング資料は英文ですが、ポイントを抑えた非常に良くできた資料です。筆者の下手な解説より資料を読んで頂くと、STM32G0xのADCの使い方が判ると思います。APIによるADCの使い方を習得します。(1)~(3)を参照してください。APIを使ったADCプロジェクト一覧(出典:AN5110)Descriptionを読むと、大別して4種類のサンプルプロジェクトがあることが解ります。AN5110は、Examples_LLフォルダを名前順に表示したもので、MXアイコン付き8個を制御別に解り易く並び変えたものが表2です。なし4種類を整理すると、最も基本のADCプロジェクトが1です。1のSingleConversion_TriggerSoftwareは、ソフトウェアトリガでADCを開始し、ポーリングでデータ取得、データ転送にDMA転送、割込みなどの応用例があります。タイマをトリガにDMA転送の発展例もあります。ADC処理回数は1回です。2のContinuousConversionは、1のADC処理回数の連続形で、LowPowerでの応用例があります。Mode説明が、トレーニング資料P11にあります。3のOversamplingは、新機能のサンプルプロジェクトです。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へインポートする方法は色々あります。簡単な方法が下記です。STM32Cube\Repository\STM32Cube_FW_G0_V1.1.0\Projects\NUCLEO-G071RB\Examples_LL\ADC\ADC_SingleConversion_TriggerSW_Initフォルダを開き、ADC_SingleConversion_TriggerSW_Init.iocをクリックすると、STM32CubeMXが起動します。Manager>Projectで、Toolchain/IDEをSW4STM32へ変えます。SettingsタブでADCや周辺回路のLL利用を確認しておきます。Projectをクリックすると、SW4STM32が起動します。project...が表示されればインポート完了です。SW2STM32インポート成功時ダイアログ4.SW4STM32でreadme.txtを開くとインポートしたプロジェクト内容が解ります。A2接続の、0から3.3Vまでのアナログ入力電圧を、ソフトウェアトリガでADCスタートし、ADC完了ポーリングでデータ変換完了を確認するのがこのプロジェクトです。評価ボード単独でもアナログ入力電圧は不定ですが、動作可能です。main.cを見た方は、ソースコード行数が多いのでビックリするかもしれません。以下のSTM32CubeMX(以下MX)生成ソースコードの構造を押さえて読めば簡単です。*/で囲まれている従って、サンプルプロジェクトのユーザコード/コメント部分は、「ユーザの代わりにSTMが作成したコードと明示的に説明を加えた箇所」です。注意して読みましょう。それ以外のMX生成部分は、コメントを眺める程度で十分です。サンプルプロジェクトmain.c解説ソースコードが読めると、サンプルプロジェクト内の重要関数も解ります。ADC_SingleConversion_TriggerSW_Initの場合は、L121のConversionStartPoll_ADC_GrpRegular(void)とL120のActivate_ADC(void)が重要関数です。API開発時の汎用関数です。ADC_SingleConversion_TriggerSW_Initのmain.c解説。重要関数と汎用関数に分けて読む。L121へカーソルを移動し、F3を押すとConversionStartPoll_ADC_GrpRegular(void)の定義場所へ簡単に移動できます。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を利用した例もあります。(3)で示した割込みNVIC利用時のユーザ追記箇所と、本稿で示した周辺回路ユーザ追記箇所の2つに分けてソースコードを理解します。STM32CubeMXが自動生成したソースコードの、「どこに、何を、ユーザが追記すべきか」は、本章で示した方法でサンプルプロジェクトを理解すれば、自然に解るようになります。逆に、「どこに、何を、追記すべきか」かが解らないなら、まだサンプルプロジェクト理解が足りないと言えます。公式サンプルプロジェクトのソースコードを作成するのは、STM32CubeMXと「ユーザ代替のSTMプロフェッショナル」です。両者の役割、作成部分やソースコード構造を理解するのがユーザ開発の第一歩です。ここでは、表2の中で最も基本のADC_SingleConversion_TriggerSWサンプルプロジェクトを使って、STM32G0xのADC利用法を解説しました。ADCサンプルプロジェクトは他にも多数あります。自分の開発プライオリティに応じて、他プロジェクトも同様に理解し、ステップアップすれば良いでしょう。STM32G0x専用テンプレートの目的MCUソフトウェア開発は、0から着手するのではなく、コード生成ツール:STM32CubeMX活用や前章で示した公式サンプルプロジェクトの部品利用・活用で、効率的に早く開発する、いわゆるプロトタイプ開発が主流です。プロトタイプ開発をしないと、競合他社とのビジネスには不利です。プロトタイプ開発は、開発スピードが要求されます。何がしかの動作確認済みテンプレート(ひな形)と評価ボード、詳しい説明資料があれば、開発着手時のつまずきや手間が省け、より検討すべき項目に時間が割けます。このテンプレートが、弊社汎用マイコンテンプレートです。MCU「STM32G0xシリーズ専用」テンプレートで、STM32MCUで汎用性がある上記テンプレートとは異なりますが、目的や役割は汎用と同じです。MCUテンプレート開発STM32G0x専用テンプレートには、本稿で示したADC重要関数や、USB経由のADC変換データパソコン出力、パソコンからの評価ボードLED点滅制御など、STM32G0x開発着手時に最低限必要な機能や部品をあらかじめテンプレートに実装済みです。STM32G0x専用テンプレートをサンプルプロジェクトとの差分で説明すると、複数サンプルプロジェクトが実装済みで、プロトタイプ開発着手のレベルにより近いプロジェクト、これがテンプレートとも言えます。各種サンプルプロジェクト追加や削除が簡単なのも特徴です。理解できるよう詳細な解説資料付きで提供します。STM32G0x専用テンプレートを利用すると、STM32G0xプロトタイプ開発を即座に始められます。STM32G0x専用テンプレートは、近日中に発売予定です。API利用法第1回から本稿まで全体をまとめます。API利用法第1回、第2回は、リンク先参照。Settingsの赤囲みの部分のみです。デフォルトは全てHALです。これを、HALからLLへ周辺回路毎に変更します。API利用時の設定箇所。デフォルトはHALなので全てLLへの変更必要。第2回で説明したように、LLとHALの混在利用は避けた方が無難です。各周辺回路で両者の選択ができますが、HALかLLの二者択一をお勧めします。デフォルトHALです。APIアプリケーション開発時は、注意してください。Reportがありますが、v5.1.0ではLL/HAL設定値は未出力です。API利用時に比べ多いです。API割込み処理のユーザ追記箇所は、関連投稿:STM32CubeMX生成ファイルのユーザ処理追記箇所を参照してください。第1回で示したAN5110で説明します。Examples_LLサンプルプロジェクト、EXIT_ToggleLedOnIT_Init.iocのNVIC設定が下図です。このプロジェクトは、評価ボードのUserButtonを押すと割込みが発生しLED4がトグル点滅します。NVICのユーザ追記箇所が赤囲みです。CODEをクリックすると、stm32g0xx_it.cのL149~L166にEXIT4_15_IRQHandler(void)が自動生成されます。stm32g0xx_it.cのL160のUserButton_Callback()は、ユーザが追記したCallback関数です。main.hのL71で、このUserButton_Callback(void)は、ユーザが宣言します。main.cのL209~L212で、UserButton_Callback(void)は、ユーザがCallback関数の中身を記述します。自動生成されたファイル名(橙色)、ユーザ追記位置(緑色)、ユーザ追記コード(赤色)STM32CubeMXは、IRQハンドラ関数の割込み発生原因:トリガ検出部分を生成するのみです。*/」で囲まれた3ファイル指定場所に追記します。CODEをクリックしても上書きされ残ります。本章は、NVIC利用時のユーザ追記箇所を示しました。これらは、ADCなどの一般的な周辺回路利用時のユーザ追記箇所とは大きく異なります。※一般的な周辺回路のユーザ追記箇所は、ADCを例に説明します。STM32CubeMXが生成したソースコードの「どこに、何を、ユーザが追記すべきか」は、生成ソースコード理解が必要です。これには、公式サンプルプロジェクトソースコードの理解が役立ちます。※これも、ADC例を使って、ソースコード理解方法を説明します。APIを安全に利用できると思います。上記まとめで少し気になるのは、安全側評価で「異なる周辺回路でもLLとHAL混在は避けた方が無難」とした点です。本当に異なる周辺回路で混在利用はできないでしょうか?周辺回路が異なれば、LLがアクセスするハードウェアも当然異なり、競合は無いハズです。API利用でも競合問題はなさそうです。API利用者が、アプリケーションレベルでレジスタ競合などが無いことを確認できれば、「自己責任で異なる周辺回路なら混在可能」だと思います。これを行うには、LLやHALの深い部分まで解読、競合調査が必要です。AN5110のExamples_MIXサンプルプロジェクトで示された、HALの一部をLLへ置換え、処理高速化を狙う例に止めた方が良さそうです。API利用法をまとめました。APIを使うと、MCUハードウェア性能を活かし、少ない容量で高性能アプリケーション開発ができます。APIに比べ低下します。APIは、トレードオフの関係です。LLかHAL、どちらのAPIでソフトウェア開発するかは、このトレードオフ評価で決めます。API開発に値するデバイスだと思います。APIを使い専用テンプレートとして開発します。APIでの使い方を解説します。APIの違いを説明します。専用テンプレートはLL、汎用テンプレートはHALを使う理由がお判りになると思います。API関連資料一覧のUM2319の最初のページに、LLとHALの定義が示されています。APIを利用するソフトウェア(=アプリケーション)はそのMCU専用になります。API利用アプリケーションはSTM32MCU間で汎用的に使えます。HALの方が現代的で少ないユーザ記述でアプリケーション開発ができ、さらに汎用なので開発労力が無駄にならない利点があります。HALが隠蔽している制御の分Flash(ROM)やRAM容量が必要で、LLに比べ低速です。モーター制御など高速処理が必要な部分にはLLの方が向いているかもしれません。API相対比較表を再掲します。HALとLL比較(※説明のため着色しています。APIの利点は、ハードウェア性能を活かし少ない容量で高性能アプリケーション開発ができる点です。これは、小Flashで高性能なSTM32G0xデバイスに最適と言えるでしょう。現状はSTM32G0xが「単独デバイス」でSTM32F0/F1両方のMCU性能をカバーしているので「専用テンプレートが最適」だと言えます。「STM32G0xシリーズに更に高性能なSTM32G1xデバイス」が発売されれば、移植性が高いHALでSTM32G0xソフトウェア開発を行う方が良くなる可能性はあります。API利用の販売中汎用STM32FxテンプレートをSTM32G0xデバイスへ適用すれば済みます。汎用性を示すこの適用例は、近く投稿する予定です。APIメリットを示すデバイス例としてSTM32G0xを選び、専用テンプレートを開発中です。APIに比べどの程度小さくなるかを実例で示します。これも前の投稿STM32CubeMXの使い方で示したように、一般的にはLLの方がHAL比60~80%小さくなると言われます。59%小さく実現できることが判ります。API混合利用時の注意点AN5110には、LLとHAL両方を混在させた公式サンプルプロジェクトのExamples_MIXがNucleo-G071RBでも9例と少ないながら掲載されています。LLとHAL混在利用の公式サンプルプロジェクト(出典:AN5110)LLとHALを混在利用時は、色々な注意点があります。UM2319の5章に詳細がありますが、一部抜粋します。・同じ周辺回路をHALとLLで混在制御するのは避ける・LLはHALがハンドルしているレジスタを上書きすることがあるので注意また、UM2303の2章にLLとHALの示すアーキテクチャが示されています。Architecture(※説明のため着色しています。出典:UM2303)つまり、上層HALが下層LLを利用する場合がある訳です。LLは、HALがどのように周辺回路を制御しているかを知ることなく直接ハードウェアレジスタにアクセスします。混在時はレジスタ競合などの詳細な注意がAPI利用者側で必要です。利用時LLとHAL混在利用は、Examples_MIXの9例を除いては避けた方が良さそうです。Package)も、同じ理由でSTM32G0x専用テンプレートには使いません。※以上は、同一周辺回路でLLとHALを混在利用する場合の注意点です。I2CはHAL、GPIOはLLの場合などです。この場合でも、HALがLLを利用することを考慮すると、アプリケーションレベルでの安全側評価では混在は避け、LLまたはHALに統一して利用する方が無難だと思います。APIのみで開発します。従って、STM32G0xデバイス専用のアプリケーションとなります。APIを使っていますので、STM32MCUで汎用的に使えるアプリケーションです。※このSTM32Fxテンプレート汎用性を示すため、STM32G0xデバイスへこの汎用テンプレートを適用した例を示す予定です。LLとHAL混在アプリケーション開発は、レジスタアクセス競合などの詳細注意が、API利用アプリケーション側で必要です。公式サンプルプロジェクトExamples_MIXで示されたやむを得ない場合を除いては、避けた方が無難です。API利用法を3回に分けて投稿します。API初期化処理です。Layer)APIでもこの2構成は同じです。LLとHALに関するSTマイクロエレクトロニクス(以下STM)資料は数多くあります。API利用を推薦」していると思います。MCUハードウェア差を隠蔽でき、開発ソフトウェア移植性にも優れているからです。APIがデフォルトです。API関連資料は、投稿時点では未だ少ない状況で、リストアップすると表1の4個程度です。近くより小ピン小容量のSTM32G0xがリリースされますので、もっと多くなると期待しています。API関連はありませんが、BSPやUSB制御をSTM32G0x専用テンプレートでも使う可能性を考慮して追加しました。API関連資料4+1個の範囲でその利用法をまとめます。STM32CubeMXで生成可能なSTM32G0公式サンプルプロジェクトの一覧表。APIのみ、HALとLL混在などに区分けされたアプリケーションノート。API解説章の理解が必要です。API利用法は、実践的アプローチから着手し、不明な点やレファレンスが必要な時にUM2319を参照することにします。API利用例:AN5110のExamples_LLSTM32G0x専用テンプレート動作確認評価ボードは、Nucleo-G071RBです。API利用サンプルプロジェクト数が75個と掲載ボード中最も多いので前章アプローチに最適です。APIサンプルプロジェクトから、2つのGPIOプロジェクトに着目します。この2プロジェクトは、どちらも評価ボード実装済みLD4を250ms毎に点滅させます。2つのGPIOサンプルプロジェクト差(※説明のため着色しています)MXアイコンが付いているGPIO_InfiniteLedToggling_Initは、STM32CubeMXで生成可能、GPIO_InfiniteLedTogglingは生成不可です。Function)です。両者ソースコードの初期化処理を下図に示します。GPIO_InfiniteLedToggling_Init(左)とGPIO_InfiniteLedToggling(右)の初期化処理の差MX_GPIO_Init()が、STM32CubeMX生成可能プロジェクト、Configure_GPIO()が、生成不可プロジェクトの初期化処理です。Library)です。※()内は、筆者が追記。MX_GPIO_Init()は、STM32CubeMXが生成した初期化処理で、MX_が接頭語として付いていることからLLとHAL混在時でも使える関数です。Configure_GPIO()は、MX_GPIO_Init()と同じ機能ながら少ないソースコードで記述できています。その結果、Configure_GPIO()の方が、MX_GPIO_Init()よりも高性能で小サイズとなります(初期化処理以外は、どちらも同じ)。MX_GPIO_Init()は、付属オリジナルSTM32CubeMXプロジェクトに変更を加えた時にでも中身はSTM32CubeMXが自動生成する関数で置換えられるだけで、MX_GPIO_Init()はそのまま残ります。Configure_GPIO()は中身のユーザ修正が必要です。結局、STM32CubeMXで生成可能なGPIO_InfiniteLedToggling_Iniプロジェクトは、ユーザが何らかの変更を加えても初期化処理をSTM32CubeMX任せにでき、無限ループ内にある変更処理に集中できる訳です。APIの利用切替えが周辺回路毎に設定可能です。APIのみ利用するプロジェクトでも、初期化処理関数の接頭語には、後々の周辺回路のHAL利用・変更・追加などに備えてML_を付けるのだと推測します。STM32CubeMX任せにすると、ユーザ自作よりも多少サイズが犠牲になります。公式サンプルプロジェクト応用が簡単にできることを考慮すると、その差を十分補える効果があります。APIを利用するSTM32G0x専用テンプレートの初期化処理は、STM32CubeMX任せにします。STM32G0x専用テンプレート用STM32CubeMXプロジェクトも添付いたしますので専用テンプレート応用・流用は簡単となります(汎用STM32Fxテンプレートは、既にテンプレート用STM32CubeMXプロジェクト添付済みです)。V1.1.0の公式サンプルプロジェクト内の付属STM32CubeMX全プロジェクトファイルが未完成と書きましたが、一部改善されました。公式サンプルプロジェクトExamples_LLがSTM32CubeMXで生成可能になりました。お詫びして😔、訂正いたします。STM32CubeMXは、起動毎に更新チェックやインストール済みのMCUパッケージを自動更新します。5.1.0のままで変わりません(何回か起動を繰返すと正常化するのかもしれません😅、同じ症状の方はお試しを...)。API開発には朗報に変わりありません。めでたしめでたしです。WithHappySTマイクロエレクトロニクス(以下STM)の新MCU:STM32G0xシリーズだからこそできた快挙です。1のMXアイコン部分)。従来のSTM32F0公式サンプルプロジェクトは、エキスパート自作のもの(多分、むかしの標準ペリフェラルライブラリ利用)でした。STM32ソフトウェア開発は、今はSTM32CubeMXコード生成出力へユーザコードを追加する方式です。従って、従来サンプルソースコードを利用するには、エキスパート作成の必要部分を解読後カットし、STM32CubeMXで生成した自分のソースコードへペーストして流用してきました。AN5110は、この公式サンプルプロジェクトが、付属STM32CubeMXで直接生成できることを示しています。サンプルプロジェクト流用・活用が、これまで以上に簡単・便利になります。従来のソースコードカット&ペーストから、付属STM32CubeMX変更と生成コードへユーザコードを追加すれば済むからです。STM32ソフトウェア開発の最重要ツール:STM32CubeMX活用に即した方法がAN5110と言えます。重要なのは、ここからです。3月末時点では、公式サンプルプロジェクト内のSTM32CubeMXプロジェクトファイルが未完成です。1一番上のNucleo-G071RBのADC_AnalogWatchdogプロジェクト付属STM32CubeMXプロジェクトファイルを開いた様子が下図です。ADC_AnalogWatchdogサンプルプロジェクト付属STM32CubeMXプロジェクトファイルの.iocを開いた様子このままコード生成してもADC_AnalogWatchdogサンプルプロジェクトはできません😴。ADC_AnalogWatchdogプロジェクトだけではなく、全ての公式サンプルプロジェクトで同様です。現時点では、残念ながら公式サンプルプロジェクト内の付属STM32CubeMXプロジェクトファイルは未完成です。1.1.0改版を待たねば、AN5110は実現しません。TrueSTUDIOへも未対応でした(図1にTrueSTUDIOフォルダが無いことからも判る)。historyより)。STM32CubeMXを使って公式サンプルプロジェクトを生成するAN5110の方向性は、正しいと思います。新MCU:STM32G0シリーズSTM32G0だけでなく、他の既存MCU:STM32F0/F1シリーズSTM32F0/F1などもこの方向の対応を期待します。V1.1.0改版を待ってから先へ進めた方が良さそうです。この改版までの待ち時間は、STM32G0x専用テンプレート開発で使うLL(Low-Layer)APIの習得に充てます。