stm32では、stm32マイコンのシリーズ間で、同じコードを利用するためのHAL(Hardware Abstraction Layer)が用意されています。
実際にマイコン開発をする際は、マイコンではレジスタ操作をして各ペリフェラルを操作するのですが、それらを抽象化したAPIがHALで提供されています。
HAL
HALを利用する場合、プロジェクトは下記のような階層で実装されます。
一番上位に位置するのがApplication Codeでここがユーザ、つまり自身で記述するコード部分です。この部分に実現したい処理を記述することになります。このApplication CodeからHAL層が提供するAPIを利用してマイコンに付属している各ペリフェラルを制御することになります。例えば、GPIOの制御、SPI通信の制御を行うなどをHAL層のAPIを利用して実現します。
ユーザコードからはHAL層で提供されているAPIのみを利用するようにコードを記述します。このことにより、異なるSTM32シリーズのマイコンでも同じように動作することが可能となります。
HAL層は一部の機能についてはCMSIS-COREで提供されている機能を使用しています。これらはプロセッサ内部に関わる処理はCMSIS-COREで提供されている処理に委譲しています。具体的には、NVICやSYCTICKなどの設定などを行っています。
プロジェクト構成
実際にCube IDEで、上記で説明したHALのアーキテクチャが具体的にどのようなコードで構成されているのかを見ていきます。
プロジェクトの作成
まずはプロジェクトを作成します。STM32 CubeIDEを起動します。
まずは、workspaceをどのフォルダをワークスペースとして利用するかを設定するので、所望の場所に設定します。その後、アプリケーションが起動し以下のような画面になります。
Start new STM32 projectを選択すると、下記のような画面が出ます。
Board Selectorをクリックします。対象とするボードを選択します。
筆者の環境では、NUCLEO-F722ZEを使用しているので、選択しNextをクリックします。
次にプロジェクト名を設定し、以下の設定でFinishを選択します。
Board projection optionとして、すべてのペリフェラルをデフォルトで初期設定するか選択する画面がありますが、そこもYesを選択します。他にもいくつかポップアップウィンドウが出ますが、全てYesを選択します。
以下のような画面が出る場合は、下記のメッセージに従って、Help -> STM32 Cube updates -> Connection to mySTからSTM32のログインを行なってください。
License Agrementも出るかもしれませんが、それも確認してFinishを選択します。
Finishを選択した後、各ペリフェラルが初期設定されたコードが生成されます。
以下のフォルダ構成で自動生成されます。ここで、main.cがアプリケーションコードにあたり、このアプリケーションコードからDrivers/HAL_Driverを使用して各ペリフェラルを制御するコードを書いていきます。
上記の図では、STM32F7xx_HAL_DriverがHALに、CMSISフォルダがCMSIS-COREに対応しています。
ビルド
まずは自動生成されたプログラムをビルドしてみましょう。
各アイコンは上図のような意味を持ちます。よく利用するアイコンのみ説明しています。
ビルドが成功するので、実際にアプリケーションコードを書いていきます。
まとめ
本記事では、STM32CubeIDEを使ったアプリケーションのビルド方法と、プロジェクトの構成について解説しました。また、HALについての役割についても解説しました。
コメント