
你好,我在进行STM32F407例程力,DSP测试的FFT测试章节里,自己写的测试时间统计和原子哥的不同,差别非常大,不确定是否正确,请大家帮忙验证,谢谢! 程序不同部分如下: 原子哥 :TIM3->CNT=0;//**重设 TIM3 定时器的计数器值 timeout=0; arm_cfft_radix4_f32(&scfft,fft_inputbuf); //FFT 计算(基 4**) time=TIM3->CNT+(u32)timeout*65536; //**计算所用时间 *sprintf((char)buf,"%0.3fms\r\n",time/1000); *LCD_ShowString(30+128,160,100,16,16,buf); //**显示运行时间 自己写的: TIM3->CNT=0;//重设TIM3定时器的计数器值 timeout=0;//溢出清零 TIM3->CR1|=0x01; //使能定时器3 arm_cfft_radix4_f32(&scfft,fft_inputbuf); //FFT计算(基4) TIM3->CR1&=0xFE; //关闭定时器3 time=TIM3->CNT+(u32)timeout65536; //计算所用时间 sprintf((char)buf,"%0.3fms\r\n",time/1000); 补充说明:我的定时器在初始化时,是停止运行的,测试前开始,测试后立即停止,之后再统计时间 |
STM32F407读写U盘出现程序卡死问题
vscode如何使用CUBECTL
串口空闲+DMA接收GPS信号,空闲中断触发时间不对。
STM32F407ZGT6的SD卡通过DMA控制时,无法从外部SRAM取数据
求助:I2S通过DMA搬运后通过USB上传上位机,转为.wav文件后声音嘈杂,音质很差,基本听不出人声
STM32F407VET6 I2S 采用纯中断接收数据的问题
关于AN2867文档的疑问
tougfx 显示问题
F429同时使用SDRAM和SRAM
CAN数据重发
补充一下,原子哥统计时间为:0.584毫秒 我自己统计下来是46.612毫秒(我使用的更高的主频,但是相差没道理这么大)
类似测试我做过,没有具体关心绝对时间,只是比较是否使用FPU单元的时间差,开与不开相差10倍以上。
还有,代码方面这里看不出问题来,不过相信原子测试的没问题。倾向怀疑你计算有误或者你的配置有问题。
关于STM32浮点运算单元FPU的小话题
[md]多谢回复,经过硬件验证,原子哥的时间是正确的,重要区别在于,定时器3初始化时,原子哥初始化程序中就使能了定时器;我的程序初始化时,仅初始化参数,未使能定时器,在准备计时前才使能计时。其中产生区别的原理尚未想明白。希望大神不吝赐教
[md]不应该啊,你现在测得的时间是别人多少倍了。我不知你的主频及测试代码跟 原子那边的是否一样。
你这样操作更合理,原子初始化后就启动了计数器,这难免或多计些时间进来。按理如果你们的芯片及主频、还有测试代码一样,测试IDE及优化一样的话,你的结果怎么会跟他那么大差别呢?
如果你能清晰的判断出原子的测试没问题,应该就不难找出你跟它的差别在哪里了。
[md]我能确定原子哥的没错,是因为,我在计算前和计算后,控制了一个IO的电平,用示波器观察,确实是符合原子哥的结果。我自己的程序,主频设到216M了,原子哥是168M,时间我自己的是0.432毫秒,原子哥是0.584毫秒也是符合区别范围的,我也觉得我的控制方法更科学,但是结果确实不正确。只要在TIME3初始化时,也打开定时器,就能正常,无论我的方法还是原子哥计算,都能得到正确值,还在研究中,有结果我会及时反馈
[md]哦你现在的测试结果变了,不是最开始的信息了。
你可以代码简化下,既然每次从0开始计,这里就不用timeout及相关运算了。
如果坚持用timeout这个量也可以,干脆再加个临时变量temp.
这样测试下:
TIM3->CNT=0;//重设TIM3定时器的计数器值 timeout=0;
TIM3->CR1|=0x01; //使能定时器3
arm_cfft_radix4_f32(&scfft,fft_inputbuf); //FFT计算(基4)
uint32_t temp = TIM3->CNT;
time=temp + (u32)timeout*65536;
TIM3->CR1&=0xFE; //关闭定时器3. 其实 关不关无所谓