制作OLED显示,FFT频谱,请老师们帮忙修正

2019-10-16 04:26发布

这几天对快速傅里叶的实现有了写眉目,但是还有些问题,目前能看个大概意思,但是图像很杂乱,也不稳定。
我的思路如下:
FFT点数为256点,由定时器3按40KHZ(TIM3_Int_Init(1,1799);)连续抽样256点以后,给一个抽样结束的Flag并关闭定时器3,而后调用FFT函数进行运算,运算后开启定时器3并调用OLED显示函数来显示128点的数值。
现在存在这些问题:
1.ADC引脚接地的情况下,竟然还有波形,参差不齐的那种,这个是抽样的问题还是需要滤波电路?如图:
2.如果将显示函数用定时器2进行处理的话,在设置定时器2为较定时器3高的优先级的条件下,设置TIM2_Int_Init(699,1799);TIM3_Int_Init(1,1799);时显示会出现明显卡顿,这是有由于什么造成的?
一下是我的部分代码:
1.在主函数中的死循环用来显示和计算:
while(1)
{
if(Flag==0)//该标识为抽样结束标志
{
FFT_Run();//执行完后开启定时器3
OLED_Refresh(Out_Val,Out_Val2);
LED0=!LED0;
}
2.定时器3的抽样代码:
if(TIM3->SR&0X0001)
{
if(n>=256) 
{
n=0;
Flag=0;//该标志为抽样结束
TIM3->CR1=0;//关闭定时器
}
In_Val[n]=Get_ADC(1);
n++;
LED1=!LED1;              
}   
TIM3->SR&=~(1<<0);

}



请指教,谢谢各位!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。