STM32CubeIDE添加DSP库(附带如何添加代码库)

原来官方社区已经有技术贴了,那我这个算翻译+补充吧

STM32CubeIDE添加DSP静态库

最近项目需要使用DSP库,使用CubeIDE已久,于是试着在CubeIDE中移植DSP库。参考了网上的一些文章,觉得不是很完美。于是自己摸索,找了一些参考资料。记录了下在STM32CubeIDE中移植的DSP库的方法。

准备工作

我使用的单片机型号是STM32F767IGT6。这里只是展示移植库的例子,就不配置单片机的外设了。

软件中相关浮点功能

  • 工程默认已经开启了FPU功能,在头文件中定义了相关宏。
    在头文件中 stm32f767xx.h 中定义了 __FPU_PRESENT
    __FPU_PRESENT
    在头文件中 core_cm7.h 中定义了 __FPU_USED
    在这里插入图片描述
  • 在初始化中启用了浮点功能硬件。
    在这里插入图片描述

准备DSP库

DSP库可以在CubeIDE芯片固件库的安装目录下找到,如下图DSP文件夹中存放有代码库,Lib为静态库。
在这里插入图片描述
DSP文件夹中IncludeSource两个文件是我们需要的,Lib目录中我们只需要GCC文件夹中的库就好了。我把这3个文件夹及其内容复制到1个文件夹中,命名为CMSIS_DSP,然后放到建立的STM32CubeIDE工程同目录下。如图是我建立的工程,如果工程中没有CMSIS_DSP文件夹,可以右键工程刷新下。
在这里插入图片描述

添加DSP静态库

CubeIDE使用gcc作为编译器,因此使用静态库可以参考这几篇博客。(赶时间的同学可以直接看下面添加步骤)

单片机之模块库封装(.a)及使用(以CubeIDE为例)
static link:关于gcc连接静态库的几种方式

了解gcc添加静态库的规则后,我们就开始添加库吧。

  1. 添加头文件夹
    右键项目,Properties。C/C++General→Paths and Symbols。在Includes选项卡中添加DSP的头文件。点击Apply,不要关闭窗口,方便后面添加库操作。
    在这里插入图片描述

  2. 添加库文件夹,添加库名
    接着在Library Paths选项卡下添加包含库的文件夹。同样为方便操作,添加好库文件夹后点Apply不要Close。
    在这里插入图片描述

  3. 再下来,参考gcc添加库的文章,我们看到库文件夹CMSIS_DPS/GCC中有3个库,它们都用lib做前缀。
    在这里插入图片描述

    根据规则我们去掉“lib”前缀,把库的名字加到Libraries选项卡中就可以了。OK之后同样点Apply不要Close。添加1个库就好。
    在这里插入图片描述

  4. 最后在Symbols中添加宏定义 ARM_MATH_CM7 告诉DSP库使用的arm内核类型。这里就可以Apply and Close了。就此添加DSP静态库就好了。
    在这里插入图片描述

  5. 测试代码,编译验证
    在项目中添加头文件“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);
  }
  1. 使用静态库的方法完成。我们看到前面有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

生成海报
点赞 0

mutulula

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

嵌入式作业9

一、关于I2C总线 1.简介 I2C是Inter-Integrated Circuit的简称,读作:I-squared-C。由飞利浦公司于1980年代提出,为了让主板、嵌入式系统或手机用以连接低速周