完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
传感器处理要用到浮点运算,而且STM32F303的优势是具有FPU单元,因此如何使用硬件FPU是STM32F3discovery使用的基础。
1、在STM32F3-Discovery_FW_V1.1.0ProjectPeripheral_Examples中有个FPU工程,通过LED4可观察使用硬件FPU前后的速度区别。看其编译反汇编确实用到浮点的V指令,说明在OPNION的C+选项中选中USE FPU确实能够使用硬件FPU,其中用到的fabsf、fmaf、sqrtf等函数就是使用了硬件FPU,其实现应在CMSIS DSP Software Library中。在STM32F3-Discovery_FW_V1.1.0LibrariesCMSISDocumentationDSP_Lib中有LIB的介绍,在STM32F3-Discovery_FW_V1.1.0LibrariesCMSISDSP_Lib中有LIB的实现,但这些函数前面都有前缀arm_啊,怎么没有找到fabsf等函数的实现啊?难道他们的实现在MATH.H里面吗?这里面不是定点器件通过Q化实现的浮点运算吗?不明白。 2、看了许多FPU的文章,FPU工程并没有这么复杂啊?[size=13.3333px] 3、用到矩阵运算,如何在STM32F303上硬件实现啊? |
|
相关推荐
6个回答
|
|
STM32F303属于Cortex-M4F构架,多了一个F-float支持浮点指令集,要发挥FPU的数学性能,还需要设置:
1、启用FPU。要在system_init()函数里面添加如下代码: /* FPU settings -*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL |
|
|
|
我把C:STM32F3-Discovery_FW_V1.1.0ProjectPeripheral_ExamplesADC_Example和FPU_Example两个工程做了区别,首先确定FPU_Example中确实使用FPU实现了fabsf、fmaf等函数,然后将计算程序放到ADC_Example程序中运行。需要加上C编译选项--C99,main.h或许要修改点,其他不变就能通过,所以说Peripheral_Examples中的所有工程加入--C99即可使用硬件FPU。
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库 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出来数据模的最大值 |
|
|
|
把ARMCM4.h和system_ARMCM4.h拷贝到LibrariesCMSISDSP_LibExamplesCommon目录下,之后的LibrariesCMSISDSP_LibExamples中的所有工程都可以编译调试了,但在ProjectPeripheral_ExamplesFPU_Example中的工程为什么没有用这些函数?使用的fabsf、fmaf、sqrtf等函数在哪里实现的啊?
|
|
|
|
终于可以使用CMSIS的DSP_Lib库,在ADC例程中加入#include "arm_math.h",在编译选项中加入ARM_MATH_CM4,引入arm_cortexM4lf_math.lib后,即可使用DSP_Lib库了。下面就是实现卡尔曼滤波算法了,主要是矩阵运算。
|
|
|
|
lz 有做好的例子不?想参考下
|
|
|
|
lz 有做好的例子不?想参考下
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:08 , Processed in 0.479654 second(s), Total 52, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号