CubeMX生成的STM32F4xx MDK工程FPU和DSP库的使用

STM32F4xx属于Cortex M4F架构,带有32位的单精度硬件FPU(Float Point Unit),支持浮点指令集,相对比M0和M3架构,浮点运算性能高出数十倍甚至上百倍。FPU和DSP库的使用网上已经有了好多教程,但好多都是基于正点原子代码操作的,在CubeMX生成的工程中如何使用如何使用上述两种功能,并没有针对性的提及。

一、启动硬件FPU

1、启用FPU简介

此处关键在于对两个重要的全局宏定义进行操作:将 _FPU_PRESENT_FPU_USED 都置1,其中宏定义标识符_FPU_PRESENT用来确认处理是否带有FPU功能,标识符_FPU_USED用来确定是否开启FPU功能。实际上,因为STM32F4是带有FPU功能的,所以在stm32f4xxxx.h头文件中,默认定义_FPU_PRESENT为1。

正常按照条件编译,_FPU_USED,应该被置1,但在core_cm4.h中条件编译会并没有将 _FPU_USED 置1,同时还会报错。

根据条件编译的原理,应该是编译器没有检测到_FPU_PRESENT被定义,于是我将定义_FPU_PRESENT的文件 包含进来,可以看到条件编译已经把 _FPU_USED 置1了

但编译时,不清楚具体的原因会大量报错。下面我就正式讲解一下我解决这个问题的方法。(进入正题)

2、启用FUP方法

①.首先在Option for Target → Target → Coda Generation中启用FPU。

②.在Option for Target → C/C++ → Define中添加四个宏定义(后三个是用在DSP调用过程中的,此处一并添加了),并将stm32f4xxxx.h头文件中,默认的定义_FPU_PRESENT注释掉。否则__FPU_PRESENT会重复定义。

__FPU_PRESENT=1,__TARGET_FPU_VFP,ARM_MATH_CM4,__CC_ARM

③.编译,到此单片机的硬件FPU便被启用。

二、DSP库的使用

1、DSP库初识

STM32F4的Cortex-M4内核不仅内置硬件FPU单元,还支持DSP多种指令集,比如支持单周期乘加指令(MAC)、优化的单指令多数据指令(SIMD)等。因此Cortex-M4执行所有的DSP指令集都可以在单周期内完成,而Cortex-M3和M0需要多个指令和多个周期才能完成同样的功能。比如开方运算,M3和M0只能通过迭代法(标准数学函数库)计算,而M4F直接调用VSQRT指令完成。

①.DSP库的获取:官网下载,并解压;但使用CubeMX生成MDK工程时,选择添加全部文件,则在生成的工程文件中已将带有DSP的相关文件和库了,不需单独下载。

DSP库路径如下:

DSP相关文件、例程路径如下:

②.DSP库介绍

DSP库主要包含以下几个分库:

  • BasicMathFunctions – 基本数学函数:提供浮点数的各种基本运算函数,如向量加减乘除等运算。
  • ommonTables –arm_common_tables.c文件提供位翻转或相关参数表。
  • ComplexMathFunctions –复杂数学功能,如向量处理,求模运算的。
  • ControllerFunctions –控制功能函数。包括正弦余弦,PID电机控制,矢量Clarke变换,矢量Clarke逆变换等。
  • astMathFunctions –快速数学功能函数。提供了一种快速的近似正弦,余弦和平方根等相比CMSIS计算库要快的数学函数。
  • ilteringFunctions –滤波函数功能,主要为FIR和LMS(最小均方根)等滤波函数。
  • MatrixFunctions –矩阵处理函数。包括矩阵加法、矩阵初始化、矩阵反、矩阵乘法、矩阵规模、矩阵减法、矩阵转置等函数。
  • StatisticsFunctions –统计功能函数。如求平均值、最大值、最小值、计算均方根RMS、计算方差/标准差等。
  • SupportFunctions –支持功能函数,如数据拷贝,Q格式和浮点格式相互转换,Q任意格式相互转换。
  • TransformFunctions –变换功能。包括复数FFT(CFFT)/复数FFT逆运算(CIFFT)、实数FFT(RFFT)/实数FFT逆运算(RIFFT)、和DCT(离散余弦变换)和配套的初始化函数。

2、DSP库的添加

①.在工程中选中DSP库,并添加。 ST提供了.lib格式的文件,方便使用这些库。这些.lib文件就是由Source文件夹下的源码编译生成的,如果想看某个函数的源码,可以在:工程文件夹 → Drivers → CMSIS → DSP → Source文件夹下面查找。

.lib格式文件路径:工程文件夹 → Drivers → CMSIS → Lib。共有四个文件,其中:

arm_cortexM4bf_math.lib(浮点Cortex-M4大端模式)

arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式)

STM32F4的内核CortexM4F采用小端模式,所以选择:arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式)。


②.添加头文件:路径:工程文件夹 → Drivers → CMSIS → DSP → Include


