博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转Keil 中使用 STM32F4xx 硬件浮点单元
阅读量:4973 次
发布时间:2019-06-12

本文共 1807 字,大约阅读时间需要 6 分钟。

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
c. 这样编译时就加入了启动FPU 的代码, CPU 也就能正确高效的使用FPU 进行简单的加减乘除了。
3. 进一步说明使用芯片复杂数学运算使用
对于复杂运算,比如三角函数,开方等运算,需要如下设置:
a. 包含 arm_math.h 头文件。
b. 在工程选项的 C/C++选项卡的 define 中继续加入语句 ARM_MATH_CM4
c. 在工程选项的 C/C++选项卡的 define 中继续加入语句 CC_ARM
以使用 sincos 运算举例,需要调用 arm_sin_f32()以及 arm_cos_f32(),这两个函数定义在 arm_sin_f32.c
arm_cos_f32.c 中,需要在工程中加入这两个 c 文件。
ST 库文件包中的文件目录如下:

 

keil安装目录下的文件目录如下:

 

当用到更多数学运算, 如开根号,三角运算,求绝对值等等,客户也可以直接在工程中加入 ARM 中 的数学运算库
arm_cortexM4lf_math.lib,而不需要一个个文件的添加,
ST库文件包中的目录如下:
keil 安装目录下的文件目录如下:
\stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.1.0\Libraries\CMSIS\DSP_Lib\Sou
rce\FastMathFunctions
\Keil\ARM\CMSIS\DSP_Lib\Source\FastMathFunctions
\stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.1.0\Libraries\CMSIS\Lib\ARM
Keil\ARM\CMSIS\Lib\ARM
. 结语
从测试效果看当使用了硬件浮点运算单元,数学计算变得简单高效,可以留给系统更多时间处理其他 控制程序, 有效提升
系统效率,节省时间。

转载于:https://www.cnblogs.com/jieruishu/p/8865925.html

你可能感兴趣的文章
c语言的几个简单memo
查看>>
C#的默认访问权限
查看>>
selenium下打开Chrome报错解决
查看>>
红酒初识
查看>>
BNUOJ 5629 胜利大逃亡(续)
查看>>
HDU-1150 Machine Schedule(二分图、匈牙利)
查看>>
Python assert 断言函数
查看>>
Android 学习笔记之ContentProvider实现数据共享....
查看>>
35)PHP,关于PHP和html
查看>>
区块链到底是什么?
查看>>
java_线程的开启与结束(可用于android)
查看>>
二分图判定 hdu5285 wyh2000 and pupil
查看>>
阿里云服务器出现入侵事件:挖矿进程
查看>>
VS 2013 配置份openGL环境
查看>>
修改 CKEditor 超链接的默认协议
查看>>
zoj3795 Grouping --- 良好的沟通,寻找最长的公路
查看>>
【SSH2(理论+实践)】--Hibernate步步(一个)
查看>>
深入浅出JMS(一)——JMS简要
查看>>
JDBC连接MySQL数据库及演示样例
查看>>
小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(四)Alert View视图 学习笔记...
查看>>