你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教下,关于sai接口的 i2s 采样率设置 ??

[复制链接]
hpdell 提问时间:2018-1-2 23:02 /
本帖最后由 hpdell 于 2018-1-3 19:38 编辑

现在想把 sai 的采样时钟改成 i2s 的,出现了采样率快慢的情况,如果全部都使用 sai 的时钟源,貌似比较正常,
但是使用 i2s 的时钟源,出现了不同的采样率的快慢不一致的情况,出现这样的情况,除了目前程序设置的外,还需要设置哪些 ???????

u8 SAIA_SampleRate_Set(u32 AudioFreq)
{   
  u8 i=0;
  RCC_PeriphCLKInitTypeDef RCCSAI1_Sture;  

  uint8_t freqindex = 0xFF;

        /* 这里采用列表的形式配置PLLI2S的时钟供SAI时钟使用 */
        for(i = 0; i < (sizeof(g_tPLLI2SPSC)/sizeof(g_tPLLI2SPSC[0])); i++)
        {
                if(AudioFreq == g_tPLLI2SPSC.Fs)
                {
      freqindex = i;
                        break;
                }        
        }  

  HAL_RCCEx_GetPeriphCLKConfig(&RCCSAI1_Sture);

  if(freqindex != 0xff)
  {
    #if  0   // 使用sai   如果使用这个 SAI 作为时钟,貌似基本没有什么问题
        /* Configure PLLSAI prescalers */

        RCCSAI1_Sture.PeriphClockSelection = RCC_PERIPHCLK_SAI1;          //外设时钟源选择
        RCCSAI1_Sture.Sai1ClockSelection   = RCC_SAI1CLKSOURCE_PLLSAI;    // 选择 sai 作为 sai的时钟源
        RCCSAI1_Sture.PLLSAI.PLLSAIP       = RCC_PLLP_DIV2;
        RCCSAI1_Sture.PLLSAI.PLLSAIN       = (u32)g_tPLLI2SPSC.PLLI2S_N;
        RCCSAI1_Sture.PLLSAI.PLLSAIQ       = (u32)g_tPLLI2SPSC.PLLI2S_Q;  
        RCCSAI1_Sture.PLLSAIDivQ           = g_tPLLI2SPSC.PLLI2S_DivQ;  

    #else   // 使用 i2s 作为时钟源 ,使用不同的采样率时,出现了播放速度快慢的情况,具体如下: ??????

        if( (AudioFreq == AUDIO_FREQUENCY_44K)
            || (AudioFreq == AUDIO_FREQUENCY_11K)
            )
        {
          /* Configure PLLSAI prescalers */
        

          RCCSAI1_Sture.PeriphClockSelection = RCC_PERIPHCLK_SAI1;  // 采样率为44K时,需要选择这个时钟源
          RCCSAI1_Sture.Sai1ClockSelection   = RCC_SAI1CLKSOURCE_PLLI2S;        // 选择 i2s 作为 sai的时钟源
          RCCSAI1_Sture.PLLI2S.PLLI2SP       = RCC_PLLP_DIV2;
        RCCSAI1_Sture.PLLI2S.PLLI2SN       = g_tPLLI2SPSC.PLLI2S_N;
        RCCSAI1_Sture.PLLI2S.PLLI2SR       = g_tPLLI2SPSC.PLLI2S_Q;  
        RCCSAI1_Sture.PLLI2SDivQ           = g_tPLLI2SPSC.PLLI2S_DivQ;

        }
        else if((AudioFreq == AUDIO_FREQUENCY_48K)
                || (AudioFreq == AUDIO_FREQUENCY_96K)
                || (AudioFreq == AUDIO_FREQUENCY_22K)
                  || (AudioFreq == AUDIO_FREQUENCY_16K)
                    || (AudioFreq == AUDIO_FREQUENCY_8K)
                      )
        {
          /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_22K, AUDIO_FREQUENCY_48K), AUDIO_FREQUENCY_96K */

          RCCSAI1_Sture.PeriphClockSelection = RCC_PERIPHCLK_I2S;   // 采样率为48K/96K/22K时,需要选择这个时钟源,而且这个时钟源,貌似只有48K/96K的采样率是非常好的,
                                                                                                        // 其他的采样率速度都貌似有点快 ????????? 我这样设置,是不是还有其他地方需要更改啊 ???

          RCCSAI1_Sture.Sai1ClockSelection   = RCC_SAI1CLKSOURCE_PLLI2S;        // 选择 i2s 作为 sai的时钟源
          RCCSAI1_Sture.PLLI2S.PLLI2SP       = RCC_PLLP_DIV2;
        RCCSAI1_Sture.PLLI2S.PLLI2SN       = g_tPLLI2SPSC.PLLI2S_N;
        RCCSAI1_Sture.PLLI2S.PLLI2SR       = g_tPLLI2SPSC.PLLI2S_Q;  
        RCCSAI1_Sture.PLLI2SDivQ           = g_tPLLI2SPSC.PLLI2S_DivQ;         
        }
    #endif

    HAL_RCCEx_PeriphCLKConfig(&RCCSAI1_Sture);
  }


          /* 等待就绪 */
HAL_Delay(5);

  return 0;
}

收藏 评论1 发布时间:2018-1-2 23:02

举报

1个回答
hpdell 回答时间:2018-1-3 16:26:34
本帖最后由 hpdell 于 2018-1-3 19:37 编辑

终于找到原因了,原来是这个地方搞错了

貌似这样设置就对了
    RCCSAI1_Sture.PeriphClockSelection = RCC_PERIPHCLK_SAI1;        //外设时钟源选择
    RCCSAI1_Sture.Sai1ClockSelection   = RCC_SAI1CLKSOURCE_PLLI2S;  // 选择 i2s 作为 sai的时钟源   

    RCCSAI1_Sture.PLLI2S.PLLI2SP       = 0;  // RCC_PLLP_DIV2;  // 适用于 SPDIFRX 时钟的 PLLI2S 分频系数 (PLLI2S division factor for SPDIFRX clock)
                                             //所以此处设置为0即可
    RCCSAI1_Sture.PLLI2S.PLLI2SN       = g_tPLLI2SPSC.PLLI2S_N;
    RCCSAI1_Sture.PLLI2S.PLLI2SQ       = g_tPLLI2SPSC.PLLI2S_Q;
    RCCSAI1_Sture.PLLI2SDivQ           = g_tPLLI2SPSC.PLLI2S_DivQ;

    HAL_RCCEx_PeriphCLKConfig(&RCCSAI1_Sture);

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版