int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f10x_xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f10x.c file
*/
FlagStatus side;
SystemInit ();
// RCC_I2S2CLKConfig(RCC_I2S3CLKSource_SYSCLK); //为I2S选择时钟源;
GPIO_UART_Config();
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15 ;//I2SWS、I2SCK、I2SSD
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* CODEC_I2S pins configuration: MCK pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE);
/* CODEC_I2S peripheral configuration */
SPI_I2S_DeInit( SPI2 ); // 复位
I2S_StructInit( &I2S_InitStructure ); //初始化
I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_44k; //载波频率选择项
I2S_InitStructure.I2S_Standard = I2S_Standard_MSB ; //那种标准
I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_24b; //传送方式的选择
I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx;
I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable;
I2S_Init(SPI2, &I2S_InitStructure);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel5);
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x4000380C;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_buffer;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 2;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord ;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel5, &DMA_InitStructure);
// DMA_Cmd(DMA1_Channel5, ENABLE); //开启通道
/* Enable the I2S DMA request */
SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE);
//RCC_MCOConfig(RCC_MCO_HSE);
/* Initialize the I2S peripheral with the structure above */
I2S_Init( SPI2, &I2S_InitStructure );
DMA_Cmd(DMA1_Channel5, ENABLE); //开启通道
I2S_Cmd( SPI2, ENABLE );
DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE); //使能传输中断
DMA_Cmd(DMA1_Channel5, DISABLE); //开启通道
I2S_Cmd( SPI2, DISABLE );
DMA_Cmd(DMA1_Channel5, ENABLE); //开启通道
I2S_Cmd( SPI2, ENABLE );
side = SPI_I2S_GetFlagStatus(SPI2, I2S_FLAG_CHSIDE);
if(side==0)
{
printf ("%d",ADC_buffer[0]);
}
else
{
printf ("%d",ADC_buffer[1]);
}
为什么我用示波器看I2S的配置端口没有一点反映。。。。。
|