天空123456 发表于 2017-6-7 16:13:00

stm32 usb audio 播放速度加快和噪音

大家好。请问有没有用stm32接数字麦克风做usb audio的。
我用stm32f103RE接两个数字麦克风,经pdm转成pcm后 通过usb发送到pc。整个板子相当一声卡。问题是用pc录音,出现播放速度加快,和噪音的显现。 请大家帮我分析分析到底是哪里出问题了。谢谢

两个麦克风通过一根线 接到i2s的 sd , 麦克风的clk 由i2s的sck产生。我是把i2s配置为主接收模式,用i2s来读取数据。目的是实现输出2通道16k采样。为此,我的i2s sck输出频率为 2.048M。麦克风的输入频率为1.024M

现在不清楚到底问题出在采样阶段 还是pdm 转pcm 还是usb audio发送阶段,请大家帮忙分析下。
部分代码如下

i2s配置如下:
   switch(X_NUCLEO_CCA02M1_Handler.Sampling_Freq=AudioFreq){   
case AUDIOFREQ_8K:
    {
      X_NUCLEO_CCA02M1_Handler.DecimationFactor=128;
      X_NUCLEO_CCA02M1_Handler.PdmBufferSize=256;      
      break;
    }
case AUDIOFREQ_16K:
    {
      X_NUCLEO_CCA02M1_Handler.DecimationFactor=64;
      X_NUCLEO_CCA02M1_Handler.PdmBufferSize=256;   
      break;
    }   
case AUDIOFREQ_32K:
    {
      X_NUCLEO_CCA02M1_Handler.DecimationFactor=64;
      X_NUCLEO_CCA02M1_Handler.PdmBufferSize=512;   

      break;
    }   
case AUDIOFREQ_48K:
    {
      X_NUCLEO_CCA02M1_Handler.DecimationFactor=64;
      X_NUCLEO_CCA02M1_Handler.PdmBufferSize=768;   

      break;
    }
default:
    {
      return AUDIO_ERROR;
    }
}

/* Initialize the hAudioInI2s Instance parameter */
hAudioInI2s.Instance          = AUDIO_IN_I2S_INSTANCE;

if(X_NUCLEO_CCA02M1_Handler.MicChannels==1)
{
    hAudioInI2s.Init.DataFormat   = I2S_DATAFORMAT_16B;
}
else
{
    hAudioInI2s.Init.DataFormat   = I2S_DATAFORMAT_32B;   
}

if(AudioFreq == AUDIOFREQ_8K)
{
    hAudioInI2s.Init.AudioFreq    = 4 * AudioFreq;
}else
{
    hAudioInI2s.Init.AudioFreq    = 2 * AudioFreq;
}

hAudioInI2s.Init.CPOL         = I2S_CPOL_LOW;
hAudioInI2s.Init.MCLKOutput   = I2S_MCLKOUTPUT_DISABLE;
hAudioInI2s.Init.Mode         = I2S_MODE_MASTER_RX;
hAudioInI2s.Init.Standard   = I2S_STANDARD_MSB;

/* Initialize the I2S peripheral with the structure above */
if(HAL_I2S_GetState(&hAudioInI2s) == HAL_I2S_STATE_RESET)
{
    AUDIO_IN_I2S_MspInit();
}

if(HAL_I2S_Init(&hAudioInI2s) != HAL_OK)
{
    return AUDIO_ERROR;
}

}

static void AUDIO_IN_I2S_MspInit(void)
{
static DMA_HandleTypeDef hdma_i2sRx;
GPIO_InitTypeDefGPIO_InitStruct;
I2S_HandleTypeDef *hi2s = &hAudioInI2s;

    /* Enable the I2S2 peripheral clock */
AUDIO_IN_I2S_CLK_ENABLE();
       
        __HAL_RCC_AFIO_CLK_ENABLE();

/* Enable I2S GPIO clocks */
AUDIO_IN_I2S_SCK_GPIO_CLK_ENABLE();
AUDIO_IN_I2S_MOSI_GPIO_CLK_ENABLE();
       
       
    GPIO_InitStruct.Pin = GPIO_PIN_13;   // AUDIO_IN_I2S_SCK_PIN
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;// GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_15;    /// AUDIO_IN_I2S_MOSI_PIN
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
               
       

/* Enable the DMA clock */
AUDIO_IN_I2S_DMAx_CLK_ENABLE();

hdma_i2sRx.Init.Direction = DMA_PERIPH_TO_MEMORY;          /* M2M transfer mode                */
hdma_i2sRx.Init.PeriphInc = DMA_PINC_DISABLE;               /* Peripheral increment mode Enable */
hdma_i2sRx.Init.MemInc = DMA_MINC_ENABLE;                  /* Memory increment mode Enable   */
hdma_i2sRx.Init.PeriphDataAlignment = AUDIO_IN_I2S_DMAx_PERIPH_DATA_SIZE; /* Peripheral data alignment : Word */
hdma_i2sRx.Init.MemDataAlignment = AUDIO_IN_I2S_DMAx_MEM_DATA_SIZE;    /* memory data alignment : Word   */
hdma_i2sRx.Init.Mode = DMA_CIRCULAR;                         /* Normal DMA mode                  */
hdma_i2sRx.Init.Priority = DMA_PRIORITY_HIGH;            /* priority level : high            */

if(hi2s->Instance == AUDIO_IN_I2S_INSTANCE)
{   
    hdma_i2sRx.Instance = DMA1_Channel4;   
      /* Configure the DMA Stream */
    HAL_DMA_Init(&hdma_i2sRx);   
    /* Associate the DMA handle */
    __HAL_LINKDMA(hi2s, hdmarx, hdma_i2sRx);      
}

/* I2S DMA IRQ Channel configuration */

HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 6, 6);
HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);

}


ataudio 发表于 2017-7-3 14:38:52

采集频率低,而播放快,还有通道内非音频信号被播出。可能配置的采样流程参数等有问题。建议根据例程分析修改对应参数,搞熟了应该就能分析问题在哪里了。
页: [1]
查看完整版本: stm32 usb audio 播放速度加快和噪音