参考网页: http://blog.csdn.net/electrocrazy/article/details/73456697

STM32F4xx属于Cortex M4F架构,带有32位的单精度硬件FPU(Float Point Unit),支持浮点指令集,相对比M0和M3架构,浮点运算性能高出数十倍甚至上百倍。CortexTMM4 FPU是ARMTMFPv4-SP单精度FPU一种实现形式。

启用硬件FPU

(1)通过修改代码实现

默认情况下,STM32F4xx的FPU是禁用的,可以通过设置协处理器控制寄存器(CPACR)来开启硬件FPU。
在keil编程环境下,可以通过定义全局宏定义标识符_FPU_PRESENT和_FPU_USED都为1来开启硬件FPU。
其中宏定义标识符_FPU_PRESENT用来确认处理是否带有FPU功能,标识符_FPU_USED用来确定是否开启FPU功能。
实际上,因为STM32F4是带有FPU功能的,所以在stm32f4xx.h头文件中,默认定义_FPU_PRESENT为1。可以在文件stm32f4xx.h中找到如下定义。


若要开启FPU还需要在头文件stm32f4xx.h中定义标示符_FPU_USED的值为1。即在刚才的宏定义下边添加一个宏定义。

(2)通过软件设置实现

点击图标(Options forTarget…),在”Target”选项卡里的“Code Generation”下的“Floating Point Hardware”下拉菜单中选择”Use FPU”。点击”OK“完成设置。经过设置之后,在程序编译时编译器会自动加入宏定义标识符_FPU_USED为1。

DSP库的使用

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

获取DSP库

从官网上下载http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/PF257901,并解压。

DSP库简介

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

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

DSP库环境搭建

在设置使用DSP库之前首先要先开启硬件FPU,然后按照如下步骤搭建DSP库运行环境。

在工程目录下新建DSP_LIB文件夹用于存放库文件。然后把arm_cortexM4lf_math.lib和相关头文件(路径STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Include里的文件)拷贝到DSP_LIB文件夹中。

然后打开工程,新建DSP_LIB分组,并将arm_cortexM4lf_math.lib添加到工程里面。

将第一步拷贝的Include文件夹和DSP_LIB文件夹,加入头文件包含路径。打开工程属性设置面板,然后点击”C/C++“选项卡,点击对号处,弹出include path设置面板。添加”..\DSP_LIB“。

为了能够使用DSP库的所有功能,还需要添加以下几个全局宏定义:

  • ARM_MATH_CM4

  • __CC_ARM

  • ARM_MATH_MATRIX_CHECK

  • ARM_MATH_ROUNDING

STM32F4 FPU和DSP库使用相关推荐

  1. STM32 HAL库 CUBEMX FPU 和 DSP库

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

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

    CubeMX生成的STM32F4xx MDK工程FPU和DSP库的使用 STM32F4xx属于Cortex M4F架构,带有32位的单精度硬件FPU(Float Point Unit),支持浮点指令集 ...

  3. STM32F4xx FPU和DSP库的使用

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

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

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

  5. 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_ ...

  6. STM32F4使用FPU+DSP库进行FFT运算的测试过程一

    测试环境:单片机:STM32F407ZGT6   IDE:Keil5.20.0.0  固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 第一部分:使用源码文件的方式,使 ...

  7. STM32F4的DSP库

    环境配置 1. CUBEMX 中勾选生成工程时添加所有库 2. Keil 中宏定义:,__FPU_PRESENT=1,__TARGET_FPU_VFP,ARM_MATH_CM4,__CC_ARM 3. ...

  8. 【STM32】STM32F4调用DSP库实现FFT运算

    写在前面 最近在整理之前的stm32笔记,打算把一些有价值的笔记发到CSDN分享一下. 奎斯特定理 在进行模拟/数字信号的转换过程中,当采样频率F大于信号中最高频率 fmax 的 2 倍时(F> ...

  9. STM32 DSP库的使用方法

    一.工程中如何添加DSP库 在keil5软件中点击 Pack,CMISIS组件选择DSP资源,可以选择Source源码或者Library库导入到项目中,点击OK,可以在项目树中看到该资源已经导入了工程 ...

最新文章

  1. IOS 后台挂起程序 当程序到后台后,继续完成定位任务
  2. JAVA的StringBuffer类
  3. 上职高学计算机专业好还是农林,职业高中电脑专业和大学电脑专业 有什么不同?...
  4. 一文看懂百度云智峰会:发布两大中台、八大方案,落地细节精准到发丝
  5. QT的QNetworkProxy类的使用
  6. 小幽默也有大道理:哲理幽默15则
  7. java ftp上传超时_java - Java FTP连接超时 - 堆栈内存溢出
  8. 面试加分项!程序员工作2年月薪12K,附架构师必备技术详解
  9. rx ajax,ajax_RxJS 中文文档_w3cschool
  10. Machine Learning(Andrew)Week6(上)
  11. C#——SqlParameter的使用方法及注意事项
  12. matlab排序excel数据库,matlab对excel数据进行排序求和
  13. 恒指赵鑫:7.24今日恒指喊单记录与小结
  14. 半导体产业行业手持式粒子计数器工作原理
  15. 做个grub的U盘启动盘,即将grub安装到U盘上面。
  16. 卡内基·梅隆大学计算机科学系主任周以真的父母是中国人吗,计算机与计算思维...
  17. 时钟页面置换算法c语言,clock置换算法例题(改进clock置换算法例题讲解)
  18. 游戏策划入门(5)——开始绘制系统的结构流程图
  19. BART model
  20. 北大吴思教授:人脑的视觉识别有无穷多个解

热门文章

  1. 智能驾驶安全专题 | 功能安全与SOTIF如何融合实施
  2. C语言:Fibonacci数列的递归解法和非递归解法
  3. Linux RS232驱动实验
  4. mac idea java 配置_Mac JAVA环境变量配置及IDEA JDK配置
  5. 【愚公系列】2021年12月 网络工程-进制转换
  6. UEditorPlus v2.6.0发布 编辑器草稿功能,操作体验优化
  7. PMP证书怎么续证?PDU要怎么获得?超过有效期证书就作废了吗?
  8. android 仿微信demo————注册功能完善添加头像功能(服务端)
  9. 绕过content-type检测文件类型上传webshell
  10. 单片机硬件和软件延时、RTOS相对延时和绝对延时