今回はSTM32でのDSP処理の前設定について紹介します。
環境はこれまで同様、
・STM32F303K8
+SW4STM32(System Workbench for STM32)
+STM32CubeMX(F3_1.6.0)
です。
STMのサイトからSTM32Cube_FW_F3_V1.6.0をダウンロードすると
いくつかサンプルコードが入っています。
その中にM4コア内臓のDSP処理を使用したFFTのサンプルがあります。
STM32Cube_FW_F3_V1.6.0\Drivers\CMSIS\DSP_Lib\Examples\arm_fft_bin_example\ARM
・FFT処理するためのサンプルデータ
arm_fft_bin_data.c
・FFT処理のサンプルコード
arm_fft_bin_example_f32.c
上記のコードをそのままCubeMXで生成したコード群に
そのまま組込んでもコンパイルが通らないため、
対処方法をご紹介します。
@
#include "stm32f3xx_hal.h"の次に
#define ARM_MATH_CM4
を追加。
F3のM4コアの使用を定義。
この定義を忘れるとコアの種類が分からない旨のコンパイルエラーが出る。
#error "Define according the used Cortex core ARM_MATH_CM7,
ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS or ARM_MATH_CM0"
A
#include "arm_math.h"
#include "arm_const_structs.h"
#include "arm_const_structs.h"
をインクルード。
コアの定義の後に上記のインクルードをする。
B
STM32Cube_FW_F3_V1.6.0\Drivers\CMSIS\Lib\ARM
内の
arm_cortexM4lf_math.lib
と
STM32Cube_FW_F3_V1.6.0\Drivers\CMSIS\Lib\GCC
内の
libarm_cortexM4lf_math.a
をプロジェクトフォルダ直下へ配置する。
arm_cortexM4b_math.lib
arm_cortexM4bf_math.lib
arm_cortexM4l_math.lib
arm_cortexM4lf_math.lib
arm_cortexM4bf_math.lib
arm_cortexM4l_math.lib
arm_cortexM4lf_math.lib
から必要に応じて選択。
little endian, fpu, m4の場合で
arm_cortexM4lf_math.lib
C
プロジェクトのプロパティーで「C/C++Build」の設定内の
Linker、LibrariesでDSP処理のライブラリを追加する。
Librariesに下記を追加。
arm_cortexM4lf_math
m
Library search pathにワークスペース下のプロジェクトフォルダを選択。
自動的に下記になる。
"${workspace_loc:/${ProjName}}"
この設定を忘れると
undefined reference to `arm_cfft_f32'
や
cannot find -larm_cortexM4lf_math.lib
なエラーが出る
以上でコンパイルが通りました。
DSP処理のFFT関数の使い方などは後ほどご紹介します。