文章目录[隐藏]
原来官方社区已经有技术贴了,那我这个算翻译+补充吧
STM32CubeIDE添加DSP静态库
最近项目需要使用DSP库,使用CubeIDE已久,于是试着在CubeIDE中移植DSP库。参考了网上的一些文章,觉得不是很完美。于是自己摸索,找了一些参考资料。记录了下在STM32CubeIDE中移植的DSP库的方法。
准备工作
我使用的单片机型号是STM32F767IGT6。这里只是展示移植库的例子,就不配置单片机的外设了。
软件中相关浮点功能
- 工程默认已经开启了FPU功能,在头文件中定义了相关宏。
在头文件中 stm32f767xx.h 中定义了 __FPU_PRESENT
在头文件中 core_cm7.h 中定义了 __FPU_USED
- 在初始化中启用了浮点功能硬件。
准备DSP库
DSP库可以在CubeIDE芯片固件库的安装目录下找到,如下图DSP文件夹中存放有代码库,Lib为静态库。
DSP文件夹中Include和Source两个文件是我们需要的,Lib目录中我们只需要GCC文件夹中的库就好了。我把这3个文件夹及其内容复制到1个文件夹中,命名为CMSIS_DSP,然后放到建立的STM32CubeIDE工程同目录下。如图是我建立的工程,如果工程中没有CMSIS_DSP文件夹,可以右键工程刷新下。
添加DSP静态库
CubeIDE使用gcc作为编译器,因此使用静态库可以参考这几篇博客。(赶时间的同学可以直接看下面添加步骤)
单片机之模块库封装(.a)及使用(以CubeIDE为例)
static link:关于gcc连接静态库的几种方式
了解gcc添加静态库的规则后,我们就开始添加库吧。
-
添加头文件夹
右键项目,Properties。C/C++General→Paths and Symbols。在Includes选项卡中添加DSP的头文件。点击Apply,不要关闭窗口,方便后面添加库操作。
-
添加库文件夹,添加库名
接着在Library Paths选项卡下添加包含库的文件夹。同样为方便操作,添加好库文件夹后点Apply不要Close。
-
再下来,参考gcc添加库的文章,我们看到库文件夹CMSIS_DPS/GCC中有3个库,它们都用lib做前缀。
根据规则我们去掉“lib”前缀,把库的名字加到Libraries选项卡中就可以了。OK之后同样点Apply不要Close。添加1个库就好。
-
最后在Symbols中添加宏定义 ARM_MATH_CM7 告诉DSP库使用的arm内核类型。这里就可以Apply and Close了。就此添加DSP静态库就好了。
-
测试代码,编译验证
在项目中添加头文件“math.h", “arm_math.h”,我使用的测试代码如下,编译正常。
int16_t i;
float32_t pSinVal;
float32_t pCosVal;
for(i = -180; i < 180; i++)
{
arm_sin_cos_f32(i, &pSinVal, &pCosVal);
}
- 使用静态库的方法完成。我们看到前面有3个库,选用哪个可以参考相关文档,我也正在学习中。
写在最后,简单写写添加DSP源码库
上面的例子使用了DSP静态库,读者们应该发现了还没用CMSIS_DSP中的Source文件夹。这个文件夹放的就是DSP库的代码。新建1个项目,像添加普通的库一样,右键项目,Properties。C/C++General→Paths and Symbols(哎,没错又是我)。在Source Location选项卡中添加源码库文件夹。头文件和宏定义同静态库添加方法一样。
但是发现编译会报错
经过查找发现这是头文件中的预编译命令。但是实际上头文件中已经定义了 __FPU_PRESENT。不知是编译器的BUG还是啥。那我们在头文件中 stm32f767xx.h 中找到这个定义将它注释掉。然后在Symbols选项卡中添加宏命令
点击OK→Apply and Close就可以愉快的编译了,没有报错也没有重复定义。
如此添加DSP源码库的例子也完成了。
版权声明:本文为CSDN博主「mutulula」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mutulu7la/article/details/121056881
暂无评论