🛠 Zephyr RTOS sur la STM32F4DISCOVERY : west build et west flash
Objetivo
Montar un flujo de desarrollo profesional en la STM32F4DISCOVERY con Zephyr RTOS, que soporta oficialmente la placa bajo el nombre stm32f4_disco. Vas a compilar el ejemplo blinky, flashearlo mediante el ST-LINK/V2-A integrado y comprender por qué la consola serie no funciona por defecto.
Material
- 1 placa STM32F4DISCOVERY + cable micro-USB de datos (puerto ST-LINK)
- PC con Linux, Windows o macOS con la herramienta
westinstalada (documentación «Getting Started» de Zephyr) y STM32CubeProgrammer (o OpenOCD)
Compilación y flasheo
# Une fois l'espace de travail Zephyr installé (west init / west update) :
west build -b stm32f4_disco samples/basic/blinky
west flash
El runner por defecto es STM32CubeProgrammer, que se comunica con el ST-LINK/V2-A de la placa. Alternativas documentadas: west flash --runner openocd (OpenOCD proporciona un archivo de configuración de placa listo para usar, stm32f4discovery.cfg, en SWD con srst_only) o --runner jlink.
El código
/* blinky — build: west build -b stm32f4_disco samples/basic/blinky */
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
#define LED_NODE DT_ALIAS(led0)
int main(void)
{
const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED_NODE, gpios);
gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
while (1) {
gpio_pin_toggle_dt(&led);
k_msleep(500);
}
return 0;
}
Zephyr utiliza el Device Tree: DT_ALIAS(led0) designa el LED de usuario definido en la descripción de la placa, no un número de pin codificado a mano. Los cuatro LED físicos son LD4 (verde, PD12), LD3 (naranja, PD13), LD5 (rojo, PD14) y LD6 (azul, PD15) — la placa cuenta con ocho en total incluyendo LD1 (USB), LD2 (alimentación 3,3 V) y LD7/LD8 (VBUS/sobretensión OTG).
La consola: la trampa a conocer
Los ajustes serie por defecto de Zephyr son 115200 8N1, pero la documentación de la placa advierte: el puerto serie virtual del ST-LINK no está conectado al puerto serie del chip. Para salida de consola, prevé un cable serie externo en los pines UART2, PA2/PA3. Sin esto, printk se pierde en el vacío — es el punto de confusión n.º 1 de los principiantes con esta placa.
Verificación esperada
Tras west flash, el LED parpadea a 1 Hz (500 ms ON / 500 ms OFF) y el comando muestra Halting target CPU... seguido de Successfully programmed. La placa funciona a 168 MHz (reloj del sistema configurado desde el cristal HSE de 8 MHz mediante la configuración de la placa).
Errores frecuentes
- Escribir
-b stm32f4discoveryo-b disco_f407vg: el nombre exacto en Zephyr esstm32f4_disco. - Conectar el cable al puerto micro-USB OTG esperando un flasheo: la depuración pasa por el puerto del ST-LINK/V2-A.
- Buscar la consola en el puerto serie virtual del ST-LINK: no está cableado en las placas de serie (ver arriba).
- Olvidar las reglas udev/permisos USB en Linux para el ST-LINK antes del primer
west flash.
Otros tutoriales para esta placa
- Premier téléversement sur la STM32F4DISCOVERY avec l'Arduino STM32duino
- MicroPython sur la STM32F4DISCOVERY : REPL interactif et pilotage des LED
- STM32Cube HAL et BSP officiel : LED, bouton et accéléromètre avec détection automatique
- Lecture audio sur le codec CS43L22 : I2S, classe D et les limitations du BSP
- USB OTG FS sur le port micro-AB : se faire passer pour un périphérique classe CDC
- Acquérir le micro PDM MP45DT02 : I2S2, filtre PDM-vers-PCM et contraintes de sortie