1、简介
我们在使用 CubeMX 生成相应的工程后,在一些状况下需要使用 DSP 库。在使用 CMSIS 文件中的 DSP 库是出现错误。
2、准备
2.1、软件
1、HAL 库版本:STM32Cube FW_F3 V1.11.2
2.2、开发工具
1、STM32CubeMX 6.2.0
2、Keil uVision5 V5.34.0.0
2.3、代码测试时间
2021年8月5日
2.4、CMSIS
CMSIS安装包:https://www.aliyundrive.com/s/Lcocs2NtLuS
阿里云链接貌似有问题,可以看另一篇博文:https://blog.csdn.net/qq_39567970/article/details/119508679
2.4、参考
https://blog.csdn.net/yuleitao/article/details/105621492
https://blog.csdn.net/sinat_36568888/article/details/78190685
3、添加 DSP 库后出现错误
将 Keil 安装目录下的 CMSIS 文件中的 DSP 移植到工程中,路径如下所示
在头文件,库路径正确添加编译后出现如下所示错误
4、解决方法
4.1、参考官方社区解决方法
ARM官方社区链接
在 ARM 官方社区的连接中也有类似的问题,解决方法是将 CORE 文件夹中的 cmsis_armcc.h 和对应的mcu内核文件core_cm7.h
我使用的是 M4 核的单片机,所以我替换了 core_cm4.h 替换完之后(用 CMSIS5.7.0 文件中 CORE 文件夹中的),编译成功。
但是存在问题是,当下次添加新的外设使用 CubeMX 更新工程后,自己替换的两个文件会被刷新掉。
这就是个新的问题?
4.2、完善解决方法
解决上述新的问题:我们打开目录下的 CubeMX 工程(.ioc 文件),如下图所示。
勾选第二个(只拷贝需要的库文件)工程目录下的文件
勾选第一个(拷贝所有的库文件)工程目录下的文件
打开 Keil MDK 的工程,在管理运行时环境的选项中 CMSIS 中的 DSP 选项勾选上,操作如下图所示。(注意此处要选为库文件模式,源文件模式会出现报错,具体原因未知,欢迎大家讨论)
选择好运行时的环境配置后,在工程目录树下 CMSIS 下出现我们需要的 库文件。
添加相应的路径,操作如下图所示。
-
DSP 库的头文件路径。
-
DSP 编译的 Lib 库文件路径
注意 在标记2处的下方 Define 中添加 ,ARM_MATH_CM4,__TARGET_FPU_VFP,__FPU_PRESENT=1U
5、测试
在使用 DSP 库的文件中添加头文件 arm_math.h
添加测试代码
DSPtest = arm_sin_f32(0.25f*Pi);
DSPtest1 = arm_cos_f32(0.0F);
运行结果