Keil 中使用 STM32F4xx 硬件浮点单元
一.前言
有工程师反应说 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()函数里面添加如下代码
b. 在工程选项(Project->Options for target "XXXX")中的 C/C++选项卡的 Define 中加入如下的语句, 见下图所示
:
/* FPU settings ------------------------------------------------------------*/
#if ( FPU_PRESENT == 1) && ( FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));
/* set CP10 and CP11 Full Access */
#endif
FPU_PRESENT=1, FPU_USED =1
。