2018-01-02 01:53 PM
I have an application using an STM32F429ZI processor and I'm seeing a strange problem where the L/R audio output gets swapped after changing I2S frequencies.
My procedure to change frequencies is as follows:
HAL_I2S_DMAStop(&hi2s3);
HAL_I2S_DeInit(&hi2s3);
hi2s3.Init.AudioFreq = sampling_rate;
HAL_StatusTypeDef result = HAL_I2S_Init( &hi2s3);
I2SEx_TransmitReceive_DMA_DB();
//my own function above is called, which is similar to the following but instead has call to //HAL_DMAEx_MultiBufferStart_IT(&hi2s3, &DummyAudioOutBuf, &DummyAudioOutBuf, AUDIO_OUT_BUF_SIZE);It doesn't always happen. I'd say that it gets swapped about 10% of the time. I've seen people who have similar problems when running a slave, but with the ST configured as the master, I'm surprised to see this.
Here is my I2S3 configuration:
hi2s3.Instance = SPI3;
hi2s3.Init.Mode = I2S_MODE_MASTER_TX; hi2s3.Init.Standard = I2S_STANDARD_PHILIPS; hi2s3.Init.DataFormat = I2S_DATAFORMAT_16B; hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_16K; hi2s3.Init.CPOL = I2S_CPOL_LOW; hi2s3.Init.ClockSource = I2S_CLOCK_PLL; hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_ENABLE;#swap #stm32f4 #i2s #dma2022-02-07 07:51 AM