原文:http://bbs.21ic.com/icview-717434-1-1.html
我目前是這樣配置的: 1,把system_stm32f4xx.c中啟用內(nèi)部I2SPLL的code注釋掉,然后啟用外部I2S時(shí)鐘: // RCC->CFGR &= ~RCC_CFGR_I2SSRC;
// /* Configure PLLI2S */ // RCC->PLLI2SCFGR = (PLLI2S_N << 6) | (PLLI2S_R << 28);
// /* Enable PLLI2S */ // RCC->CR |= ((uint32_t)RCC_CR_PLLI2SON);
// /* Wait till PLLI2S is ready */ // while((RCC->CR & RCC_CR_PLLI2SRDY) == 0) // { // } RCC->CFGR |= RCC_CFGR_I2SSRC; // 啟用外部時(shí)鐘
2,在使能I2S的APB時(shí)鐘前,對(duì)I2S_CKIN的pin進(jìn)行初始化: RCC_I2SCLKConfig(RCC_I2S2CLKSource_Ext); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //i2s clock in GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SPI3);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOC, &GPIO_InitStructure); 3,往SPI_I2SPR寄存器寫0x0202,即MCKOE = 1, I2SDIV = 2, ODD = 0,這樣配置使得在Fs=48000Hz時(shí),I2S_CKIN需要輸入1024*Fs(bit-frame = 32)的時(shí)鐘.I2S_CKIN我用FPGA輸出49.152MHz時(shí)鐘提供.用SignalTapII看該時(shí)鐘很穩(wěn)定.
4,經(jīng)過(guò)上面的配置,用SignalTapII看過(guò)STM32F4 I2S的MCK,LRCK,BCLK都沒有輸出.當(dāng)然Codec也沒發(fā)聲.
PS:如果啟用內(nèi)部的I2SPLL提供時(shí)鐘給I2S模塊,可以正常播放音樂(lè),表示I2S外設(shè)的配置是沒問(wèn)題的.所以請(qǐng)教下我的配置是否有問(wèn)題,或者還有什么地方需要配置或者注意的.任何意見我表示很感謝. |
問(wèn)題解決:
問(wèn)題找到了..原來(lái)在I2S_Init函數(shù)中有個(gè)開關(guān)定義在stm32f4_conf.h哪里..另外GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;應(yīng)該改為GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;忘記還有個(gè)地方要改:GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SPI3);應(yīng)該連接到GPIO_AF_SPI2,I2S_CKIN連接到AF5而不是AF6,雖然I2S2和I2S3的ext clk是共用的.