中级会员
- 积分
- 224
- 金钱
- 224
- 注册时间
- 2020-11-4
- 在线时间
- 36 小时
|
楼主 |
发表于 2021-8-11 16:30:40
|
显示全部楼层
补充
const u16 SAI_PSC_TBL[][5]=
{
{800 ,344,7,0,12}, //8Khz采样率
{1102,429,2,18,2}, //11.025Khz采样率
{1600,344,7, 0,6}, //16Khz采样率
{2205,429,2,18,1}, //22.05Khz采样率
{3200,344,7, 0,3}, //32Khz采样率
{4410,429,2,18,0}, //44.1Khz采样率
{4800,344,7, 0,2}, //48Khz采样率
{8820,271,2, 2,1}, //88.2Khz采样率
{9600,344,7, 0,1}, //96Khz采样率
{17640,271,6,0,0}, //176.4Khz采样率
{19200,295,6,0,0}, //192Khz采样率
};
u8 SAIA_SampleRate_Set(u32 samplerate)
{
u8 i=0;
RCC_PeriphCLKInitTypeDef RCCSAI1_Sture;
Debug_samplerate = samplerate;
for(i=0;i<(sizeof(SAI_PSC_TBL)/10);i++)//看看改采样率是否可以支持
{
if((samplerate/10)==SAI_PSC_TBL[i][0])break;
}
if(i==(sizeof(SAI_PSC_TBL)/10))return 1;//搜遍了也找不到
RCCSAI1_Sture.PeriphClockSelection=RCC_PERIPHCLK_SAI1; //外设时钟源选择
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); //关闭SAI
SAI1A_Handler.Init.AudioFrequency=samplerate; //设置播放频率
HAL_SAI_Init(&SAI1A_Handler); //初始化SAI
SAIA_DMA_Enable(); //开启SAI的DMA功能
__HAL_SAI_ENABLE(&SAI1A_Handler); //开启SAI
return 0;
} |
|