CubeMX環境でLLドライバのフル機能を使う

CubeMXを使ったSTM32マイコンの開発環境(ここではIAR EWARMを想定)でLLドライバの全APIを利用するための設定について簡単にメモ。(すこし事情がややこしいです。間違ってたらご指摘ください。)

  • CubeMXでは、抽象度の高いHALドライバまたは低水準のLLドライバのいずれかまたは両方を利用したプロジェクトを生成できる。
  • ただし、STM32F7等の上位品番に関しては、CubeMXでLLドライバ用のプロジェクトを生成できない。
  • しかし、STM32F7等でも、LLドライバそのものは存在し、HALドライバ用のプロジェクトを生成した際にもプロジェクト内にコピーされる。
  • そのため、ヘッダをインクルードすれば、HALドライバ用のプロジェクトでLLドライバのAPIを利用することは可能。
// STM32F7での例
#include "stm32f7xx_hal.h"      // ←HALドライバの利用はこれだけでOK
#include "stm32f7xx_ll_dma.h"   // ←DMAのLLドライバを利用
#include "stm32f7xx_ll_spi.h"   // ←SPIのLLドライバを利用
  • LLドライバの一部のAPIを利用するためには、USE_FULL_LL_DRIVER マクロを定義する必要がある。
  • プロジェクトの[オプション] > [C/C++コンパイラ] > [プリプロセッサ] > [シンボル定義] で USE_FULL_LL_DRIVER マクロを定義すると、CubeMXでプロジェクトを再生成した時に消されてしまう。 (CubeMXのバグと思われる。)
  • そこで、[オプション] > [C/C++コンパイラ] > [追加オプション] で -Dオプションを使って下記のように指定する。
-DUSE_FULL_LL_DRIVER