你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用STM32F3discovery随笔4-关于FPU

[复制链接]
zt1234 提问时间:2013-4-1 16:41 /
传感器处理要用到浮点运算,而且STM32F303的优势是具有FPU单元,因此如何使用硬件FPU是STM32F3discovery使用的基础。
1、在STM32F3-Discovery_FW_V1.1.0\Project\Peripheral_Examples中有个FPU工程,通过LED4可观察使用硬件FPU前后的速度区别。看其编译反汇编确实用到浮点的V指令,说明在OPNION的C+选项中选中USE FPU确实能够使用硬件FPU,其中用到的fabsf、fmaf、sqrtf等函数就是使用了硬件FPU,其实现应在CMSIS DSP Software Library中。在STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Documentation\DSP_Lib中有LIB的介绍,在STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\DSP_Lib中有LIB的实现,但这些函数前面都有前缀arm_啊,怎么没有找到fabsf等函数的实现啊?难道他们的实现在MATH.H里面吗?这里面不是定点器件通过Q化实现的浮点运算吗?不明白。
2、看了许多FPU的文章,FPU工程并没有这么复杂啊?
3、用到矩阵运算,如何在STM32F303上硬件实现啊?



收藏 2 评论6 发布时间:2013-4-1 16:41

举报

6个回答
zt1234 回答时间:2013-4-2 10:44:16

RE:使用STM32F3discovery随笔4-关于FPU

STM32F303属于Cortex-M4F构架,多了一个F-float支持浮点指令集,要发挥FPU的数学性能,还需要设置:
1、启用FPU。要在system_init()函数里面添加如下代码:
/* FPU settings -*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL
zt1234 回答时间:2013-4-2 11:09:12

RE:使用STM32F3discovery随笔4-关于FPU

我把C:\STM32F3-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC_Example和FPU_Example两个工程做了区别,首先确定FPU_Example中确实使用FPU实现了fabsf、fmaf等函数,然后将计算程序放到ADC_Example程序中运行。需要加上C编译选项--C99,main.h或许要修改点,其他不变就能通过,所以说Peripheral_Examples中的所有工程加入--C99即可使用硬件FPU。
  未命名.JPG
CMSIS-DSP 库包括向量运算、矩阵运算、复杂运算、过滤函数、控制函数、PID 控制器、傅里叶变换和很多其他常用的 DSP 算法。大多数算法为浮点格式和各种定点格式,并已针对 Cortex-M 系列处理器进行优化。Cortex-M4 处理器实现使用SIMD指令集和浮点硬件,从而完全支持对信号处理算法使用 Cortex-M4 处理器的功能。加入ARM_MATH_CM4,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,__FPU_PRESENT,__FPU_USED这样才可以使用CMSIS DSP库
未命名1.JPG
 status = arm_cfft_radix4_init_f32(&S, fftSize,ifftFlag, doBitReverse); // FFT的初始化
arm_cfft_radix4_f32(&S, testInput_f32_10khz); // FFT计算的函数
arm_cmplx_mag_f32(testInput_f32_10khz, testOutput,fftSize); // FFT出来的是复数求模得幅值
arm_max_f32(testOutput, fftSize, &maxValue, &testIndex); / //这里是求FFT出来数据模的最大值

 
 
 
 
 
zt1234 回答时间:2013-4-7 11:50:29

RE:使用STM32F3discovery随笔4-关于FPU

把ARMCM4.h和system_ARMCM4.h拷贝到Libraries\CMSIS\DSP_Lib\Examples\Common目录下,之后的Libraries\CMSIS\DSP_Lib\Examples中的所有工程都可以编译调试了,但在\Project\Peripheral_Examples\FPU_Example中的工程为什么没有用这些函数?使用的fabsf、fmaf、sqrtf等函数在哪里实现的啊?
zt1234 回答时间:2013-4-7 15:49:02

RE:使用STM32F3discovery随笔4-关于FPU

终于可以使用CMSIS的DSP_Lib库,在ADC例程中加入#include "arm_math.h",在编译选项中加入ARM_MATH_CM4,引入arm_cortexM4lf_math.lib后,即可使用DSP_Lib库了。下面就是实现卡尔曼滤波算法了,主要是矩阵运算。
上达到 回答时间:2013-5-10 10:29:52

RE:使用STM32F3discovery随笔4-关于FPU

lz  有做好的例子不?想参考下
andrew_lya 回答时间:2013-7-28 19:19:53

回复:使用STM32F3discovery随笔4-关于FPU

lz  有做好的例子不?想参考下

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版