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

这篇具有很好参考价值的文章主要介绍了STM32浮点运算单元(FPU)和DSP库使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

====>>> 文章汇总(有代码汇总) <<<====

1. 浮点运算单元(FPU)

针对M4往上内核的芯片都具有FPU浮点运算单元。可以加快浮点数的运算速度。

1.1 所用硬件

硬件:STM32F401CCU6系统板(淘宝十几块钱一个系统板)。
软件:CubeMX、Keil(5.38,建议使用新版本的,对于宏定义没有的部分会有灰色提示)。

1.2 配置FPU

首先打开system_stm32f4xx.c可以看到,在系统初始化函数中,需要有

  1. __FPU_PRESENT == 1
  2. __FPU_USED ==1

需要有这两个定义才可以配置。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
而在这个文件中引用了头文件:stm32f4xx.h
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
stm32f4xx.h中引用了stm32f401xc.h
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
stm32f401xc.h中已经对 __FPU_PRESENT == 1 定义过了。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件

然后就差 __FPU_USED ==1 了。
打开core_cm4.h,可以看到,默认 __FPU_USED 是为0的。
显然,这里是因为没有定义 __TARGET_FPU_VFP,所以下面的没有打开。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
因此,定义上就可以了。点击魔术棒,添加上如下定义:,__TARGET_FPU_VFP。(注意:是有个逗号和前面分开的)。然后点OK。
如果有的是因为 __CC_ARM 没有定义的话, 那就也添加上去就好了。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
然后再次看就发现,__FPU_PRESENT == 1前面不是已经有了吗,为什么这里还是灰色的。
那是因为在这个文件中并没有包含定义__FPU_PRESENT的文件。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
解决方法1(修改文件的方法都不建议):在这个文件中引用 定义有__FPU_PRESENT的文件。如下图。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
解决方法2:把__FPU_PRESENT=1U在这里再添加一次。
注意是1U 不是1,如果写成1,就和stm32f401cx.h中定义的不一样,会报很多重定义警告。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件

此时再看。浮点运算就配置好了。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
最后,勾选上使用单精度硬件浮点运算即可。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件

2. CMSIS-DSP

2.1 添加DSP库

两种方法
第一种:直接下载源码,放到工程文件夹,并且添加头文件路径。
第二种:CubeMX添加。

这里用第二种(多方便)

在生成工程页面选择。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
勾选上之后点击OK。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
勾选上之后,生成工程。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
打开工程可以看到,已经添加好了。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
此时,在main.c文件中,添加#include “arm_math.h”,然后编译会报错。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件

这是因为在arm_math.h中会根据内核类型引用不同的文件。因此这里需要定义内核。

stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
解决:根据自己的内核添加即可。这里是M4的。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
此时再次编译,就没有报错了。

2.2 测试

在主函数中添加代码,在调试窗口可以看到.F32。
stm32 浮点数,开源库,stm32,单片机,嵌入式硬件
可以在官网看到所有的函数及解释说明

====>官网地址<====文章来源地址https://www.toymoban.com/news/detail-609917.html

到了这里,关于STM32浮点运算单元(FPU)和DSP库使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

    首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。 1. 测评背景 GD32作为国产化ARM中的旗舰,其全系列产品不仅市场占有率高,而且各具特色,广受使用者好评。 笔者在测评这款GD32F310之前,曾经使用过GD32F450,其强大的性能,低廉的价

    2023年04月09日
    浏览(33)
  • 【ARM 浮点计算单元 FPU (FPA,VFP,NEON)介绍】

    文章目录 1.1 ARM FPU 简介 1.1.1 单精度浮点数 1.1.2 双精度浮点数 1.1.3 指数与尾数的特殊情况 1.1.4 IEEE 754 标准 1.2 编译器对浮点数的影响 1.2.1 VFP 和 FPA 的关系 1.2.1.1 VFP的功能特点 1.2.2 GCC 与浮点运算 1.2.3 VFP 现场保护 1.2.4 硬浮点与软浮点 1.3 ARM NEON 1.1 ARM FPU 简介 ARM 的 FPU(浮点单

    2024年03月21日
    浏览(52)
  • STM32 FIR滤波器使用要点,STM32 DSP篇

    STM32搭配的CMSIS的DSP库已经写好了FIR,我们做的就是用好用稳定! 2.1使用MATLAB的Filter Designer生成滤波器的参数(直接在MATLAB命令中输入filterDesigner即可调出此工具,配置好参数后,选择Targets-Generate C header) 2.2调用arm_fir_init_f32或arm_fir_init_q31或arm_fir_init_q15等等视实际使用情况而

    2024年02月14日
    浏览(33)
  • STM32 keil MDK配置FPU详解

    记录下keil对FPU的配置,及对应的宏参数。 FPU单元是芯片上一个独立于CPU处理的浮点运算单元,整个单元可以被使能和关闭。 STM32F4带有32位单精度硬件FPU支持浮点指令集。相比Cortex-M3、Cortex-M0等无FPU的芯片高出数十倍甚至上百倍的运算性能。 STM32F7/H7及以上处理器带有双精度

    2024年02月11日
    浏览(28)
  • 【STM32】 DSP库函数的一些基本使用

    对于一些刚接触STM32的童靴来说,DSP库一定是一个陌生的东西。通俗来说,DSP库就是为了让MCU能够使用像DSP(数字信号处理的芯片)功能弄的一些官方库函数,它是基于MCU的FPU(浮点运算功能)的,如果你连FPU都不知道咋开,我个人建议先去查一查啥是FPU以及DSP库移植的一些

    2024年02月01日
    浏览(23)
  • STM32中DSP库简单理解和使用

    主要参考arm_math.h中的内容编写,以STM32F091为例 数字信号处理(DigitalSignal Processing,简称 DSP ) 是一门涉及许多学科而又广泛应用于许多领 域的新兴学科,通过利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、 压缩、识别等处理,以得到符

    2024年02月15日
    浏览(41)
  • STM32CubeMX关于添加DSP库的使用

    人生如逆旅,我亦是行人。 STM32 系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的 ARM Cortex-M3 内核 而 DSP 应该是 TMS320 系列, TMS320 系列 DSP 是 软件可编程器件 ,具有通用微处理器所具有的方便灵活的特点。其基本特点有: 哈佛结构,流水线操作 ,专用的

    2023年04月08日
    浏览(28)
  • STM32实现TFT LCD浮点数显示

    方式一:通过sprintf将小数转换成字符串,通过字符串显示函数LCD_ShowString()显示 方式二:计算出浮点数整数部分、小数部分、整数部分的数字数和小数部分的数字数,通过数字显示函数LCD_ShowNum()和LCD_ShowChar(仅数点)显示,三部分拼接而成 浮点数--“整数部分的数字数

    2024年02月16日
    浏览(37)
  • STM32串口传输浮点数

    现代的计算机系统一般采用 字节 (Octet, 8 bit Byte)作为逻辑寻址单位,当物理单位的长度大于 1 个字节时,就要区分字节顺序(Byte Order, or Endianness)。 字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。字节序也用于描述多字节数

    2024年02月03日
    浏览(17)
  • STM32调用DSP函数方法

    ..DriversCMSISDSPIncludearm_math.h(341): error:  #35: #error directive: \\\"Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS, ARM_MATH_CM0, ARM_MATH_ARMV8MBL, ARM_MATH_ARMV8MML\\\"     #error \\\"Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS, ARM_MATH_CM0, ARM_M

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包