地瓜patch 发表于 2025-7-30 21:23

如何在STM32F407中使用FPU。

想用STM32F407 Discovery利用FPU进行开发。我需要运行一些浮点数和指数计算。需要使用FPU来加速计算过程。我已经完成了外设驱动程序(我没有使用Cube HAL层或CMSIS层的代码)。如何利用处理器的FPU来执行浮点计算?需要编写代码还是需要添加某些库?我试过在设置中启用硬件的FPU,但当我执行浮点/双精度计算时,代码陷入了死循环,我猜测这是因为缺少执行浮点计算的代码或FPU未被使用?如何执行基于软件的浮点计算。我需要向代码中添加哪个库。

磨砂 发表于 2025-8-1 10:45

进入“Configuration”选项卡,确保勾选FPU功能。此操作会自动设置相关寄存器,使FPU处于活动状态

香水城 发表于 2025-8-1 11:06

下面文章供参考下:


关于STM32浮点运算单元FPU的小话题

晓伍 发表于 2025-8-1 13:08

在启动文件中添加以下代码以手动激活FPU
LDR.W R0, =0xE000ED88      // 加载FPU控制寄存器地址
LDR R1,             // 读取当前值
ORR R1, R1, #(0xF << 20)   // 设置权限位(允许所有访问级别)
STR R1,             // 写回寄存器
DSB                     // 数据同步屏障
ISB                     // 指令同步屏障


八层楼 发表于 2025-8-1 15:39

在C代码中配置FPU的控制寄存器,例如启用单精度模式

观海 发表于 2025-8-1 17:58

通过调试模式查看汇编代码是否包含以V开头的指令,这是FPU生效的标志

guanjiaer 发表于 2025-8-1 20:17

STM32F4系列仅支持单精度浮点。双精度运算可能导致异常错误,所以建议优先使用float而非double

heimaojingzhang 发表于 2025-8-1 22:35

对于三角函数等复杂计算,调用ARM优化过的数学库函数

keaibukelian 发表于 2025-8-2 09:22

在多任务或中断场景下,需确保FPU状态正确保存,避免寄存器冲突。可通过临界区保护关键代码段

paotangsan 发表于 2025-8-2 11:41

若应用无需高精度计算,可禁用FPU以节省功耗和代码空间。使用时应注意浮点运算会增加代码体积和执行时间

renzheshengui 发表于 2025-8-2 13:56

进行快速傅里叶变换时,结合DSP库与FPU可实现高效信号处理。此时需预先配置好DSP模块参数,并利用FPU加速中间过程的浮点矩阵运算

wowu 发表于 2025-8-2 16:20

主频设为168MHz时,启用FPU后10万次乘法运算时间从32153μs降至5954μs,性能提升约6倍

youtome 发表于 2025-8-4 11:58

需要在启动代码中启用FPU            

地瓜patch 发表于 2025-8-4 14:17

香水城 发表于 2025-8-1 11:06
下面文章供参考下:




感谢版主,已经学习

uiint 发表于 2025-8-4 14:48

stm32f407浮点运算优化            

bartonalfred 发表于 2025-8-4 16:45

启用FPU的步骤 启用FPU需设置编译器标志并配置CPACR寄存器,以生成硬件浮点指令并启用FPU。

hilahope 发表于 2025-8-4 20:21

所有浮点运算均通过软件模拟器实现,速度慢且耗时。

biechedan 发表于 2025-8-4 22:18

STM32F407具有Cortex-M4内核,支持单精度和双精度浮点运算。

lihuami 发表于 2025-8-5 09:47

初始化FPU            

yorkbarney 发表于 2025-8-5 11:34

启用 FPU 后,浮点循环耗时接近整数运算耗时。
页: [1] 2
查看完整版本: 如何在STM32F407中使用FPU。