中级会员
- 积分
- 200
- 金钱
- 200
- 注册时间
- 2017-5-4
- 在线时间
- 81 小时
|
在Sai.c文件中有个设置采样率的函数- u8 SAIA_SampleRate_Set(u32 samplerate)
- {
- u8 i=0;
- RCC_PeriphCLKInitTypeDef RCCSAI1_Sture;
-
- for(i=0;i<(sizeof(SAI_PSC_TBL)/10);i++)//¿′¿′¸Ä2éÑùÂêêÇ·ñ¿éòÔÖ§3Ö
- {
- if((samplerate/10)==SAI_PSC_TBL[i][0])break;
- }
- if(i==(sizeof(SAI_PSC_TBL)/10))return 1;//ËѱéáËò2Õò2»μ½
- RCCSAI1_Sture.PeriphClockSelection=RCC_PERIPHCLK_SAI1; //íaéèê±ÖóÔ′Ñ¡Ôñ
- RCCSAI1_Sture.Sai1ClockSelection=RCC_SAI1CLKSOURCE_PLLSAI;
- RCCSAI1_Sture.PLLSAI.PLLSAIN=(u32)SAI_PSC_TBL[i][1]; //éèÖÃPLLSAIN
- RCCSAI1_Sture.PLLSAI.PLLSAIQ=(u32)SAI_PSC_TBL[i][2]; //éèÖÃPLLSAIQ
- RCCSAI1_Sture.PLLSAIDivQ=SAI_PSC_TBL[i][3]; //éèÖÃPLLSAIDivQ
- HAL_RCCEx_PeriphCLKConfig(&RCCSAI1_Sture); //éèÖÃê±Öó
-
- __HAL_SAI_DISABLE(&SAI1A_Handler); //1رÕSAI
- SAI1A_Handler.Init.AudioFrequency=samplerate; //éèÖÃ2¥·ÅÆμÂê
- HAL_SAI_Init(&SAI1A_Handler); //3õê¼»ˉSAI
- SAIA_DMA_Enable(); //¿aÆôSAIμÄDMA1|Äü
- __HAL_SAI_ENABLE(&SAI1A_Handler); //¿aÆôSAI
- return 0;
- }
复制代码 里面是通过和SAI_PSC_TBL做匹配来找到对应的参数进行配置的,但是SAI_PSC_TBL每行中的第五个元素貌似没用到,也就是MCKDIV这个参数。但是播放音乐貌似都正常,我的猜测是大部分WAV文件都是44.1KHz采样率的,而44.1KHz采样率对应的MCKDIV恰好为0,STM32的MCKDIV默认就是0,因此即使没有配置也成功播放了。不知道我分析的对不对,请大神指点一下。我估计如果播放其他采样率的WAV应该会出问题吧,我没有试过,因为下载不到其他采样率的WAV。。。 |
|