class="markdown_views prism-dracula">
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处理的浮点运算单元,整个单元可以被使能和关闭。
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宏打开,开发人员只需去编写算法。