本帖最后由 xavierchen 于 2016-6-23 22:06 编辑
看到论坛中做的USB 收音机非常不错,非常感谢大牛的分享,自己想研究研究,遇到了问题。
使用了定时器中断来采集ADC,采用了16k的采样周期。
USB通信也没有了问题,但是采集到的声音通过GoldWave查看波形,发现只有一半的波形,另外一半消失了。
感觉可能的问题是:
(1)转换的问题,12bit的采集转换到PCM
(2)可能还有些地方设置不对,如果是USB的设置不对,不会采集到正确的声音。
声音波形如下:(有比较大的噪音因为mic附近有一个服务器)
附上中断处理的函数:
[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»ñè¡ÖμPA1£¬12bit4096FFFH
//TIM_SetCompare3(TIM4, (uint8_t)(ADCvalue>>4)); //TIM4OC3PB82¥·Å
WM£¬12λ×a8루2aêÔÖ±½ó2éÑù2¢2¥·Å£©
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éÑù걼䣨71.5+12.5)/(72/6)=7us , audio2¥·ÅÂê 16K=62.5us¡¢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]
希望大神帮助
另外,如何实现多声道多通道的采集,请大神指点迷津。。
一周热门 更多>