CubeMX生成的STM32F4xx MDK工程FPU和DSP库的使用
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库的使用相关推荐
- STM32 HAL库 CUBEMX FPU 和 DSP库
转自:https://blog.csdn.net/yuleitao/article/details/105621492?ivk_sa=1024320u FPU 简介 FPU 即浮点运算单元(Float ...
- STM32F4xx FPU和DSP库的使用
STM32F4xx属于Cortex M4F架构,带有32位的单精度硬件FPU(Float Point Unit),支持浮点指令集,相对比M0和M3架构,浮点运算性能高出数十倍甚至上百倍.CortexT ...
- 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_ ...
- STM32浮点运算单元(FPU)和DSP库使用
文章目录 1. 浮点运算单元(FPU) 1.1 所用硬件 1.2 配置FPU 2. CMSIS-DSP 2.1 添加DSP库 2.2 测试 ====>>> 文章汇总(有代码汇总) & ...
- STM32F4 FPU和DSP库使用
参考网页: http://blog.csdn.net/electrocrazy/article/details/73456697 STM32F4xx属于Cortex M4F架构,带有32位的单精度硬件 ...
- stm32f4 CubeMX生成IAR工程 移植ST官方 Bootloader 教程
目录 一.前言 二.CubeMX生成 IAR 工程 1.CubeMX生成工程 2.官方的IAP例程 三.移植bootloader 1.移植相关代码 2.flash_if.h文件修改 3.准备App程序 ...
- STM32L051测试 (一、使用CubeMX生成工程文件 — ST系列芯片通用)
本文也适合STM32CubeMX 支持的所有芯片的设置 ..调整文章结构,添加图文说明 2022.2 ..增加其他应用章节,增加 ADC 设置说明 2023.3 CubeMX生成工程步骤 前言 一.时 ...
- cubeMX生成AC6工程,无法调试!!!
一.前言 由于之前采用KEIL开发,但是由于KEIL的编辑功能实在是太差了,偶然的机会,发现ST官方,有提供自己的开发工具(AC6).实际上是ST公司基于ECLIPSE针对STM32开发的一个插件,E ...
- 【正点原子STM32连载】第六章 新建寄存器版本MDK工程 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
最新文章
- seq2seq中的beam search算法过程
- 笔记-项目进度管理-复习要点
- Haar、pico、npd、dlib等多种人脸检测特征及算法结果比较
- 「镁客·请讲」虚之实康成:等风来不如先发制人,打磨好硬件产品才是王道...
- 为什么程序员更喜欢用google搜索? 因为正经!
- 【CVE-2016-10009】OpenSSH 7.4 - agent Protocol Arbitrary Library Loading
- 为什么我创建了一个计算机用户名 再打开计算机时 我打不开以前的文件,电脑中office文件无法打开的三种解决方法...
- 5393: YuYu的密码II
- 《痞子衡嵌入式半月刊》 第 19 期
- 元末明初为什么会爆发农民起义
- oracle导入报错ora01652,Oracle ORA-01652错误
- 【面试】2019.7.10京东校招提前批
- mysql ignore详解_MySQL replicate-ignore-db详解
- 五、Web应用开发模式
- 把本地文件和文件夹提到公司的gitlab上
- 2021年煤矿采煤机(掘进机)操作考试报名及煤矿采煤机(掘进机)操作考试技巧
- 恢复桌面上的IE图标,并非快捷方式
- 高/低压供配电系统设计——安科瑞变电站电力监控系统的应用
- win7系统自动休眠设置
- OO(面向对象)的设计模式
热门文章
- 如何学习Hadoop,学习Hadoop要学什么?怎么学?
- 华为发布首款鸿蒙系统终端,首款鸿蒙系统终端新闻 华为正式发布鸿蒙系统
- 回发或回调参数无效 的解决办法
- [ Azure - NSG ] 通过 Azure 网络安全组建立虚拟机的入站规则 Inbound 和出站规则 Outbound
- 查看服务器所有进程信息,怎么查看服务器上的所有进程
- 关于大数据技术的演讲_2020年大数据技术应用趋势与当前大数据技术实践反思...
- R语言 CHAR 11
- 绿联扩展坞拆解_拆解报告:UGREEN绿联2A1C三口多功能拓展坞
- jQuery动画+案例
- thinkphp5oa管理系统