STM32N6 作为首款搭载 NPU 的 Cortex-M55 内核 MCU,其 MCO(Microcontroller Clock Output)功能可对外输出系统时钟,方便外部设备时钟同步。但部分开发者在配置 MCO2 输出时会遇到 “配置代码无错却无波形” 的问题 —— 如使用 24MHz 外部晶振(HSE),通过HAL_RCC_MCOConfig配置 MCO2 输出后,PC9 管脚始终无信号。本文直击问题根源(VDDIO4 供电未启用),详解 MCO2 时钟输出的完整配置流程,助力快速实现稳定时钟输出。
资料获取:STM32N6 平台如何使用 MCO2 输出 Clock
1. 问题背景与核心现象
1.1 客户配置参数
- 硬件:STM32N657X0H3(VFBGA264 封装),24MHz 外部晶振(HSE);
- 软件:STM32CubeIDE,调用 HAL 库 API
HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_HSE, RCC_MCODIV_1); - 预期输出:24MHz 时钟波形(HSE 源,1 分频);
- 异常现象:MCO2(PC9 管脚)无输出,相同配置下 MCO1(PA8 管脚)可正常输出 HSE 时钟。
1.2 初步排查结论
- 管脚确认:MCO2 对应 PC9 管脚,复用功能为 AF0_TRACE(MCO2),客户管脚配置正确;
- 代码验证:MCO1 与 MCO2 配置逻辑一致,排除 API 调用错误;
- 核心疑点:MCO2 与 MCO1 的供电或硬件使能机制存在差异。
2. 问题根源:MCO2 管脚的供电与使能限制
STM32N6 的 MCO2 输出依赖VDDIO4 独立供电域,这是其与 MCO1 的核心区别,也是无输出问题的关键原因:
2.1 MCO2 管脚供电归属
根据 STM32N6 参考手册(RM0486),MCO2 对应的 PC9 管脚属于 VDDIO4 供电域,该供电域覆盖 PC [1]、PC [12:6]、PH [2,9] 等管脚,默认状态下:
2.2 OTP 配置限制
VDDIO4 供电域的启用需通过 OTP(One-Time Programmable)配置:
- 对应 OTP 寄存器:OTP124(HCONF1)的 Bit14(HSLV_VDDIO4);
- 功能说明:置 1 时启用 VDDIO4 I/O 段(适用于 SDMMC1 端口相关管脚,含 PC9),允许该供电域下的 I/O 正常工作;
- 默认状态:HSLV_VDDIO4 为 0,VDDIO4 供电域未激活,PC9 管脚无供电支持,MCO2 自然无输出。
3. 分步解决方案:启用 MCO2 时钟输出
解决 MCO2 无输出问题的核心是 “激活 VDDIO4 供电域 + 正确配置 MCO2”,具体步骤如下:
3.1 确认 MCO2 管脚配置(基础前提)
- 管脚定义:STM32N6 的 MCO2 对应 PC9 管脚,复用功能为 AF0(MCO2);
- 配置要求:无需额外 GPIO 初始化(HAL 库 API 会自动配置复用功能),但需确保 PC9 未被其他功能占用。
3.2 OTP 配置:启用 HSLV_VDDIO4
通过 ST 官方工具(如 STM32CubeProgrammer)配置 OTP124 寄存器:
- 连接开发板与 PC,打开 STM32CubeProgrammer;
- 进入 OTP 配置界面,找到 OTP124(HCONF1);
- 将 Bit14(HSLV_VDDIO4)置 1,保存 OTP 配置(OTP 写入后不可修改,需谨慎操作);
- 重启 MCU,使 OTP 配置生效。
3.3 代码配置:使能 VDDIO4 并配置 MCO2
在main.c中添加 VDDIO4 使能代码,再调用 MCO2 配置 API,完整代码片段如下:
3.4 关键配置说明
HAL_PWREx_EnableVddIO4():该函数用于置位PWR_SVMCR1寄存器的VDDIO4SV位(Bit8),确认 VDDIO4 供电有效,是 PC9 管脚工作的必要条件;- 时钟源选择:支持 HSE、HSI、PLL 等多种源,需确保所选时钟源已正常启用(如 HSE 需先通过
HAL_RCC_OscConfig启用); - 分频系数:可通过
RCC_MCODIV_x(x=1/2/4/8/16)调整输出频率,满足不同外部设备需求。
4. 注意事项与常见误区
- 供电一致性:VDDIO4 需提供稳定供电(与 VDDIO 主供电电压匹配),否则会导致时钟波形失真或无输出;
- OTP 配置不可逆:OTP124 的 HSLV_VDDIO4 位写入后无法修改,配置前需确认硬件设计中 VDDIO4 供电已就绪;
- 时钟源优先级:若配置 MCO2 源为 PLL,需确保 PLL 已锁定(通过
HAL_RCC_GetState()检查),避免因时钟源未就绪导致无输出; - MCO1 与 MCO2 差异:MCO1(PA8)归属主供电域(VDDIO),无需额外 OTP 配置,而 MCO2 依赖 VDDIO4,这是两者配置的核心区别。
STM32N6 MCO2 无输出的核心原因是VDDIO4 供电域未启用,解决问题的关键步骤可概括为:
- 确认 MCO2 管脚(PC9 AF0)配置正确;
- 通过 OTP 启用 HSLV_VDDIO4(OTP124 HCONF1 Bit14);
- 代码中调用
HAL_PWREx_EnableVddIO4()激活 VDDIO4; - 调用
HAL_RCC_MCOConfig配置时钟源与分频。
遵循以上步骤,即可实现 MCO2 的稳定时钟输出(如 24MHz HSE 时钟),满足外部设备的时钟同步需求。
1453