STM32H743实战(三)-- 时钟系统配置
本文介绍两种常见的开发方案,并系统说明时钟(RCC)配置的关键参数及其逻辑关系。本文将深入解析 H743 的 **时钟架构原理**,并以两种常见的开发方案:**STM32CubeMX + Keil** 和 **STM32CubeIDE**演示如何完成主频 400 MHz 的时钟配置。
文章目录
前言
在 STM32 系列中,H7 系列(尤其是 STM32H743) 是性能最强的产品之一。它搭载 Cortex-M7 内核,理论主频高达 480 MHz,拥有三级 Cache、AXI 总线矩阵与双精度 FPU。
然而,在许多实际开发板(如 正点原子阿波罗 STM32H743IIT6(ATK- DNH743P V2))中,默认系统主频被配置为 400 MHz。这是出于稳定性、电源安全及兼容性方面的综合考虑。
本文介绍两种常见的开发方案,并系统说明时钟(RCC)配置的关键参数及其逻辑关系。
本文将深入解析 H743 的 时钟架构原理,并以两种常见的开发方案:STM32CubeMX + Keil 和 STM32CubeIDE演示如何完成主频 400 MHz 的时钟配置。
1 开发环境简介
1.1 开发环境对比
| 项目 | 方案一:STM32CubeMX + Keil MDK | 方案二:STM32CubeIDE(内含 CubeMX) |
|---|---|---|
| 环境构成 | CubeMX 生成代码 → 导入 Keil 工程 | CubeIDE 一体化环境,内嵌 CubeMX 配置 |
| 编译工具链 | ARMCC / ARMClang | GCC(arm-none-eabi-gcc) |
| 调试接口 | ST-Link / J-Link | ST-Link / J-Link |
| 配置保存方式 | .ioc 文件 + Keil 工程文件 |
.ioc 文件 + Eclipse 工程文件 |
| 优点 | 工程结构清晰、便于兼容旧项目 | 一体化操作、自动生成初始化代码 |
| 典型用途 | 正式量产、对接已有 Keil 代码库 | 教学、快速原型、全自动代码生成 |
1.2 两种开发方案工作流程
(1)CubeMX + Keil
- 使用 CubeMX 配置时钟、外设,生成 Keil 工程
- 打开 Keil,编译下载程序
- 调试使用 ST-Link 接口
(2)CubeIDE
- 在 CubeIDE 中直接创建新工程(内置 CubeMX)
- 配置系统时钟、外设;
- 自动生成初始化代码并一键编译运行
2 准备工作(硬件与工具)
- MCU/板卡:基于正点原子阿波罗 STM32H743 开发板
- IDE:
Keil MDK (版本V5.31,支持 H7 系列) STM32CubeMX(用于生成初始化代码)STM32CubeIDE(一体化操作、自动生成初始化代码 )
2 正点原子阿波罗开发板时钟方案
2.1 时钟源概览
正点原子阿波罗 STM32H743IIT6 的时钟系统采用 外部高速晶振HSE( 图1) 与 外部低速晶振LSE(图2) 作为主要时钟源.

图1 外部高速晶振HSE

图2 外部低速晶振LSE
根据原理图,可知该开发板主要使用以下两个外部时钟源:
| 时钟源 | 频率 | 连接管脚 | 用途 |
|---|---|---|---|
| HSE(High Speed External) | 25 MHz | PH0(OSC_IN)、PH1(OSC_OUT) | 系统主时钟来源 |
| LSE(Low Speed External) | 32.768 kHz | PC14(OSC32_IN)、PC15(OSC32_OUT) | RTC 实时时钟基准 |
除此之外,芯片还内部集成:
- HSI(64 MHz):内部高速 RC 振荡器;
- CSI(4 MHz):用于系统自校准与低功耗模式;
- LSI(32 kHz):内部低速 RC 时钟。
在本方案中,系统主时钟来自外部 HSE,经 PLL1 倍频生成 400 MHz 系统时钟,而 LSE 用于 RTC 计时。
2.2 时钟系统架构
STM32H743 的时钟体系结构如下(简化示意):

