扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

STM32N6 MCO2 时钟输出配置指南:解决无输出问题的核心步骤

2025/12/30
1453
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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] 等管脚,默认状态下:

  • VDDIO4 供电域未被启用(需通过 OTP 配置解锁);
  • 寄存器PWR_SVMCR1VDDIO4SV位(Bit8)未置 1,导致相关 I/O 管脚逻辑与电气隔离,无法正常工作。

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 寄存器:

  1. 连接开发板与 PC,打开 STM32CubeProgrammer;
  2. 进入 OTP 配置界面,找到 OTP124(HCONF1);
  3. 将 Bit14(HSLV_VDDIO4)置 1,保存 OTP 配置(OTP 写入后不可修改,需谨慎操作);
  4. 重启 MCU,使 OTP 配置生效。

3.3 代码配置:使能 VDDIO4 并配置 MCO2

main.c中添加 VDDIO4 使能代码,再调用 MCO2 配置 API,完整代码片段如下:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/
  HAL_Init();

  /* USER CODE BEGIN Init */
  // 1. 使能VDDIO4供电域(必须在MCO2配置前执行)
  HAL_PWREx_EnableVddIO4();
  
  // 2. 配置MCO2输出:HSE源,1分频(24MHz输出)
  HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_HSE, RCC_MCODIV_1);
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* Infinite loop */
  while (1)
  {
    /* USER CODE BEGIN WHILE */
    /* USER CODE END WHILE */
  }
}

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. 注意事项与常见误区

  1. 供电一致性:VDDIO4 需提供稳定供电(与 VDDIO 主供电电压匹配),否则会导致时钟波形失真或无输出;
  2. OTP 配置不可逆:OTP124 的 HSLV_VDDIO4 位写入后无法修改,配置前需确认硬件设计中 VDDIO4 供电已就绪;
  3. 时钟源优先级:若配置 MCO2 源为 PLL,需确保 PLL 已锁定(通过HAL_RCC_GetState()检查),避免因时钟源未就绪导致无输出;
  4. MCO1 与 MCO2 差异:MCO1(PA8)归属主供电域(VDDIO),无需额外 OTP 配置,而 MCO2 依赖 VDDIO4,这是两者配置的核心区别。

STM32N6 MCO2 无输出的核心原因是VDDIO4 供电域未启用,解决问题的关键步骤可概括为:

  1. 确认 MCO2 管脚(PC9 AF0)配置正确;
  2. 通过 OTP 启用 HSLV_VDDIO4(OTP124 HCONF1 Bit14);
  3. 代码中调用HAL_PWREx_EnableVddIO4()激活 VDDIO4;
  4. 调用HAL_RCC_MCOConfig配置时钟源与分频。

遵循以上步骤,即可实现 MCO2 的稳定时钟输出(如 24MHz HSE 时钟),满足外部设备的时钟同步需求。

相关推荐