🛠 Zephyr RTOS sur le Nucleo STM32H743ZI : west build, flash et le piège des 96 MHz
Qué vas a construir
Zephyr trata nucleo_h743zi como una placa de primera categoría con su propia documentación de placa, y el flujo es el más limpio de cualquier pila de MCU en este hardware: west build, west flash, listo. Este tutorial compila y flashea el blinky de Zephyr, y luego profundiza en el hecho que afecta a todos: Zephyr arranca esta placa a 96 MHz por defecto, no a 480 MHz.
Requisitos previos
- Un SDK de Zephyr + espacio de trabajo
westfuncional (consulta la guía de inicio de Zephyr) - Nucleo-144 STM32H743ZI + cable USB (el ST-LINK/V2-1 integrado es tu depurador)
Paso 1 — Compilar y flashear
$ west build -b nucleo_h743zi samples/basic/blinky
$ west flash # STM32CubeProgrammer runner (default)
# alternatives verified by the board doc:
$ west flash --runner openocd
$ west flash --runner jlink
$ west flash --runner pyocd
Paso 2 — La aplicación
/* blinky.c — LD0 alias maps to the board's user LED in the nucleo_h743zi tree. */
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
static const struct gpio_dt_spec led =
GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios);
int main(void)
{
if (!gpio_is_ready_dt(&led)) {
return -1;
}
gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
while (1) {
gpio_pin_toggle_dt(&led); /* LD1 = PB0 in the default mapping */
k_msleep(500);
}
return 0;
}
Paso 3 — Consola
La consola por defecto de Zephyr es UART3 (PD8/PD9) en el puerto COM virtual del ST-LINK a 115200 8N1 — la salida de hello_world aparece allí sin editar el árbol de dispositivos. El mapeo por defecto también te proporciona el botón USER PC13, LD1 PB0, LD2 PE1, LD3 PB14, I2C PB8/PB9, ADC1_INP15 PA3 y DAC1_OUT1 PA4.
Paso 4 — La trampa de los 96 MHz
Zephyr arranca la placa a un PLL de 96 MHz (desde el HSE de 8 MHz) por defecto, mientras que el núcleo STM32duino ejecuta el mismo silicio a 480 MHz SYSCLK. Consecuencias:
- Nunca compares una prueba de rendimiento de Zephyr con una de Arduino sin comprobar primero los relojes.
- Alcanzar los 480 MHz requiere que el regulador esté en escala de voltaje 0 y una latencia de flash correcta — una reestructuración del árbol de relojes, no un cambio de una línea.
- La serie fue anunciada a 400 MHz en octubre de 2016 y ahora está clasificada hasta 480 MHz; las cadenas de herramientas obsoletas pueden limitarte a 400 MHz incluso después de la reestructuración.
Resultado esperado
LD1 (PB0) parpadea cada 500 ms después de que west flash informe éxito; hello_world imprime en el VCP a 115200.
Errores comunes
- La documentación de la placa incluye una notificación explícita de obsolescencia: ST ha discontinuado el H743ZI y apunta al NUCLEO-H753ZI — el soporte de la placa en la rama principal continúa, pero los nuevos diseños deberían dirigirse al H753ZI.
- Flashear con el ejecutor incorrecto: si STM32CubeProgrammer no está instalado, usa
--runner openocd(o jlink/pyocd) en lugar del predeterminado. - Juzgar Zephyr como "lento": estás midiendo una configuración de arranque de 96 MHz, no lo que el silicio de 480 MHz puede hacer.
Otros tutoriales para esta placa
- Premiers pas sur le Nucleo-144 STM32H743ZI : core STM32duino, ST-LINK et premier Blink
- GPIO, ADC 16 bits et DAC sur le Nucleo STM32H743ZI : bouton, LED et potentiomètre
- MicroPython sur le Nucleo STM32H743ZI : le REPL 480 MHz via le port série ST-LINK
- STM32Cube HAL à 480 MHz sur le STM32H743ZI : VOS0, latence flash et HSE bypass
- FreeRTOS sur le Nucleo STM32H743ZI : le projet officiel CubeH7, tâches et file d'attente
- Serveur web sur l'Ethernet du STM32H743ZI : démo LwIP officielle, RMII et errata