CMSIS-DSPはSTM32のリポジトリに同梱されているのですが、なぜかCubeIDEからアプリケーションのスケルトンに追加することができません。以下にCubeIDE v1.3.0のプロジェクトで使用する方法をメモしておきます。
ファームウェアからCMSIS-DSPのコードをコピーする
CubeIDEはプロセッサ・コアごとのファームウェアをPC上に保存しています。CubeIDEのデフォルトは~/STM32Cube/Repositoryです。この中に対象プロセッサ・コアのファームウェアがありますので、そのCMSISサブディレクトリを丸ごとプロジェクトのDrivers/CMSISにコピーします。
不要なサブディレクトリを削除する
コピーしたDSPディレクトリの中から、不要なサブディレクトリを削除します。削除するのは以下の三つです。
- DSP_Lib_Test_Suites
- Examples
- Projects
インクルード・ディレクトリを追加
追加したDSPディレクトリをインクルード・ファイルとしてプロジェクトに追加します。
- Drivers/CMSIS/DSP/Include
ARM_MATH_CMxを追加
CPUコアに応じてARM_MATH_CMxマクロをコンパイル時マクロとして追加します。STM32F722の場合はARM_MARTH_CM7です。正確なマクロ名を知りたいときにはDrivers/CMSIS/DSP/Include/arm_math.hを開き、”ARM_MATH_CM”を検索してください。ifdefによりインクルードファイルを読み込んでいる部分があります。ここを参考に適切なマクロを選びます。
マクロを追加する場合は、すべてのコンフィギュレーションとすべての言語に追加します(下図)
__FPU_PRESENTを追加
FPUありの製品では、同様に__FPU_PRESENTをコンパイル時マクロとして追加します。
マクロを追加する場合は、すべてのコンフィギュレーションとすべての言語に追加します(下図)
以上で設定は終わりです。関数を使用する場合はソースファイルでarm_math.hをインクルードします。
#include "arm_math.h"
これでプログラム中でCMSIS-DSPの関数を使うことができます。
float a = arm_sin_f32(3.14f);