③.编译,DSP库环境搭建成功,可以调用相关函数进行数字信号处理。

CubeMX生成的STM32F4xx MDK工程FPU和DSP库的使用相关推荐

  1. STM32 HAL库 CUBEMX FPU 和 DSP库

    转自:https://blog.csdn.net/yuleitao/article/details/105621492?ivk_sa=1024320u FPU 简介 FPU 即浮点运算单元(Float ...

  2. STM32F4xx FPU和DSP库的使用

    STM32F4xx属于Cortex M4F架构,带有32位的单精度硬件FPU(Float Point Unit),支持浮点指令集,相对比M0和M3架构,浮点运算性能高出数十倍甚至上百倍.CortexT ...

  3. MDK AC6开启FPU移植DSP库时报错Error: L6242E: Cannot link object arm_cos_f32.o as its attributes are incompat

    报错 我在keil mdk中使用AC6作为编译器,在给f4移植dsp库时报错,照网上教程配置好了,编译后报错 Error: L6242E: Cannot link object arm_common_ ...

  4. STM32浮点运算单元(FPU)和DSP库使用

    文章目录 1. 浮点运算单元(FPU) 1.1 所用硬件 1.2 配置FPU 2. CMSIS-DSP 2.1 添加DSP库 2.2 测试 ====>>> 文章汇总(有代码汇总) & ...

  5. STM32F4 FPU和DSP库使用

    参考网页: http://blog.csdn.net/electrocrazy/article/details/73456697 STM32F4xx属于Cortex M4F架构,带有32位的单精度硬件 ...

  6. stm32f4 CubeMX生成IAR工程 移植ST官方 Bootloader 教程

    目录 一.前言 二.CubeMX生成 IAR 工程 1.CubeMX生成工程 2.官方的IAP例程 三.移植bootloader 1.移植相关代码 2.flash_if.h文件修改 3.准备App程序 ...

  7. STM32L051测试 (一、使用CubeMX生成工程文件 — ST系列芯片通用)

    本文也适合STM32CubeMX 支持的所有芯片的设置 ..调整文章结构,添加图文说明 2022.2 ..增加其他应用章节,增加 ADC 设置说明 2023.3 CubeMX生成工程步骤 前言 一.时 ...

  8. cubeMX生成AC6工程,无法调试!!!

    一.前言 由于之前采用KEIL开发,但是由于KEIL的编辑功能实在是太差了,偶然的机会,发现ST官方,有提供自己的开发工具(AC6).实际上是ST公司基于ECLIPSE针对STM32开发的一个插件,E ...

  9. 【正点原子STM32连载】第六章 新建寄存器版本MDK工程 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

最新文章

  1. seq2seq中的beam search算法过程
  2. 笔记-项目进度管理-复习要点
  3. Haar、pico、npd、dlib等多种人脸检测特征及算法结果比较
  4. 「镁客·请讲」虚之实康成:等风来不如先发制人,打磨好硬件产品才是王道...
  5. 为什么程序员更喜欢用google搜索? 因为正经!
  6. 【CVE-2016-10009】OpenSSH 7.4 - agent Protocol Arbitrary Library Loading
  7. 为什么我创建了一个计算机用户名 再打开计算机时 我打不开以前的文件,电脑中office文件无法打开的三种解决方法...
  8. 5393: YuYu的密码II
  9. 《痞子衡嵌入式半月刊》 第 19 期
  10. 元末明初为什么会爆发农民起义
  11. oracle导入报错ora01652,Oracle ORA-01652错误
  12. 【面试】2019.7.10京东校招提前批
  13. mysql ignore详解_MySQL replicate-ignore-db详解
  14. 五、Web应用开发模式
  15. 把本地文件和文件夹提到公司的gitlab上
  16. 2021年煤矿采煤机(掘进机)操作考试报名及煤矿采煤机(掘进机)操作考试技巧
  17. 恢复桌面上的IE图标,并非快捷方式
  18. 高/低压供配电系统设计——安科瑞变电站电力监控系统的应用
  19. win7系统自动休眠设置
  20. OO(面向对象)的设计模式

热门文章

  1. 如何学习Hadoop,学习Hadoop要学什么?怎么学?
  2. 华为发布首款鸿蒙系统终端,首款鸿蒙系统终端新闻 华为正式发布鸿蒙系统
  3. 回发或回调参数无效 的解决办法
  4. [ Azure - NSG ] 通过 Azure 网络安全组建立虚拟机的入站规则 Inbound 和出站规则 Outbound
  5. 查看服务器所有进程信息,怎么查看服务器上的所有进程
  6. 关于大数据技术的演讲_2020年大数据技术应用趋势与当前大数据技术实践反思...
  7. R语言 CHAR 11
  8. 绿联扩展坞拆解_拆解报告:UGREEN绿联2A1C三口多功能拓展坞
  9. jQuery动画+案例
  10. thinkphp5oa管理系统