Jump to content

    
Sign in to follow this  
Vladimir_T

I2S для STM32F405

Recommended Posts

Здравствуйте, уважаемые коллеги, подскажите, пожалуйста по конфигурированию интерфейса I2S для STM32F405.
В режиме I2S slave для приема данных, я должен линию I2S_CK подключить CKIN (PC9) ? Сейчас I2S_CK на I2S2_CK(PB9).  
Внутреннюю периферию сконфигурировал, а приема данных нет.

void Config_I2S2_Pin (void)  			// From Port C
{ GPIO_InitTypeDef         GPIO_InitStructure;
   
  GPIO_InitStructure.GPIO_Pin = I2S2_CK | I2S2_WS;  	// Config I2S2 PINs 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  		// GPIO_PuPd_UP
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	
  GPIO_InitStructure.GPIO_Pin = I2S2_SD; 				// Config I2S2 PINs 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  		// GPIO_PuPd_UP
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2); 
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource9,  GPIO_AF_SPI2);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource3,  GPIO_AF_SPI2);
	
} // Config_I2S2_Pin (); 


void I2S_Slave_Init (void)
{ I2S_InitTypeDef I2S_InitStruct;	

  RCC_APB1PeriphClockCmd (RCC_APB1Periph_SPI2, ENABLE);	 		// Enable SPI2 
	
  I2S_InitStruct.I2S_Mode = I2S_Mode_SlaveRx;					/* Initialize the I2S_Mode Slave 				*/
  I2S_InitStruct.I2S_Standard = I2S_Standard_Phillips;			/* Initialize the I2S_Standard member 	*/
  I2S_InitStruct.I2S_DataFormat = I2S_DataFormat_16b;			/* Initialize the I2S_DataFormat member */
  I2S_InitStruct.I2S_MCLKOutput = I2S_MCLKOutput_Disable; 		/* Initialize the I2S_MCLKOutput member */
  I2S_InitStruct.I2S_AudioFreq = I2S_AudioFreq_48k; 	    	/* Initialize the I2S_AudioFreq member 	*/
  I2S_InitStruct.I2S_CPOL = I2S_CPOL_Low;						/* Initialize the I2S_CPOL member 			*/
	
  I2S_Init (SPI2, &I2S_InitStruct);	
  SPI_Cmd (SPI2, ENABLE);
  I2S_Cmd (SPI2, ENABLE);

  Config_I2S2_Pin (); 		
  SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE); 					// Rx buffer not empty interrupt mask
	
}	// I2S_Slave_Init (void)

 

Share this post


Link to post
Share on other sites
On 9/3/2020 at 2:08 PM, Vladimir_T said:

В режиме I2S slave для приема данных, я должен линию I2S_CK подключить CKIN (PC9) ?

Нет, на нее подключать внешний MCLK, если не хотите от внутреннего работать.

 

On 9/3/2020 at 2:08 PM, Vladimir_T said:

Сейчас I2S_CK на I2S2_CK(PB9).

На память не помню, но врода да.

 

On 9/3/2020 at 2:08 PM, Vladimir_T said:

Внутреннюю периферию сконфигурировал, а приема данных нет.

А что является источником WCLK, BCLK и SD?

Чтение в прерывании делается? У STM32 вообще-то I2S весьма кривой, лучше брать камень с SAI, хотя и там далеко не все "прямолинейно".

 

Да, еще эррату не помешало бы прочитать :)

Прежде чем слейв включать, надо дождаться определеннго уровня на вордклоке (а вот с SAI этого не надо).

 

 

Share this post


Link to post
Share on other sites
On 9/24/2020 at 1:24 PM, Allregia said:

А что является источником WCLK, BCLK и SD?

Чтение в прерывании делается? У STM32 вообще-то I2S весьма кривой, лучше брать камень с SAI, хотя и там далеко не все "прямолинейно".

 

I2S используется для работы с кодеком TLV320IAC520 в режиме мастера. Кодек формирует все служебные сигналы.  Документацию читал и рекомендации стараюсь выполнять.

Самое интересное, что эта связка сразу заработала нормально: прерывания от приемника I2S идут, сделал поканальную обработку потока. Затем некоторое время занимался отладкой других узлов. Но когда вернулся к кодеку - тут и сюрприз. Не работает оцифровка потока - сколько не бьюсь, а прерываний по приему так и нет!  Что еще можно предпринять? 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this