/* ********************************************************************************************************* * 函 数 名: I2S_Config * 功能说明: 配置STM32的I2S外设工作模式 * 形 参: _usStandard : 接口标准,I2S_Standard_Phillips, I2S_Standard_MSB 或 I2S_Standard_LSB * _usMCLKOutput : 主时钟输出,I2S_MCLKOutput_Enable or I2S_MCLKOutput_Disable * _usAudioFreq : 采样频率,I2S_AudioFreq_8K、I2S_AudioFreq_16K、I2S_AudioFreq_22K、 * I2S_AudioFreq_44K、I2S_AudioFreq_48 * _usMode : CPU I2S的工作模式,I2S_Mode_MasterTx、I2S_Mode_MasterRx、 * * 返 回 值: 无 ********************************************************************************************************* */ static void I2S_Mode_Config(uint16_t _usStandard, uint16_t _usWordLen, uint32_t _uiAudioFreq, uint16_t _usMode) { I2S_InitTypeDef I2S_InitStructure; if ((_usMode == I2S_Mode_SlaveTx) && (_usMode == I2S_Mode_SlaveRx)) { /*不支持这2种模式 */ return; } /* For I2S mode, make sure that either: - I2S PLL is configured using the functions RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S), RCC_PLLI2SCmd(ENABLE) and RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY). */ { uint32_t n = 0; FlagStatus status = RESET; RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S); RCC_PLLI2SCmd(ENABLE); for (n = 0; n < 500; n++) { status = RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY); if (status == 1) { break; } } } /* 打开 I2S2 APB1 时钟 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); /* 复位 SPI2 外设到缺省状态 */ SPI_I2S_DeInit(SPI2); //RCC_PLLI2SConfig(213,2); //willow add 20160118 for 录音时钟。 /* I2S2 外设配置 */ //if (_usMode == I2S_Mode_MasterTx) { I2S_StructInit(&I2S_InitStructure); I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx; /* 配置I2S工作模式 */ I2S_InitStructure.I2S_Standard = _usStandard; /* 接口标准 */ I2S_InitStructure.I2S_DataFormat = _usWordLen; /* 数据格式,16bit */ I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable; /* 主时钟模式 */ I2S_InitStructure.I2S_AudioFreq = _uiAudioFreq; /* 音频采样频率 */ I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low; I2S_Init(SPI2, &I2S_InitStructure); /* Configure the I2Sx_ext (the second instance) in Slave Receiver Mode */ I2S_FullDuplexConfig(I2S2ext, &I2S_InitStructure); /* 使能 SPI2/I2S2 外设 */ I2S_Cmd(SPI2, ENABLE); /* Enable the I2Sx_ext peripheral for Full Duplex mode */ I2S_Cmd(I2S2ext, ENABLE); } /* 禁止I2S2 TXE中断(发送缓冲区空),需要时再打开 */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, DISABLE); /* 禁止I2S2 RXNE中断(接收不空),需要时再打开 */ SPI_I2S_ITConfig(I2S2ext, SPI_I2S_IT_RXNE, DISABLE); #if 0 /* 这一段代码用于测试I2S双向传输功能 */ while (1) { static uint16_t usData; if (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == SET) { SPI_I2S_SendData(SPI2, 0x55); } if (SPI_I2S_GetFlagStatus(I2S2ext, SPI_I2S_FLAG_RXNE) == SET) { usData = SPI_I2S_ReceiveData(I2S2ext); printf("%02X ", usData); } } #endif }
所在话题
参与活动
-
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16