STM32~FPU协处理器

本文详细介绍了FPU浮点运算单元的工作原理及其在STM32系列微控制器中的应用。从FPU的基本概念出发,对比了带有FPU和不带FPU的微控制器在浮点运算性能上的差异,并深入探讨了STM32F4和更高端型号中FPU的具体实现方式。此外,还介绍了如何通过配置CPACR寄存器来启用FPU,以及使用HAL库进行FPU设置的方法。

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

转自 : https://blog.youkuaiyun.com/Bluechalk/article/details/78706641

 

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宏打开,开发人员只需去编写算法。 
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值