🛠 Zephyr RTOS sur la Nucleo-F401RE : west build, devicetree et west flash
Objetivos
Compilar y flashear Zephyr RTOS en la placa Nucleo-F401RE. La placa es un objetivo nativo de Zephyr (nucleo_f401re) mantenido en la rama main, y la documentación oficial de la placa explica cómo ejecutar west build -b nucleo_f401re samples/hello_world + west flash, con la salida en /dev/ttyACM0. Dado que el LED proviene del devicetree de la placa, el mismo código de parpadeo funciona en cualquier placa Nucleo.
Hardware
- 1× Nucleo-F401RE + cable micro-USB
- PC con el SDK de Zephyr y la herramienta de espacio de trabajo
westinstalados (guía de inicio de Zephyr)
Pasos
- Crea un espacio de trabajo de Zephyr e inicializa la rama
main(el YAML de la placa declara 96 KiB de RAM / 512 KiB de flash). - Compila el ejemplo:
west build -b nucleo_f401re samples/hello_world - Flashea:
west flash— el ejecutor por defecto es el ejecutor de STM32CubeProgrammer; los ejecutores de OpenOCD y J-Link también funcionan, todos controlando el ST-LINK integrado a través de SWD. - Abre
/dev/ttyACM0(Linux) o el puerto COM del ST-LINK (Windows) a 115200 baudios.
Código (parpadeo controlado por devicetree)
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
/* led0 = LD2 = PA5 comes from the board DTS, not from this file */
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);
k_msleep(500); /* RTOS sleep, not busy-wait */
}
return 0;
}
Compílalo con west build -b nucleo_f401re samples/basic/blinky.
Por qué Zephyr en esta placa
- La documentación de la placa enumera el conjunto completo de periféricos: ADC de 12 bits (16 canales), RTC, 1 temporizador avanzado + 7 temporizadores de propósito general, 2 watchdogs, 3× USART/UART, 3× I2C, 4× SPI, SDIO, USB OTG FS, DMA, I2S.
- El YAML de la placa incluye asignaciones GPIO/I2C/SPI compatibles con Arduino (
arduino_gpio,arduino_i2c,arduino_spi), por lo que el código estilo shield puede moverse entre el núcleo de Arduino y Zephyr. k_msleepcede el control al kernel — tu parpadeo coexiste con los controladores y las hebras en lugar de acaparar la CPU.
Resultado esperado
hello_world imprime Hello World! nucleo_f401re en la consola serie; blinky pulsa LD2 cada 500 ms. Mismo código, misma línea de comandos, cualquier placa Nucleo-64 — solo cambia el objetivo -b.
Errores comunes
- Dejar CubeProgrammer o un monitor serie abierto durante
west flash: el ST-LINK está ocupado y el ejecutor falla. - Esperar una unidad de bootloader: no hay ninguna — el flasheo se realiza por SWD a través del ST-LINK.
- Seguir tutoriales antiguos de mbed: los servicios en línea de mbed se retiraron en julio de 2026; Zephyr (o la bifurcación Mbed CE) es la vía mantenida.
Otros tutoriales para esta placa
- Prise en main de la Nucleo-F401RE : ST-LINK, LED LD2 et alimentation
- Premier Blink Arduino sur la Nucleo-F401RE avec le core STM32duino
- Console série sur le ST-LINK VCP : printf, ADC 12 bits et piège du USB
- STM32CubeF4 et HAL : blink + UART printf générés pour la Nucleo-F401RE
- ADC 12 bits et PWM sur la Nucleo-F401RE : oversampling, millivolts et LED en fondu
- Bare-metal sur le STM32F401 : clignoter LD2 en écrivant les registres GPIO