求助,USB MIC ADC采集后能够传输正常的数据,但是声音波形不对

2019-07-20 21:07发布

本帖最后由 xavierchen 于 2016-6-23 22:06 编辑

看到论坛中做的USB 收音机非常不错,非常感谢大牛的分享,自己想研究研究,遇到了问题。
使用了定时器中断来采集ADC,采用了16k的采样周期。
USB通信也没有了问题,但是采集到的声音通过GoldWave查看波形,发现只有一半的波形,另外一半消失了。
感觉可能的问题是:
(1)转换的问题,12bit的采集转换到PCM
(2)可能还有些地方设置不对,如果是USB的设置不对,不会采集到正确的声音。
声音波形如下:(有比较大的噪音因为mic附近有一个服务器)
wave.jpg

附上中断处理的函数:
[mw_shl_code=c,true]//¶¨ê±Æ÷3ÖD¶Ï·tÎñ3ìDò
void TIM3_IRQHandler(void)   //TIM3ÖD¶Ï
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //¼ì2éTIM3¸üDÂÖD¶Ï·¢éúóë·ñ
                {
                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //Çå3yTIMx¸üDÂÖD¶Ï±êÖ¾
               
                //printf(".");
                        
                //ADCvalue=((ADC_GetConversionValue(ADC1)<<4));
                //ADCvalue=(uint8_t)(ADC_GetConversionValue(ADC1)>>4);                                        //ADC&#187;&#241;è&#161;&#214;μPA1£&#172;12bit4096FFFH
                //TIM_SetCompare3(TIM4, (uint8_t)(ADCvalue>>4));        //TIM4OC3PB82¥·&#197WM£&#172;12&#206;&#187;×a8&#206;&#187;£¨2aê&#212;&#214;±&#189;ó2é&#209;ù2¢2¥·&#197;£&#169;



                        if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ))
                                ADCvalue = ADC_GetConversionValue(ADC1);
                        else
                                ADCvalue = 0x0800;
                        
               
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_71Cycles5);        //ADC2é&#209;ùê±&#188;&#228;£¨71.5+12.5)/(72/6)=7us , audio2¥·&#197;&#194;ê 16K=62.5us&#161;¢32K=31.25us
                        ADC_SoftwareStartConvCmd(ADC1, ENABLE);

                        
                        
                        if (tag_buff==0)
                        {
                                Stream_Buff_0[buff_Offset*2+1]=(uint8_t)(ADCvalue>>8);
                                Stream_Buff_0[(buff_Offset*2)]=(uint8_t)(ADCvalue&0x00ff);
                                if (buff_Offset==15)
                                {
                                        tag_buff=1;
                                        buff_Offset=0;
                                }
                                else
                                        buff_Offset++;                        
                        }
                        else
                        {
                                Stream_Buff_1[buff_Offset*2+1]=(uint8_t)(ADCvalue>>8);
                                Stream_Buff_1[(buff_Offset*2)]=(uint8_t)(ADCvalue&0x00ff);
                                if (buff_Offset==15)
                                {
                                        tag_buff=0;
                                        buff_Offset=0;
                                }
                                else
                                        buff_Offset++;        
                        }  

                }
}
[/mw_shl_code]

希望大神帮助
另外,如何实现多声道多通道的采集,请大神指点迷津。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。