STM32~FPU协处理器

本文介绍了浮点运算单元(FPU)的基本概念及其在STM32系列微控制器中的应用。对比了带有FPU的STM32与其他不带FPU的微控制器在浮点运算上的性能差异,并详细解释了如何通过配置CPACR寄存器来启用STM32的FPU功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、FPU浮点运算单元

浮点单元支持单精度浮点计算、一些转换操作、存储器访问和寄存器组间的数据传输。
对于没有浮点运算单元的MCU(51、AVR),CPU是按照IEEE-754标准的算法来完成运算,消耗资源多,运算时间长。对于有FPU协处理器,浮点运算是由相关指令完成。现在有硬件浮点运算能力的主要有高端DSP,通用CPU和高级的ARM+DSP处理器等。
浮点指令

2、STM32的FPU浮点运算单元

STM32F4带有32单精度硬件FPU支持浮点指令集。相比Cortex-M3、Cortex-M0等高出数十倍甚至上百倍的运算性能。
STM32M7/H7及以上处理器带有双精度硬件FPU。
FPU单元是芯片上一个独立于CPU处理的浮点运算单元,整个单元可以被使能和关闭。
M4架构

3、CPACR寄存器

浮点寄存器包括SCB中的CPACR(协处理器访问控制寄存器)、浮点寄存器组、浮点状态和控制寄存器FPSCR、用于浮点运算和控制的其他寄存器。对于FPU使能和关闭,CPACR寄存器位于0xE000ED88处,可通过CMSIS-core中的SCB->CPACR来访问。
寄存器
芯片复位后,CP10和CP11 四个位默认为0,FPU是关闭的,此时禁止访问协处理器(禁止了硬件FPU)。将这四个位设置为1,即可完全访问协处理器,从而开启硬件FPU功能。一般该操作是在SystemInit()函数内执行,如下是汇编版的
这里写图片描述

4、HAL库开启FPU

一、直接设置SCB->CPACR寄存器的CP10和CP11,开启FPU。
二、配置全局宏定义标识符__FPU_USED 的值为1,一般M4的工程都有是否支持FPU、是否使用FPU的宏。
一般开发过程中无需更改CPACR这部分代码,只需把__FPU_USED宏打开,开发人员只需去编写算法。
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是嗨森啦

如果文章还不错,欢迎点赞收藏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值