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

请教下,关于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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版