历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2019年02月15日 | STM32F4xx FPU/DSP使用注意事项

2019-02-15 来源:eefocus

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,如下图所示:


1


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。


2


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\Source\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


3


除了网上的教程外,还要特别注意,当运算中有浮点的数字时要把,数字后面加上一个f。例如表达式中有4.321参与运算。。当你不在4.321后加f时,stm32F405的片子不知道把他当做单精度float用FPU来运算,,默认可能是当做double来运算(我不确定),运算速度还是很慢。。切记所有浮点数字后面加上f,,,,有时候keil会提示warning:  #1035-D: single-precision operand implicitly converted to double-precision 这句话的意思就是单精度运算隐式转换成了双精度运算了。这个时候就要在单精度数字后面加个f


keilmdk的设置中完整的define是USE_STDPERIPH_DRIVER,STM32F4XX,__FPU_PRESENT=1,__FPU_USED =1,ARM_MATH_CM4,__CC_ARM. 要在MDK中有个选项设置 usr FPU


推荐阅读

史海拾趣

DRS Technologies公司的发展小趣事

在21世纪初,DRS接受了价值16亿美元的合同,为美国陆军和海军陆战队的部队现代化计划制造加固式计算机。这一合同不仅展示了DRS在军事领域的实力,也进一步巩固了其在全球电子行业的地位。DRS提供的“探索者”MP加固式轻便多平台工作站,为数字战场提供了强大的支持。

广州基安彼(GMB)公司的发展小趣事

在21世纪初,DRS接受了价值16亿美元的合同,为美国陆军和海军陆战队的部队现代化计划制造加固式计算机。这一合同不仅展示了DRS在军事领域的实力,也进一步巩固了其在全球电子行业的地位。DRS提供的“探索者”MP加固式轻便多平台工作站,为数字战场提供了强大的支持。

Dynex公司的发展小趣事

在全球电子行业快速发展的背景下,DRS面临着来自各方面的挑战。为了应对这些挑战,DRS不断加强研发投入,提高产品质量和服务水平。同时,公司也积极拓展国际市场,寻求更多的合作机会。通过这些努力,DRS在全球电子行业中保持了领先地位,并为未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上故事均为概述性质,具体细节和背景信息可能有所省略。

Bel Fuse公司的发展小趣事

Bel Fuse公司的创立可以追溯到XXXX年,当时它由几位富有远见的工程师在新泽西州创立。起初,公司专注于保险丝的研发和生产,致力于提供高质量的电气保护产品。凭借卓越的技术和可靠的产品质量,Bel Fuse逐渐在市场上获得了认可,并开始扩展其产品线。

Cofan Usa Inc公司的发展小趣事

随着全球市场的日益开放和竞争的加剧,Cofan Usa Inc公司开始实施国际化战略。公司在海外设立分支机构和研发中心,积极寻求与国际知名企业的合作机会。通过引进国际先进的技术和管理经验,公司不断提升自身的创新能力和国际化水平。

General Electric Company公司的发展小趣事
在工业自动化控制系统中,用于驱动高压电机、阀门等执行机构。

问答坊 | AI 解惑

Fsk/OOK RF芯片:IA无线产品介绍

IAI 产品(芯片) 1. IA 4220 / 4221 / 4222 无线发射芯片 TSOP16 2. IA 4320/ 4322 无线接收芯片 TSOP16 3. IA 4420 / 4421 无线收发芯片 TSOP16 外围器件很少,只要两三颗小电容和一个10M Cystal, 对其精度无特殊要求,总成本低 (具备自动频 ...…

查看全部问答>

HTKBOOK

HTK的手册,用于HMM语音方面的。…

查看全部问答>

protel封装总结

在网上找到的protel的封装总结,并归纳了一下。希望能对大家有所帮助。…

查看全部问答>

“简简单单DSP”—SCI的学习及使用

转一个helloDSP上面的文档,我看了一下这个写的简单明了,符合咱们简简单单的风格,上传…

查看全部问答>

Wince 下UsbAudio 驱动有开发过吗?

Wince 下UsbAudio 驱动有开发过吗? 有什么列子?或资料,谢谢。…

查看全部问答>

==请问:通过GPRS或CDMA模块连接Internet,对SIM卡有特殊要求么 ==

CDMA联通服务热线,说要世界风SIM卡才可以。 那GPRS也需要特殊SIM kama…

查看全部问答>

STR710FZ2T6串口速率始终只有设定值的四分之一

#ifndef __71x_CONF_H#define __71x_CONF_H/* Comment the line below to put the library in release mode */#define RCCU_Main_Osc 0x16000000^^^^^^^^^^ ...…

查看全部问答>

历时整整35天,成功完成老板的任务,带一个中继,3000米通信,实际速率10kbps

历时整整35天,成功完成老板的任务,带一个中继,3000米通信,实际速率10kbps,空中波特率50kbps,总算可以休息一下,庆祝一下。春节后来公司上班没几天,老板让我做一个温度、湿度采集的系统,45天内完成样机制作,演示给客户看。由于客户是政府相 ...…

查看全部问答>

请教 关于看门狗

MSP430F4XX User\'s Guide上有这么一句: When using the WDT in the watchdog mode, the WDTIFG flag sources a reset vector interrupt. The WDTIFG can be used by the reset interrupt service routine to determine if the watc ...…

查看全部问答>

关于IAR的模拟仿真

大家好!我想请问一下!在IAR Embedded Workbench for MSP430 3.42当中,如果我要用软件模拟仿真,那单片机的晶振在那里设置呢!我是一个初学者,请大家指点!谢谢!…

查看全部问答>