首页/外设速查/RCC
🕐

RCC 时钟树

系统外设
芯片的心脏:管理所有时钟源与分频,改系统时钟=全外设分频重算,面试必考。
🧩 核心原理
📈 时序 / 工作过程图
RCC 时钟树(以 STM32F103 72MHz 为例)HSE → PLL → AHB → APB 逐级分频HSE8MHz 晶振PLL×9 → 72MHzAHB72MHzAPB1 / APB2÷2=36M / 72MAPB1 低速外设(USART2/3、I2C、TIM2-7、DAC)· APB2 高速外设(USART1、SPI1、ADC、TIM1/8)改系统时钟 = 所有外设分频都要重算!定时器时钟还需 ×2(APB1 预分频>1 时)
⚙️ 配置 / 使用要点
  1. 配置 HSE/PLL 倍频系数(系统时钟频率)
  2. 配置 AHB/APB1/APB2 预分频
  3. 逐个使能外设时钟
  4. MCO 引脚可输出时钟供调试
🛠️ 项目示例
配置 72MHz 系统时钟(F103)
RCC_OscInitTypeDef osc = {0};
osc.OscillatorType = RCC_OSCILLATORTYPE_HSE;
osc.HSEState = RCC_HSE_ON;                    // 外部8MHz
osc.PLL.PLLState = RCC_PLL_ON;
osc.PLL.PLLSource = RCC_PLLSOURCE_HSE;
osc.PLL.PLLMUL = RCC_PLLMUL9;                 // 8×9 = 72MHz
HAL_RCC_OscConfig(&osc);

RCC_ClkInitTypeDef clk = {0};
clk.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
                RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
clk.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
clk.AHBCLKDivider = RCC_SYSCLK_DIV1;          // 72
clk.APB1CLKDivider = RCC_HCLK_DIV2;           // 36MHz
clk.APB2CLKDivider = RCC_HCLK_DIV1;           // 72MHz
HAL_RCC_ClockConfig(&clk, FLASH_LATENCY_2);
❓ 面试高频
时钟树怎么画?
HSE(8M)→PLL(×9)=72M→AHB(÷1)=72M→APB1(÷2)=36M/APB2(÷1)=72M,标注各外设挂在哪条总线
为什么APB1外设定时器时钟要×2?
APB1分频系数>1时,定时器时钟 = APB1×2,保证定时器精度;APB2分频=1时无此补偿
为什么换晶振要重配PLL?
PLL倍频按HSE频率设计,外部晶振频率变了,SYSCLK=HSE×倍频系数就变了,所有外设分频全要重算
✅ 自查清单 (点击勾选,本地保存)
0/0
能画出F103时钟树
知道APB1/APB2外设分类
知道TIM时钟×2规则
会配PLL与分频
知道外设时钟开关省电