图3 STM32H743 的时钟体系结构简化示意图
2.3 时钟配置目标(400 MHz)
本开发板时钟配置如下:
| 项目 | 参数 | 说明 |
|---|---|---|
| 外部高速晶振(HSE) | 25 MHz | 板载有源晶振 |
| 外部低速晶振(LSE) | 32.768 kHz | RTC 使用 |
| 主 PLL1 输入 | HSE | 选择外部时钟源 |
| PLL1_M | 5 | 除频系数 |
| PLL1_N | 160 | 倍频系数 |
| PLL1_P | 2 | 输出分频 |
| 系统主频 SYSCLK | 400 MHz | Cortex-M7 内核主频 |
| AHB 时钟 HCLK | 200 MHz | 总线时钟 |
| APB1 / APB2 / APB3 / APB4 | 100 MHz | 外设时钟 |
| 电压模式 | VOS1(1.2 V) | 400 MHz 安全电压 |
| Flash 延时 | 4 Wait States | 匹配主频延时要求 |
计算验证:
PLL1P = (HSE / M) × N / P = (25 / 5) × 160 / 2 = 400 MHz
2.4 为何不是 480 MHz?
尽管 STM32H743 理论上支持 480 MHz,但正点原子选择 400 MHz 是基于以下考量:
| 对比项 | 400 MHz(默认) | 480 MHz(极限) |
|---|---|---|
| 电源电压要求 | VOS1 模式(1.2 V) | VOS0 模式(1.26 V) |
| 系统稳定性 | 高,适合量产与教学 | 对供电、温度更敏感 |
| 功耗与发热 | 较低 | 略高约 15–20% |
| Flash 延时 | 4 WS | 5 WS |
| 外设兼容性 | 已优化 | 需重新配置时钟树 |
| 官方出厂默认 | ✅ | ❌ |
因此,400 MHz 是兼顾性能与稳定性的理想配置。
3 CubeMX(CubeIDE 内含 CubeMX) 中的配置步骤
3.1 新建工程
在 CubeMX中新建工程,输入选择目标 MCU(STM32H743IIT6),暂时保留所有默认配置,点击开始工程按钮(如图4所示),进入MX设置界面。

图4 在 CubeMX 中新建工程
在CubeIDE 中新建工程,输入选择目标 MCU(STM32H743IIT6),暂时保留所有默认配置,点击下一步按钮(如图5所示),进入工项目创建界面。
图5 在 CubeIDE 中新建工程
在工程创建界面输入项目名称,点击完成按钮,随后进入MX设置界面。

图6 CubeIDE工程创建界面
3.2 RCC(Reset and Clock Control)模式配置
在使用 STM32CubeMX 进行时钟配置之前,需要先完成 RCC(复位与时钟控制) 的基础设置。该部分定义了系统中可用的时钟源、供电方式与核心电压等级,是整个 时钟树(Clock Tree) 的根基。
(1)时钟源选择(Clock Source Selection)
| 项目 | 设置 | 说明 |
|---|---|---|
| HSE(High-Speed External) | Crystal/Ceramic Resonator |
外部高速晶振,频率为 25 MHz,用于系统主时钟输入。 |
| LSE(Low-Speed External) | Crystal/Ceramic Resonator |
外部低速晶振,频率为 32.768 kHz,用于 RTC(实时时钟)或低功耗计时。 |
(2)管脚定义说明(Clock Source Pin Definition)
根据正点原子阿波罗 STM32H743IIT6 开发板原理图:
| 时钟源 | 引脚 | 功能说明 |
|---|---|---|
| HSE 晶振 | PH0 (OSC_IN)、PH1 (OSC_OUT) | 接入 25 MHz 外部高速晶振,用作系统主时钟输入。 |
| LSE 晶振 | PC14 (OSC32_IN)、PC15 (OSC32_OUT) | 接入 32.768 kHz 外部低速晶振,为 RTC 提供时基。 |
💡 提示:CubeMX 在检测到启用 HSE 或 LSE 时,会自动将这些引脚锁定(灰色不可选),以防止与其他外设冲突。

