🛠 STM32Cube HAL à 480 MHz sur le STM32H743ZI : VOS0, latence flash et HSE bypass

STM32H7 Nucleo-144 (modèle phare : NUCLEO-H743ZI) · intermediaire · Schéma : IMG-stm32h7-nucleo-intermediaire-2-stm32h743zi-cube-hal-480mhz.svg — chaîne d'horloge du STM32H743ZI : HSE 8 MHz (bypass) → PLL1 → SYSCLK 480 MHz, régulateur en échelle VOS0 et latence flash FLASH_LATENCY_4 annotés, Nucleo-144 à côté avec LD1 (PB0), flat vector style, étiquettes en français, fond blanc.

Qué vas a construir

Un blink bare-metal con el HAL oficial de STM32CubeH7 (etiqueta de paquete v1.13.0) — y, más importante aún, una comprensión correcta de lo que se necesita para ejecutar este MCU a su frecuencia nominal de 480 MHz: regulador en escala de voltaje 0, latencia de flash correcta y un HSE que es un reloj de bypass, no un cristal.

Paso 1 — Obtener el paquete de firmware

$ git clone --recursive https://github.com/STMicroelectronics/STM32CubeH7.git

El README advierte: clona con --recursive (submódulos). El middleware como TouchGFX/STemWin/STM32_Audio necesita el paquete completo de st.com con consentimiento explícito, pero los controladores HAL/LL, BSP y los ejemplos por periférico están todos en el árbol de git, bajo Projects/NUCLEO-H743ZI/Examples/{GPIO,ADC,DAC,SPI,I2C,UART,TIM,HRTIM,RNG,...}.

Paso 2 — El blink (estilo del proyecto oficial Examples/GPIO)

/* main.c - blink LD1 (PB0) with STM32CubeH7 HAL.
 * Clocking: generate SystemClock_Config from CubeMX for SYSCLK 480 MHz.
 * 480 MHz requires PWR regulator VOLTAGE_SCALE0 and FLASH_LATENCY_4 -
 * the STM32duino variant does exactly this. */
#include "stm32h7xx_hal.h"

static GPIO_InitTypeDef led = {0};

void SystemClock_Config(void);   /* generated by CubeMX (480 MHz, VOS0) */

int main(void)
{
  HAL_Init;                    /* systick @1 ms, NVIC defaults */
  SystemClock_Config;          /* PLL1 from 8 MHz HSE -> 480 MHz SYSCLK */

  __HAL_RCC_GPIOB_CLK_ENABLE;
  led.Pin   = GPIO_PIN_0;        /* LD1 on PB0 */
  led.Mode  = GPIO_MODE_OUTPUT_PP;
  led.Pull  = GPIO_NOPULL;
  led.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &led);

  while (1) {
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
    HAL_Delay(250);              /* 2 Hz blink */
  }
}

Paso 3 — Lista de verificación del reloj para 480 MHz

  1. El HSE es un reloj de bypass externo, no un cristal: la variante STM32duino configura RCC_HSE_BYPASS con 8 MHz suministrados al MCU — cortar los jumpers del ST-LINK puede matar la fuente de reloj en algunas configuraciones.
  2. Escala de voltaje: 480 MHz requiere que el regulador PWR esté en VOLTAGE_SCALE_0; los proyectos de CubeMX que mantienen una escala inferior limitan silenciosamente la frecuencia de reloj.
  3. Latencia de Flash: FLASH_LATENCY_4 a 480 MHz (el SystemClock_Config de STM32duino usa PLLM=1, PLLN=120, PLLR=2 desde el HSE de 8 MHz, con AHB en HCLK/2 = 240 MHz).
  4. Confusión entre 400 y 480 MHz: la serie H7 fue anunciada a 400 MHz en octubre de 2016 y ahora está clasificada hasta 480 MHz — las hojas de datos antiguas, las notas de errata y las cadenas de herramientas obsoletas pueden seguir limitando la frecuencia a 400 MHz.

Resultado esperado

LD1 parpadea a 2 Hz; una lectura de los registros RCC mediante un depurador confirma SYSCLK a 480 MHz, y HAL_GetTick mantiene un intervalo limpio de 1 ms.

Errores comunes

> NO VERIFICADO: que el reloj HSE de 8 MHz sea generado por el ST-LINK integrado en la placa a través del jumper SB16 — detalle del esquema de la placa no presente en las fuentes obtenidas.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales