STM32F0 使用DSP库中arm_cfft_f32总是进入HardFault
有大佬帮忙指点一下吗?第一次用dsp库的fft。STM32F0 使用DSP库中arm_cfft_f32总是进入HardFault,单步仿真发现是进arm_cfft_radix8by2_f32这个函数后,单步执行几下,就进HardFault,修改过堆栈大小,没有解决掉 hardfault的错误类型是什么,调用个简单浮点运算api是否正常,比计算sin。先把问题方向锁定了。 arm_sin_f32(2*3.1415926f*50*i/1000);这个运行是正常的,用printf打印出来看过。
hardfault的错误类型我不知道怎样通过那些调试时看到的寄存器去判断是什么错误类型,但我估计是RAM不够,内存溢出导致的
beck 发表于 2020-7-16 10:45
arm_sin_f32(2*3.1415926f*50*i/1000);这个运行是正常的,用printf打印出来看过。
hardfault的错误类型 ...
调试状态有个hardfault report的。 M0内核好像没有这个fault reports,M3、M4内核有,我之前也用过这个fault reports,但M0的这个仿真就没有看到这个窗口选项,
下面这个链接是老外问别人回答的这个,说让用call stack +locals窗口鼠标跳转去找fault位置,但那个fft函数是库,我就没法。
https://community.arm.com/developer/tools-software/tools/f/keil-forum/32797/fault-reports-dialog?pifragment-22305=4
还有些问题想请教硬汉哥,因为arm_cfft_f32使用不成功,我就去用了arm_cfft_radix2_q15,按照你的教程弄的,当fft信号输入采用testInput_q15 = arm_sin_q15(1638*j);
arm_cfft_radix2_q15(&S, testInput_q15);后,再用arm_cmplx_mag_q15计算模值出来没有问题,但fft信号输入采用我自己传入的AD数据,用arm_cmplx_mag_q15计算模值就有问题,
和用matlab整出来的图形不一样,下面是图,但我不用arm_cmplx_mag_q15来计算模值,自己去拿arm_cfft_radix2_q15后的数据出来自己算模值,出来的波形就是对的了,
是我的用法有问题吗?还是说arm_cmplx_mag_q15有点问题呢?
beck 发表于 2020-7-16 11:54
还有些问题想请教硬汉哥,因为arm_cfft_f32使用不成功,我就去用了arm_cfft_radix2_q15,按照你的教程弄的 ...
这个图稍有点凌乱,你可以在Matlab里面把原始波形,Matlab计算的幅频响应,arm_cfft_radix2_q15计算的幅频响应,arm_cfft_f32计算的幅频响应都展示出来。
如果大体一致,说明是没问题的,先不要看数值大小。
你使用arm_cfft_radix2_q15是采用的定点数格式,他计算出来的数据已经不再是Q15,是Qx.y,具体x和y是多少,在源码注释上有说明。 硬汉哥,然后还有个问题我看教程不太懂,通过fft后的频域幅频图,可以计算出某点时域上的幅值,
教程中有说“假设原始信号的峰值为 A,那么 FFT 的结果的每个点(除了第一个点直流分量之外)的模值就是 A的 N/2 倍。 而第一个点就是直流分量,它的模值就是直流分量的 N 倍。”,这个我知道如何计算出来。
但是matlab图形和stm32dsp库fft后图形,它们的Y轴模值幅度不一样。我有看到教程中有说因为防止溢出,基2的fft蝶形运算每次要缩小0.5倍,那么我用的是arm_cfft_radix2_q15,我该怎么计算出时域某点的幅值呢?
beck 发表于 2020-7-16 12:08
硬汉哥,然后还有个问题我看教程不太懂,通过fft后的频域幅频图,可以计算出某点时域上的幅值,
教程中有 ...
看我7楼的回复即可。
这个说明适用于浮点FFT函数的。
而你定点FFT是不同的,知道了你输出输出的Q格式后,即Qx.y,具体x和y是多少,在源码注释上有说明。
转换后,再按照这个转换就正常了。
就帮你这么多吧,剩下你自己再研究下,结帖。 刚刚编辑最后一个问的时候没看到回复。好的,感谢,我再自己研究研究 版主串口波形助手 给个包呗 本帖最后由 beck 于 2020-10-14 13:42 编辑
zhengwending 发表于 2020-9-10 15:44
版主串口波形助手 给个包呗
附件不知道怎么的添加不了,串口波形助手,改在百度云了
链接:https://pan.baidu.com/s/1JbB6816RHQiRI2i5xyIjxw
提取码:wyjs
beck, 我最近也在调试f0+fft,遇到了一些问题,你看一下我的帖子,可否一起探讨一下 后面我改用arm_cfft_radix4_q15计算,调用3此这个函数程序就会进入错误中断,而且每次计算出来的值也不一样。。感觉就不对
后面又改用arm_cfft_radix2_q15计算,反复调用也不会进入错误中断,但是每次计算的值还是不一样,不知道是哪里出了问题了,
我每次的参与计算的原始数据都是一样的
http://www.armbbs.cn/forum.php?mod=viewthread&tid=100460&extra= beck 发表于 2020-10-13 14:01
附件不知道怎么的添加不了,串口波形助手,改在百度云了
链接:https://pan.baidu.com/s/1JbB6816RHQiRI ...
你好,下载链接失效了,能在发一个么,十分感谢! zhengwending 发表于 2020-9-10 15:44
版主串口波形助手 给个包呗
你好 这个软件安装包有么,能不能给我发下,原作者的连接失效了 感谢楼主,看了你的贴子很有启发。
6#提到的问题,我把输入testInput_q15的数据先转换成Q15格式之后,最后输出的模值就正常了。文档中7.3.1中提到了这个方法。
pSrcB2 = (((float)data_1)/10000.0)*32768;
testInput_q15 =pSrcB2;//(((float)data_1)/1000.0)*32768;
页:
[1]