一. 前语
有工程师反响说Keil 下无法运用STM32F4xx 硬件浮点单元, 导致当运算浮点时运算时刻过长,还有一些人反响不知怎么运用芯片芯片内部的杂乱数学运算,比方三角函数运算。针对这个部分本文将具体介绍怎么运用硬件浮点单元以及相关数学运算。
二.问题发生原因
1. ——关于Keil MDK Version 5 版别, 编译器现已彻底支撑STM32F4xx 的FPU(浮点运算单元),能够直接
运用芯片内部的浮点运算单元。
2. ——关于Keil MDK Version 4 版别, 高版别v4,比方当时keil 官网可下载的v4.74.0.0 版别也现已支撑
FPU,能够直接运用芯片内部浮点运算。但假如运用低版别v4,如v4.23.0.0 版别, 则需求对软件进行相应
设置。
三. 怎么解决问题
1. 检查手头Keil 版别是否支撑FPU,最简略方法是进入Keil 调试界面直接检查0xE000ED88 地址单元数据,
假如为0x00F00000, 则阐明现已支撑FPU,如下图所示:
2. 假如0xE000ED88地址数据为0x00000000,则需求做如下操作:
a. 在system_stm32f4xx.c文件中的systeminit()函数里边增加如下代码:
/* FPU settings————————————————————*/
#if (__FPU_PRESENT == 1) &&(__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL<< 11*2)); /* set CP10 and CP11 Full Access */
#endif
b. 在工程选项(Project->Optionsfor target “XXXX”)中的C/C++选项卡的Define 中参加如下的句子,
见下图所示:
__FPU_PRESENT=1,__FPU_USED =1。
c. 这样编译时就参加了发动FPU 的代码,CPU 也就能正确高效的运用FPU 进行简略的加减乘除了。
3. 进一步阐明运用芯片杂乱数学运算运用
关于杂乱运算,比方三角函数,开方等运算,需求如下设置:
a. 包括arm_math.h头文件。
b. 在工程选项的C/C++选项卡的define 中继续参加句子ARM_MATH_CM4。
c. 在工程选项的C/C++选项卡的define 中继续参加句子__CC_ARM。
以运用sin,cos 运算举例,需求调用arm_sin_f32()以及arm_cos_f32(),这两个函数界说在
arm_sin_f32.c 和arm_cos_f32.c中,需求在工程中参加这两个c 文件。
* 在 ST 库文件包中的文件目录如下:
\stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.1.0\Libraries\CMSIS\DSP_Lib\Sou
rce\FastMathFunctions
* 在keil 装置目录下的文件目录如下:
\Keil\ARM\CMSIS\DSP_Lib\Source\FastMathFunctions
当用到更多数学运算, 如开根号,三角运算,求绝对值等等,客户也能够直接在工程中参加ARM 中的数学运算库arm_cortexM4lf_math.lib,而不需求一个个文件的增加,
* 在 ST 库文件包中的目录如下:
\STM32F4xx_DSP_StdPeriph_Lib_V1.6.0\STM32F4xx_DSP_StdPeriph_Lib_V1.6.0\Libraries\CMSIS\Lib\ARM
* 在keil 装置目录下的文件目录如下:
\Keil\ARM\CMSIS\Lib\ARM
四.结语
从测验作用看当运用了硬件浮点运算单元,数学核算变得简略高效,能够留给体系更多时刻处理其他控制程序,有用提高体系功率,节省时刻。