传感器处理要用到浮点运算,而且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上硬件实现啊? |
RE:使用STM32F3discovery随笔4-关于FPU
1、启用FPU。要在system_init()函数里面添加如下代码:
/* FPU settings -*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL
RE:使用STM32F3discovery随笔4-关于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出来数据模的最大值
RE:使用STM32F3discovery随笔4-关于FPU
RE:使用STM32F3discovery随笔4-关于FPU
RE:使用STM32F3discovery随笔4-关于FPU
回复:使用STM32F3discovery随笔4-关于FPU