|
我打算用STM32H750开发一个案子,需要做FFT,我做了一个测试程序来测试FFT所消耗的时间,发现时间测试时间跟网上说的差异很大,不知道是那里出了问题 arm_cfft_radix4_instance_f32 g_rFFtPar; float32_t g_fInData1[FFT_DATA_LENTH2]; float32_t g_fInData2[FFT_DATA_LENTH2]; float32_t g_fInData3[FFT_DATA_LENTH*2]; float32_t g_fInPar[FFT_DATA_LENTH*4]; float32_t g_fOutData1[FFT_DATA_LENTH2]; float32_t g_fOutData2[FFT_DATA_LENTH2]; float32_t g_fPhase1; float32_t g_fPhase2; float32_t g_fPhase3; attribute((section(".dtcm"))) float32_t g_fInData1[FFT_DATA_LENTH2]; attribute((section(".dtcm"))) float32_t g_fInData2[FFT_DATA_LENTH2]; attribute((section(".dtcm"))) float32_t g_fInData3[FFT_DATA_LENTH*2]; HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET); k=0; for(j=0;j<2;j++) { for(i=0;i<512;i++) { g_fInData1[k] = 2048sin((i3.14159)/256)+2048; if(g_fInData1[k]>=4096) { g_fInData1[k] = 4095; }
} for(i=0;i<1024;i++) { if(g_fInData2[i2]>1024) { g_fInData3[i2] =g_fInData2[i2]; } else { g_fInData3[i2]=0; } g_fInData3[i*2+1]=0; } arm_cfft_radix4_f32(&g_rFFtPar, g_fInData1); g_fPhase1 = atan2f(g_fInData1[5],g_fInData1[4]);
// arm_cmplx_mag_f32(g_fInData1, g_fInData1, FFT_DATA_LENTH);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
arm_cfft_radix4_f32(&g_rFFtPar, g_fInData2);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); arm_cfft_radix4_f32(&g_rFFtPar, g_fInData3); // arm_cmplx_mag_f32(g_fInData3, g_fInData3, FFT_DATA_LENTH); g_fPhase3 = atan2f(g_fInData3[5],g_fInData3[4]); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET); HAL_Delay(100);
测试下来 一个 arm_cfft_radix4_f32函数运行时间尽然要将近10mS 我CPU 主频设置的是 240MHZ 但是不知道是那里的问题,也使用了 DSP LIABARY |
[ZEPHYR]SDMMC2 Clock Initialization Failure on M4 Core (PLL2R Frequency Mismatch) 問題詢問
OV5640 JPEG帧头和帧尾读取错误,无法找到FFD8和FFD9
问题解决,自己吓自己了
又有问题了,在尝试H7板子DA操作,但是DA按钮是灰色的咋回事
STM32H747在计算内置温度时硬件错误
自己设计了一个PCB板,一开始还能识别到芯片并且烧录程序,但是用几次后,就识别不到芯片了,并且无法烧录程序。
有关STM32h755的单片机?
STM32H7A3VGTA QSPI读W25Q128J DMA模式不能工作
STM32H725VGT3电源配置问题
STM32H743VIT6,出给客户,客户用自己台湾产地的库存做X-ray对比,发现供货物料和他们自己的样品引线不一样,请问这是什么原因呢?有没有大神帮忙解答一下,谢谢!
微信公众号
手机版
1、确认编译器真的开了 FPU Keil: Options → Target → Floating Point Hardware → Single Precision STM32CubeIDE: Project → Properties → C/C++ Build → Settings → MCU Settings → -mfpu=fpv5-sp-d16 -mfloat-abi=hard 再全清重新编译,map 文件里看到符号带 “vfp” 字样 才算数
2、确认运行时 FPU 使能 复位缺省 FPU 是 disable !
另外,我开机的时候是做了 初始化的
arm_cfft_radix4_init_f32(&g_rFFtPar, FFT_DATA_LENTH,0,1);
[md]Project → Properties → C/C++ Build → Settings → MCU Settings
请问这个是在那里啊
没找到啊
[md]我看了MAP 文件
BuildAttributes
obj.o ABSOLUTE $$ THM_ISAv4$E$P$D$K$B$S$7EM$VFPv5_D16$PE$PLD8$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OTIME$ROPI$IEEEX$EBA8$UX$STANDARDLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon
$$
好像有VFP
[md]是 STM32CubeIDE,不是 STM32CubeMX😄
请问KEIL里怎么看啊,STM32CUBEIDE 实在不熟悉,刚才研究了半天还没摸透
[md]确认过了,配置是对的,但是时间还是 几mS,
是ST的时间就那么长,还是我那里不对呢
先不管多长时间,你比较下使能和不使能 硬件FPU的运行时间是否有明显差别。
如果有明显差别,可能你的计算量的确有点大。不过10ms的确有点漫长~~
我刚才使用ARM KEIL v6测试了,反正开启FPU单元跟不开启的耗时差别挺明显的。
你可以这样,不要理stm32cubemx这里启用DSP的操作,无视它。在KEIL这边再自行选择DSP,然后在main里包含arm_math.h即可使用了。比之前V5还方便。