双精度
```c
USE_HAL_DRIVER,STM32F769xx,ARM_MATH_CM7,__CC_ARM,__FPU_PRESENT,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING
添加
#include "arm_math.h"
#include "arm_common_tables.h"
#include "arm_const_structs.h"
HAL_ADC_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue1,2048);//开始ADC1的DMA传输
HAL_TIM_Base_Start_IT(&htim2);
HAL_Delay(5000);
HAL_TIM_Base_Stop_IT(&htim2);
for(int i = 0;i<2048;i++)
{
ADC_Value1[i] = ADC_ConvertedValue1[i]*3.3/4095;
}
for(int a = 0;a<2048;a++)
{
printf("%3.2f\n",ADC_Value1[a]);
}
for(int i=0;i<2048;i++)
{
temp0=ADC_ConvertedValue1[i];
v0=(double)temp0/4095.0*3.3;
//printf("%0.3f\n",v0);
//处理ADC采样的数组
fft_inputbuf0[2*i]=v0;//将ADC数据存入输入数组
fft_inputbuf0[2*i+1]=0;//虚部全部为0
}
arm_cfft_f32(&arm_cfft_sR_f32_len2048,fft_inputbuf0, 0, 1);//数据经过这个函数处理每两个数据代表一个复数,一个数据是实数,一个是虚数
arm_cmplx_mag_f32(fft_inputbuf0,fft_outputbuf0,2048); //运算结果求模得幅值
printf("处理后的数值\n");
for( i=0;i<2048;i++)
{
printf("%d %0.3f \n",i,fft_outputbuf0[i]/(2048/2));//打印出fft_outputbuf0
MagBufArray[i]=fft_outputbuf0[i]/(2048/2);
}
for(i=1;i<1024;i++)
{
if(MagBufArray[i]>Max_Val)
{
Max_Val=MagBufArray[i];
Row=i;
}
}
printf ("%f\n",Row);
printf("当前的频率值\n");
printf ("F=%0.2fHZ\n",Row*10);//10 = 20K(采样率)/2048(采样点数)