中级会员
 
- 积分
- 358
- 金钱
- 358
- 注册时间
- 2015-11-4
- 在线时间
- 124 小时
|
10金钱
现在自己在做一个ADC输入+FIR滤波的程序,ADC输入采用定时器中断,采样率为1200,现用两个buff交替存放数据(满50个数据就跳转到另一个buff存数据),主函数的while里面通过判断标志位来开始实现对应buff的滤波,滤波完后开始发送滤波后的数据。可是现在我得到的波形不正确的,假如主循环里去掉滤波,波形(或者直接发送递增值)都是正常的情况,可是一加入滤波后,得到的波形就不对了。滤波是采用DSP库的arm_fir_f32_lp;芯片是用F103rct6
主函数
while(1)
{
//***********************************************************************************************************************
if(sum==1) //标记采样够50个数
{
//收集满了,开始发送数据
// fil(); //滤波函数
if(num2==0) //两buff用不同的状态来表示,buff1
{
// fil();
for(i=0;i<50;i++)
{
USART_SendData(USART1,((s16)LPOUT[i])&0xFF); //发送低8位
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
//// delay_ms(1);
USART_SendData(USART1,((s16)LPOUT[i])>>8); //发送高8位
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
// USART_SendData(USART1,8); //发送低8位
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
// delay_ms(1);
// USART_SendData(USART1,8); //发送高8位
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
sum=0;
}
else if(num2==1) //buff2
{
// fil();
for(j=0;j<sum1;j++)
{
USART_SendData(USART1,((s16)LPOUT[i]*1)&0xFF); //发送低8位
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
//// delay_ms(1);
USART_SendData(USART1,((s16)LPOUT[i]*1)>>8); //发送高8位
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
// USART_SendData(USART1,7); //发送低8位
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
// delay_ms(1);
// USART_SendData(USART1,7); //发送高8位
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
sum=0;
PDout(2) = 0;
}
}
}
定时器中断
if(TIM3->SR&0X0001)//Overflow
{
if(num<sum1)
{
if(num2==1)
{adcbuff[num]=Get_Adc(ADC_CH1);}
else if(num2==0)
{timebuff[num]=Get_Adc(ADC_CH1);}
num++;
// USART_SendData(USART1,num); //发送低8位
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
// USART_SendData(USART1,sum); //发送高8位
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
if(num==sum1)
{
sum=1;
if(num2==1) num2=0;
else if(num2==0) num2=1;
num=0;
} |
|