STM32F4 浮点计算
STM32F4 浮点计算
好的,关于 STM32F4 系列的浮点计算,以下是用中文进行的详细说明:
核心:Cortex-M4 内核与可选 FPU
-
硬件基础:
- STM32F4 系列微控制器基于 ARM Cortex-M4 内核。
- 关键点: 大多数 STM32F4 子系列(如 F401/F405/F407/F415/F417/F427/F429/F437/F439/F446/F469/F479)都集成了单精度浮点单元。
- 这个硬件单元称为 FPU,专用于加速 IEEE-754 标准的单精度(32位)浮点数运算(
float类型)。 - 注意:少数低端/早期的 F4 型号(如 F410/F411)不包含硬件 FPU。务必查询你使用的具体型号的数据手册确认。
-
硬件 FPU 的优势:
- 大幅提升速度: 这是最主要的好处。执行一次单精度浮点加/减/乘操作,硬件 FPU 通常只需要 1-14 个时钟周期(具体取决于操作类型)。
- 降低 CPU 负载: CPU 内核只需发出指令,复杂的浮点计算由专用硬件完成,解放 CPU 去处理其他任务。
- 提高能效: 在相同性能下,专用硬件通常比软件模拟消耗的能量更少。
- 简化编程: 开发者可以直接在代码中使用
float类型和浮点运算(+,-,*,/,sqrt(),sin(),cos()等数学函数),无需自己写复杂的定点数模拟算法。
-
软件配置(启用 FPU):
- 仅仅芯片有硬件 FPU 还不够,必须在软件中明确启用它,编译器才会生成使用 FPU 指令的代码。
- 启用方法(常见的两种环境):
- MDK-ARM (Keil):
- 打开工程选项 (
Options for Target)。 - 转到
Target标签页。 - 在
Floating Point Hardware下拉菜单中,选择Use FPU(通常对应Single Precision)。确保Code Generation标签页下的ARM Compiler版本支持 FPU(V5 或更新版本通常没问题)。
- 打开工程选项 (
- IAR Embedded Workbench:
- 打开工程选项 (
Options for Project)。 - 转到
General Options类别。 - 在
Floating point settings下的FPU下拉菜单中,选择VFPv4 for Cortex-M4或类似的选项(明确指向 FPU)。
- 打开工程选项 (
- STM32CubeIDE/GCC:
- 在项目属性中,找到编译器的处理器特定选项。
- 确保启用了
-mfpu=fpv4-sp-d16和-mfloat-abi=hard(或softfp,但推荐hard) 标志。
- MDK-ARM (Keil):
- 重要: 初始化代码(通常是
system_stm32f4xx.c中的SystemInit()函数或其调用的函数)也会启用 FPU(通过设置CPACR寄存器)。CubeMX/HAL 生成的代码通常会自动包含这一步。
-
数据类型注意事项:
float(单精度, 32位): 这是硬件 FPU 原生支持 的数据类型,运算速度最快。double(双精度, 64位): STM32F4 的 FPU 不支持 硬件双精度运算。即使启用了 FPU:- 编译器可能会将它们当作
float处理(精度降低)。 - 更常见的是,编译器会使用 软件模拟库 来计算双精度浮点运算。这会非常慢(可能需要数百甚至数千个周期)。
- 编译器可能会将它们当作
- 建议: 在 STM32F4(带 FPU)上,优先使用
float类型以获得最佳性能。除非有严格的精度要求且能接受巨大的性能开销,否则避免使用double。
-
STM32 DSP 库:
- ST意法半导体提供了针对 Cortex-M4(带 FPU)优化的 STM32 DSP 库。
- 这个库包含大量高度优化的信号处理函数(如 FFT, FIR, IIR 滤波器, 矩阵运算, PID, 三角函数等)。
- 这些函数充分利用了硬件 FPU 和 Cortex-M4 的 SIMD(单指令多数据)指令(如饱和运算、乘加指令),比直接使用标准 C 库的浮点函数(如
math.h中的函数)或自己用float写的等效代码快得多。 - 如果你需要进行复杂的数学或信号处理运算,强烈建议使用 STM32 DSP 库。
-
性能对比(启用 FPU vs 未启用 FPU / 软件模拟):
- 启用硬件 FPU (
float): 单次加法/乘法约 1-14 个周期。 - 未启用 FPU / 无 FPU 的芯片 (软件模拟
float): 单次加法/乘法可能需要 几十到上百个周期。 double运算 (无论有无 FPU): 单次加法/乘法可能需要 几百甚至上千个周期 (软件模拟)。
- 启用硬件 FPU (
-
使用建议:
- 确认芯片: 首先确定你的 STM32F4 型号确实包含硬件 FPU。
- 编译器配置: 最关键一步! 务必在编译器/IDE 设置中启用 FPU 支持(见第 3 点)。
- 使用
float: 尽量使用单精度浮点数 (float)。 - 避免
double: 除非绝对必要且有性能余量,避免使用双精度浮点数 (double)。 - 利用 DSP 库: 对于复杂运算,集成并使用 STM32Cube 提供的 DSP 库。
- 注意上下文保存: 当使用 FPU 且发生中断时,中断服务程序如果也使用浮点运算,需要保存/恢复 FPU 寄存器(大量的
S/D寄存器),这会增加中断延迟。编译器通常会自动处理(如果 FPU 启用且中断函数用了浮点),但需留意其开销。
总结:
STM32F4(大多数型号)内置了强大的单精度硬件浮点单元,能极大加速 float 类型的运算。要发挥其性能,必须:
- 确认芯片支持 FPU。
- 在编译器/IDE 中正确配置启用 FPU。
- 在代码中优先使用
float类型。 - 避免使用
double(慢)。 - 对于信号处理等复杂计算,使用优化好的 STM32 DSP 库。
正确地配置和使用 FPU 是提升 STM32F4 涉及浮点计算的应用程序性能的关键。
STM32F4 DAC数模转换实验例程
STM32F4 DAC数模转换实验例程(现代电源技术试卷西建大)-STM32F4 DAC数模转换实验例程,有需要的可以参考!
资料下载
佚名
2021-09-16 10:18:15
STM32F4 PWM-DAC实验例程
STM32F4 PWM-DAC实验例程(电源技术是sci吗)-STM32F4 PWM-DAC实验例程,有需要的可以参考!
资料下载
佚名
2021-09-16 10:14:07
STM32F4 SPI-FLASH实验例程
STM32F4 SPI-FLASH实验例程(java的哪个版本用于嵌入式开发)-STM32F4 SPI-FLASH实验例程,有需要的可以参考!
资料下载
手托初梦
2021-07-30 16:01:23
STM32F4内部Flash实验例程
STM32F4内部Flash实验例程(嵌入式开发版哪个好)-STM32F4内部Flash实验例程,有需要的可以参考!
资料下载
无人岛
2021-07-30 15:58:01
基于Cortex-M4的STM32F4的复位序列
7是基于Cortex-M7内核,而Cortex-M7和Cortex-M3/M4的复位序列有些不一样。本文中,将针对这个问题做详细讲解。 STM32F4的复位序列
2021-02-16 06:14:00
STM32F4开发板STM32F4如何驱动外部SRAM芯片
国产存储芯片的底层技术攻关和相关科研工作,从而推动国家存储芯片设计前端产业变革和更进一步的发展。接下来星忆代理商英尚微电子介绍STM32F4开发板STM32F4如何驱动外部SRAM芯片。XM8A51216。
2020-07-01 15:07:09
基于STM32F4系列芯片和STM32CubeF4 HAL库组织和添加用户代码
常有人想使用STM32 DMA的双缓冲模式,但又觉得实现起来似乎有点困难,也不太容易找到现存的例程。我这里就基于STM32F4芯片及Cube库简单地演示下实现过程。
2020-06-10 08:38:44
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机