STM32F407IG开启FPU,做开方运算

MDK KEIL中使用STM32F4XX芯片硬件浮点单元FPU

Keil中使用STM32F4xx硬件浮点单元

STM32F4-浮点DSP库的MDK开发环境的设置

步骤如下:
1 . 建立工程,添加相关必要的文件到工程中。
 
2. 打开 option for target 选择 Target 标签,在code generatio中,将floating point hardware 选择 USE FPU。
 
3.  编译你的工程,保证通过。当然也不一定需要编译通过,先做编译是为了后面添加浮点库做准备,这样发现问题和知道哪里出问题。
 
4.  打开 option for target 选择 C/C++ 标签, 在define中添加:USE_HAL_DRIVER,STM32F407xx,__TARGET_FPU_VFP,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,ARM_MATH_CM4,__CC_ARM,由于我的是HAL的库,所以前面有USE_HAL_DRIVER的全局宏定义,如果你用的不是HAL库,而是使用固件库的话,一般会有固件库的一个全局宏定义USE_STDPERIPH_DRIVER和STM32F4XXxx在里面,这在固件库中的例子工程中都会有这个的。所以,我这里只需要添加
__TARGET_FPU_VFP,
ARM_MATH_MATRIX_CHECK,
ARM_MATH_ROUNDING,
ARM_MATH_CM4,
__CC_ARM
注意中间用英文逗号分开。其中ARM_MATH_MATRIX_CHECK是库函数的参数检查开关,这里添加后,就打开。ARM_MATH_ROUNDING这个是库函数在运算是是否开启四舍五入的功能,我这里添加,可以根据自己的需要进行配置。ARM_MATH_CM4这个就非常重要,必须要配置进去,否则在编译之后,会默认使用math.h的库函数,而不会用到硬件的FPU的。__CC_ARM是不同编译器的编译配置宏定义,__CC_ARM就是代表MDK开发环境。
 
5.  打开工程中的 stm32f407xx.h 文件,注意不是 stm32f4xx.h 文件,是和你的芯片型号对应的头文件,比如我用的是STM32F407,所以我这里就选择打开stm32f407xx.h文件,找到     
#define __FPU_PRESENT            0       /*!< FPU present       这一句,将设置为 1
找到
#include "core_cm4.h"             /* Cortex-M4 processor and core peripherals */
#include "system_stm32f4xx.h"
#include <stdint.h>
这个地方,然后在下面添加 
#include "arm_math.h"
然后保存。
 
6. 添加浮点库文件到工程。
如果用的是 uv4,打开 C:\Keil\ARM\CMSIS\Lib\ARM 目录,复制“arm_cortexM4lf_math.lib”文件到你的工程下,并加入工程。
如果用的是 uv5,打开 C:\Keil_v5\ARM\Pack\ARM\CMSIS\4.2.0\CMSIS\Lib\ARM 目录,复制“arm_cortexM4lf_math.lib”文件到你的工程下,并加入工程。
再或者在官方下载固件库程序包中复制也行,  \STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Lib\ARM
这是添加lib库文件,也可以添加源码库文件, \STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\DSP_Lib\Source
lib文件,不参与编译,只参与链接定位,所以编译速度快,但是有点占空间。根据自己的情况而定。
 
7.  准备工作完成了,进行编译,如果不出错,则基本上没有什么问题了,自己可以写一段测试代码试一试。
 
8.  浮点库的函数用法和说明,可以看看 stm32f4xx_dsp_stdperiph_lib_um.chm 文件。 或者直接打开
 
C:\Keil_v5\ARM\Pack\ARM\CMSIS\4.2.0\CMSIS\Documentation\DSP\html下面的  index.html 文件,通过浏览器看帮助文件。

STM32F407IG开启FPU,做开方运算的更多相关文章

  1. 面试问题-使用Java线程做数学运算

    这是一个展示如何使用join()方法的例子. 问题: 使用Java多线程计算表达式1*2/(1+2)的值. 解决方案: 使用一个线程做加法运算,另一个线程做乘法运算,还有一个主线程main做除法运算. ...

  2. js做小数运算精度问题

    当js做小数运算时存在bug,大概是因为二进制和十进制转换之间的关系. bug如图 解决方案 1.运算结果后,乘以100再除以100.网上推荐这种方法但是乘以1000再除以1000依然存在精度问题 2 ...

  3. Java千百问_03基本的语法(005)_二进制是如何做位运算的

    点击进入_很多其它_Java千百问 二进制是如何做位运算的 程序中的全部数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作. 其它运算符看这里:java种 ...

  4. debug模式开启会做哪些事(源码分析)

    以往开发中不管是django框架下开发还是其它框架下开发, 只知道在开发阶段要开启debug模式, 却一直没有深究它会我们做哪些事, 今天使用tornado时偶然看到源码中写的很清楚,故写下来加深印象 ...

  5. IB卡开启EIPOIB做虚拟化桥接使用

    步骤1:开启EiPOIB 编辑默认"no"为"yes" /etc/infiniband/openib.conf E_IPOIB_LOAD=yes 步骤2:重启h ...

  6. php 做数学运算时结果为0的原因

    php是一种弱类型的脚本语言,一般情况下字符串型的数字可以直接参与运算. 但是当字符串开头是实体空格的时候系统会默认字符串等于0. 此问题比较隐蔽,在此记录下

  7. 第一个APP:IOS做简单运算的计算器

    步骤: 1.打开Xcode,单机Creat a new Xcode project 2.左边选择ios下Application,右边选择single view Application 3.填写项目名称 ...

  8. 开方运算的DSP实现

    //=============================================== //函数名:VSqrt3 //功能:  实现对32位定点数的开方 //性能:  60M主频28015 ...

  9. [Robot Framework] 怎么做数学运算?

    运用BuiltIn里面的Set Variable

随机推荐

  1. C#_传单小子

    2013/4/13日编写,已经许久不用了,今天又翻出来了,打算继续完善这个小软件,明年将发布出来提供给大家使用.

  2. html .css 实现图片滑动和自动播放特效移动端 HTML 5中添加了以touch 开头的事件

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8">     <meta ...

  3. informix建临时表索引

    对于特殊字段,比如外键,主键,在不知道外键主键名的情况下,需要如下操作select constrname from sysconstraints where constrtype='R' and ta ...

  4. HDU 1009 FatMouse' Trade(贪心)

    FatMouse' Trade Problem Description FatMouse prepared M pounds of cat food, ready to trade with the ...

  5. webapi中的Route的标签的命名参数name的使用

    Route Names In Web API, every route has a name. Route names are useful for generating links, so that ...

  6. 此 ObjectContext 实例已释放,不可再用于需要连接的操作

    EF 查询包含导航属性的Model,经常会遇到 此 ObjectContext 实例已释放,不可再用于需要连接的操作 这种错误,解决方法如下: db.T_DailyRecord.Include(&qu ...

  7. erlang四大behaviour之一gen_server

      来源:http://www.cnblogs.com/puputu/articles/1701017.html erlang程序设计里面有个设计原则就是把你的进程构造成树,把共用代码提出来,特定功能 ...

  8. B - 小Y上学记——小Y的玩偶

    B - 小Y上学记——小Y的玩偶 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  9. linux 防火墙开端口(转)

    vi /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火 ...

  10. __doPostBack初识

    周五在公司看到有看到Request.Params["__EVENTARGUMENT"]的代码不解,不解遂上网查找,发现一篇文章<Understanding the JavaS ...