前言
FPU的使用,可以提高浮点运算的效率,大大缩短计算时间的情况下,保证的计算精度。
一、FPU是什么?
FPU是专门用于浮点计算的单元。根据IEEE的浮点标准原本通用CPU需要3~4个周期的计算时间现在只需要一个FPU指令就行。在触摸屏,数学函数运算时特别有用。
二、使用步骤
1.引入库
- arm_cortexM4f_math.lib(DSP)
2.开启浮点运算单元
3.添加宏定义
ARM_MATH_CM4,__TARGET_FPU_VFP,__FPU_PRESENT
4.SystemInit 添加代码.
system_hc32f460keua.c 的系统初始化函数 SystemInit 添加这段代码.
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 20) | (3UL << 22)); /* set CP10 and CP11 Full Access */
#endif
CPACR寄存器
浮点寄存器包括SCB中的CPACR(协处理器访问控制寄存器)、浮点寄存器组、浮点状态和控制寄存器FPSCR、用于浮点运算和控制的其他寄存器。对于FPU使能和关闭,CPACR寄存器位于0xE000ED88处,可通过CMSIS-core中的SCB->CPACR来访问。
寄存器
芯片复位后,CP10和CP11 四个位默认为0,FPU是关闭的,此时禁止访问协处理器(禁止了硬件FPU)。将这四个位设置为1,即可完全访问协处理器,从而开启硬件FPU功能。一般该操作是在SystemInit()函数内执行
5.使用FPU优化
浮点常数加f 2500.0f
FPU,编译器默认开启FPU,double型变量计算速度有所下降。
2500.0默认是double型变量,2500.0f为float型变量。
计算速度在某些情况下比double快几倍,大概5倍左右,如果对精度要求不是很高可以采用float。
存在问题
导致串口波特率初始化失败!!
总结
以上就是今天要讲的内容,本文仅仅简单介绍了FPU的使用,而FPU提供了大量能使我们快速便捷地处理数据的函数和方法。
鸣谢参考
http://www.51hei.com/bbs/dpj-218361-1.html
https://blog.csdn.net/cypressxt926/article/details/113633988
https://blog.csdn.net/hemeinvyiqiluoben/article/details/81428518