You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置STM32F703的I2S主时钟?44.1kHz采样率时钟调整异常

STM32F703 I2S MCLK频率不随PLLI2SDivQ变化的排查与解决

核心问题分析

你遇到的MCLK始终等于PLLI2SR输出(112.896MHz),说明修改PLLI2SDivQ的配置没有作用到MCLK的时钟路径上,大概率是时钟源选择错误或PLL配置未生效导致的。

分步排查与解决

1. 确保PLLI2SDivQ配置生效

STM32的PLL参数修改必须先关闭对应PLL,修改后重新使能,否则寄存器变更不会生效:

  • 禁用PLLI2S,等待就绪位清零;
  • 修改RCC_PLLI2SCFGR寄存器的PLLI2SDIVQ位(注意:寄存器存储值为分频比-2,比如分频比5对应写入5-2=3);
  • 重新使能PLLI2S,等待就绪位置位;
  • 可通过调试器读取RCC_PLLI2SCFGR寄存器值,确认配置是否写入成功。

2. 确认I2S时钟源选择为PLLI2SQ

PLLI2SDivQ是对PLLI2SQ分频,而非PLLI2SR。如果I2S时钟源直接选了PLLI2SR,修改PLLI2SDivQ自然不会影响MCLK:

  • 检查RCC_DCKCFGR1寄存器的I2SxSEL位(x为对应I2S外设编号):
    • 取值11时,时钟源为PLLI2SQ(经过PLLI2SDivQ分频后的时钟);
    • 若当前是10(PLLI2SR),需改为11。

3. 验证I2S外设的MCLK输出配置

即使时钟源正确,还需确保I2S外设正确输出MCLK:

  • 开启I2Sx_CR2寄存器的MCKOE位,使能MCLK引脚输出;
  • 根据目标MCLK频率(比如44.1kHz采样率常用的256×fₛ=11.2896MHz),配置DIV和ODD位调整分频比:
    • 若PLLI2SQ输出已经是11.2896MHz(即PLLI2SDivQ=10时112.896/10=11.2896),则无需额外分频,直接输出即可。

4. 硬件引脚验证

确认示波器测量的是正确的I2S MCLK引脚(比如I2S1的MCLK为PB6或PE2),引脚已配置为对应复用功能(如AF5),且无其他外设占用该引脚。

配置示例(寄存器级)

// 关闭PLLI2S
RCC->CR &= ~RCC_CR_PLLI2SON;
while((RCC->CR & RCC_CR_PLLI2SRDY)); // 等待PLLI2S关闭

// 设置PLLI2SDivQ为5(分频比5)
RCC->PLLI2SCFGR &= ~RCC_PLLI2SCFGR_PLLI2SDIVQ;
RCC->PLLI2SCFGR |= (5-2) << RCC_PLLI2SCFGR_PLLI2SDIVQ_Pos;

// 重新开启PLLI2S
RCC->CR |= RCC_CR_PLLI2SON;
while(!(RCC->CR & RCC_CR_PLLI2SRDY)); // 等待PLLI2S就绪

// 设置I2S1时钟源为PLLI2SQ
RCC->DCKCFGR1 &= ~RCC_DCKCFGR1_I2S1SEL;
RCC->DCKCFGR1 |= RCC_DCKCFGR1_I2S1SEL_1 | RCC_DCKCFGR1_I2S1SEL_0;

// 开启I2S1 MCLK输出
I2S1->CR2 |= SPI_CR2_MCKOE;

内容的提问来源于stack exchange,提问作者Nima Aghayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:55:25