CMSIS-DSP库是由ARM公司提供的一个信号处理算法库,所有使用ARM内核的单片机都可以调用相应的库,当然也包括STM32。在信号处理方面,DSP库自带的FFT,FIR,IIR等函数具有丰富的实际应用。
本文采用的STM32G474RET6芯片基于Arm Cortex-M4内核,采用的DSP库有以下几种
* - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4)
* - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4)
* - arm_cortexM4l_math.lib (Little endian on Cortex-M4)
* - arm_cortexM4b_math.lib (Big endian on Cortex-M4)
其中大端(Big endiam)和小端(Little endian)的区别为:
大端(Big endiam):低地址存放高有效字节
小端(Little endian):低地址存放低有效字节
其中浮点运算单元(Floating Point Unit,FPU)
arm_cortexM4X_math.lib(不带浮点运算单元)
arm_cortexM4Xf_math.lib(带浮点运算单元)
通过STM32CubeMX添加DSP库
1.进入库选择界面
2.选择DSP库
3.使能DSP库
4.生成工程(本人使用keil5编译器)
此时DSP库已经添加,但默认添加的静态库文件为arm_cortexM4I_math.lib,无法进行浮点运算,需要进行浮点数运算则需要添加arm_cortexM4If_math.lib静态库,需要的库文件可以从下方百度网盘分享中下载
5.头文件引入
6.宏定义添加
ARM_MATH_CM4,__CC_ARM,__TARGET_FPU_VFP,__FPU_PRESENT=1
说明:
arm_math.h 中说明需要宏定义内核类型,此处选择添加ARM_MATH_CM4
core_cm4.h 中说明,打开FPU需要添加三条宏定义
__CC_ARM,__TARGET_FPU_VFP,__FPU_PRESENT=1
完成上述六步,DSP库就已经添加完成,之后就可应用其中的函数,具体的函数说明可以参考官方网站,CMSIS-DSP文档,此处我们仅测试最简单的arm_sin_f32()函数,验证DSP库函数导入
结果验证
int i=0;
float sine[128];
for(i=0;i<128;i++)
{
sine[i]=arm_sin_f32(2*PI/128*i);
}