图7 RCC模式设置:时钟源选择和管脚定义说明
(3)主要参数设置(Power & Voltage Configuration)
| 参数名称 | 推荐值 | 说明 |
|---|---|---|
| Supply Source | Internal Regulator (LDO) | 使用内部 LDO 从 3.3V VDD 生成核心电压(VCORE),默认安全稳定。 |
| Power Regulator Voltage Scale | Scale 1 (VOS1) | 设置核心电压为约 1.2 V,对应系统最高主频 400 MHz。 |
| Flash Latency(Wait States) | 4 WS | Flash 访问等待周期,CubeMX 会根据主频与电压自动计算。 |
| VCAP 电压 | ≈ 1.2 V | 内部 LDO 输出核心电压滤波节点,可在 VCAP1/VCAP2 引脚测量验证。 |
(4)参数配置说明
- 当
Supply Source设为 Internal Regulator (LDO) 时,MCU 内部线性稳压器将外部 3.3V 转换为核心电压(VCORE)。 - 将
Power Regulator Voltage Scale设为 VOS1 可安全支持 400 MHz 主频;若需 480 MHz,则需使用 Boost 模式(VOS0)。 Flash Latency由 CubeMX 自动匹配,无需手动调整。VCAP1与VCAP2是稳压输出节点,每个应接 2.2–4.7 µF 电容,以确保系统稳定。
3.3 配置时钟树
(1)配置 PLL1 参数
| 参数 | 值 |
|---|---|
| PLL Source | HSE |
| PLL M | 5 |
| PLL N | 160 |
| PLL P | 2 |
在 PLL1 输出频率计算器 中确认:PLL1P = 25 / 5 × 160 / 2 = 400 MHz
(2)配置主要分频参数
| 名称 | 建议值 | 结果频率 |
|---|---|---|
| D1CPRE | 1 | CPU = 400 MHz |
| HPRE (AHB) | 2 | HCLK = 200 MHz |
| APB1 Prescaler | 2 | PCLK1 = 100 MHz |
| APB2 Prescaler | 2 | PCLK2 = 100 MHz |
| APB3 / APB4 | 2 | PCLK3/4 = 100 MHz |
(3)时钟树配置结果
界面切换到时钟树配置 Clock Configuration,按照PLL1 参数和其他主要分频参数,时钟树配置结果如图8所示。
图8 时钟树配置结果
3.4 生成代码
3.4.1 CubeMX生成Keil代码
(1)设置工程输出(生成 Keil 工程)
图8 设置工程输出(生成 Keil 工程)
- 在主界面点击 「Project Manager」 标签页。
- 在左侧导航中选择 「Project」 子项。
- 按如下填写:
| 项目 | 说明 | 示例 |
|---|---|---|
| Project Name | 工程名称 | CfgClk-Keil |
| Project Location | 工程路径 | C:\stm32-demo\Keil |
| Toolchain / IDE | 输出工具链类型 | ✅ 选择 MDK-ARM (Keil uVision) |
| Application Structure | 代码结构 | 建议选 Advanced(代码更分层、清晰) |
-
返回主界面,点击右上角 ⚙️ Generate Code 生成代码。
CubeMX 会自动创建:MDK-ARM/CfgClk-Keil.uvprojx这是可直接用 Keil 打开的工程文件。
💡 提示:
- 如果选错了 IDE 类型(例如默认是 STM32CubeIDE),可以随时回来修改为 MDK-ARM 再重新生成。
- 修改后会保留原有配置,不会丢失你的时钟、引脚和外设设置。
(2)Keil 中验证配置
打开生成的 .uvprojx 工程后,找到:
Core/Src/main.c
在 main() 函数中可看到 CubeMX 自动调用的初始化流程:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MPU Configuration--------------------------------------------------------*/
MPU_Config();
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
SystemClock_Config() 内容示例:
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Supply configuration update enable
*/
HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
/** Configure the main internal regulator output voltage
*/
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 5;
RCC_OscInitStruct.PLL.PLLN = 160;
RCC_OscInitStruct.PLL.PLLP = 2;
RCC_OscInitStruct.PLL.PLLQ = 2;
RCC_OscInitStruct.PLL.PLLR = 2;
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
RCC_OscInitStruct.PLL.PLLFRACN = 0;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
|RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
3.4.2 CubeIde生成代码
(1)生成代码的基本步骤
-
方法1 保存工程配置生成代码
- 点击菜单栏:File → Save,或者点击工具栏上的 💾 保存图标,CubeIDE 会提示是否生成代码,点击
Yes,代码会自动生成。
- 点击菜单栏:File → Save,或者点击工具栏上的 💾 保存图标,CubeIDE 会提示是否生成代码,点击
-
方法2 点击顶部工具栏图标生成代码
点击顶部工具栏的齿轮图标:
(2)工程验证
代码生成后,打开 STM32CubeIDE 工程。
CubeIDE 会自动包含 CubeMX 生成的初始化代码,主要文件如下:
| 文件路径 | 说明 |
|---|---|
Core/Src/system_stm32h7xx.c |
系统时钟初始化 |
Core/Src/main.c |
主函数入口,调用 SystemClock_Config() |
Drivers/STM32H7xx_HAL_Driver |
HAL 库底层驱动 |
查看函数:
void SystemClock_Config(void)
其中包含:
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Supply configuration update enable
*/
HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
/** Configure the main internal regulator output voltage
*/
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 5;
RCC_OscInitStruct.PLL.PLLN = 160;
RCC_OscInitStruct.PLL.PLLP = 2;
RCC_OscInitStruct.PLL.PLLQ = 2;
RCC_OscInitStruct.PLL.PLLR = 2;
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
RCC_OscInitStruct.PLL.PLLFRACN = 0;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
|RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
这段代码即是 CubeMX 在 CubeIDE 中自动生成的时钟配置逻辑。
总结
STM32H743 的时钟系统虽复杂,但掌握其逻辑后,配置就非常灵活。
良好的时钟架构不仅能发挥 M7 内核的极致性能,也能让系统稳定运行。
更多推荐



所有评论(0)