【STM32】将 8MHz 晶振倍频为系统时钟

要理解 STM32F103 如何将 8MHz 晶振倍频为系统时钟(SYSCLK),需聚焦 ** 锁相环(PLL)** 的工作原理和时钟树配置,具体分为 “PLL 倍频机制”“STM32F103 时钟树流程”“实际配置步骤” 三部分:

【STM32】将 8MHz 晶振倍频为系统时钟

一、锁相环(PLL)的倍频原理

PLL 是一种闭环反馈电路,通过 “相位锁定” 实现低频时钟到高频时钟的精准倍频,核心过程如下:
  1. 参考频率输入:外部 8MHz 晶振(HSE)产生的时钟  作为参考。
  2. 分频与相位比较:PLL 内部的 ** 鉴相器(PD)** 将参考频率  与 “PLL 输出分频后的反馈频率 ” 进行相位比较,输出低频误差信号。
  3. 滤波与压控振荡:误差信号经 ** 低通滤波器(LPF)平滑后,驱动压控振荡器(VCO)** 产生高频时钟 
  4. 倍频输出:若反馈分频系数为 ,VCO 输出频率需满足 (相位锁定条件),因此 
简言之,PLL 通过 “反馈分频 + 相位锁定” 的闭环,将输入频率精准倍频为 

二、STM32F103 的时钟树倍频流程

STM32F103 的时钟树以 PLL 为核心,将 8MHz HSE 倍频为 72MHz 系统时钟(SYSCLK),关键步骤如下:

1. 选择时钟源:HSE 作为 PLL 输入

外部 8MHz 晶振(HSE)经 OSCIN/OSCOUT 接入后,需配置寄存器 RCC_CFGR 的 PLLSRC 位,选择 HSE 作为 PLL 的输入时钟源(默认 HSE 不分频,直接输入 PLL)。

2. 配置 PLL 倍频系数

通过 RCC_CFGR 寄存器的 PLLMUL 位设置倍频因子(STM32F103 支持 2~16 倍频,步长为 1)。
  • 若选择 9 倍频,则 PLL 输出频率为: 【STM32】将 8MHz 晶振倍频为系统时钟
  • 倍频系数需结合芯片性能选择(STM32F103 最高支持 72MHz 系统时钟)。

3. 使能 PLL 并切换系统时钟

  • 使能 PLL:置位 RCC_CR 寄存器的 PLLON 位,启动 PLL 电路;等待 RCC_CR 的 PLLRDY 位置 1(表示 PLL 稳定)。
  • 切换系统时钟:配置 RCC_CFGR 寄存器的 SW 位为 PLL,将系统时钟(SYSCLK)切换为 PLL 输出(72MHz)。

三、实际代码配置示例(标准库 / 寄存器级)

以 STM32F103C8T6 为例,通过寄存器配置实现 8MHz HSE → 72MHz SYSCLK 的倍频,关键代码如下:
#include "stm32f10x.h"

void SystemClock_Config(void) {
    // 1. 使能外部晶振(HSE)
    RCC->CR |= RCC_CR_HSEON;  // 开启 HSE
    while (!(RCC->CR & RCC_CR_HSERDY));  // 等待 HSE 稳定

    // 2. 配置 PLL:选择 HSE 为源,9 倍频
    RCC->CFGR |= RCC_CFGR_PLLSRC;         // PLL 时钟源 = HSE(不分频)
    RCC->CFGR |= RCC_CFGR_PLLMULL9;       // 9 倍频 → 8MHz × 9 = 72MHz
    RCC->CR |= RCC_CR_PLLON;              // 使能 PLL
    while (!(RCC->CR & RCC_CR_PLLRDY));   // 等待 PLL 稳定

    // 3. 切换系统时钟为 PLL 输出
    RCC->CFGR &= ~RCC_CFGR_SW;            // 清除原时钟源配置
    RCC->CFGR |= RCC_CFGR_SW_PLL;         // 系统时钟 = PLL 输出
    while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);  // 等待切换完成

    // 4. 配置总线时钟(可选):HCLK = SYSCLK,PCLK2 = HCLK,PCLK1 = HCLK/2
    RCC->CFGR |= RCC_CFGR_HPRE_DIV1;      // HCLK = SYSCLK(72MHz)
    RCC->CFGR |= RCC_CFGR_PPRE2_DIV1;     // PCLK2 = HCLK(72MHz,APB2 总线)
    RCC->CFGR |= RCC_CFGR_PPRE1_DIV2;     // PCLK1 = HCLK/2(36MHz,APB1 总线)
}

四、倍频的 “灵活性” 与 “限制”

  1. 灵活配置:倍频系数可根据需求调整(如 8MHz × 6 = 48MHz),只需修改 RCC_CFGR 的 PLLMUL 位。
  2. 硬件限制:STM32F103 的 PLL 输入频率范围为 1~2MHz(若 HSE 为 8MHz,需先分频?不,F103 允许 HSE 直接输入 PLL,因内部逻辑会适配);输出频率最高为 72MHz(受芯片工艺限制)。

总结

STM32F103 通过 ** 锁相环(PLL)** 的闭环反馈机制,将 8MHz 外部晶振倍频为 72MHz 系统时钟,过程为:选择 HSE 作为 PLL 源 → 设置倍频系数 → 使能 PLL 并切换系统时钟。这一设计既保证了时钟的精准性,又通过软件配置实现了灵活的频率调整,是 STM32 高性能与易用性的核心体现。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索