🛠 Zephyr RTOS sur la STM32F4DISCOVERY : west build et west flash
Objectif
Monter un flux de développement professionnel sur la STM32F4DISCOVERY avec Zephyr RTOS, qui supporte officiellement la carte sous le nom stm32f4_disco. Vous allez compiler l'exemple blinky, le flasher par le ST-LINK/V2-A embarqué, et comprendre pourquoi la console série ne marche pas par défaut.
Matériel
- 1 carte STM32F4DISCOVERY + câble micro-USB de données (port ST-LINK)
- PC Linux, Windows ou macOS avec l'outil
westinstallé (documentation « Getting Started » de Zephyr) et STM32CubeProgrammer (ou OpenOCD)
Compilation et flash
# Une fois l'espace de travail Zephyr installé (west init / west update) :
west build -b stm32f4_disco samples/basic/blinky
west flash
Le runner par défaut est STM32CubeProgrammer, qui parle au ST-LINK/V2-A de la carte. Alternatives documentées : west flash --runner openocd (OpenOCD fournit un fichier de carte prêt à l'emploi, stm32f4discovery.cfg, en SWD avec srst_only) ou --runner jlink.
Le code
/* 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 utilise le Device Tree : DT_ALIAS(led0) désigne la LED utilisateur définie dans la description de la carte, pas un numéro de broche codé en dur. Les quatre LED physiques sont LD4 (verte, PD12), LD3 (orange, PD13), LD5 (rouge, PD14) et LD6 (bleue, PD15) — la carte en compte huit au total avec LD1 (USB), LD2 (alimentation 3,3 V) et LD7/LD8 (VBUS/surtension OTG).
La console : le piège à connaître
Les réglages série par défaut de Zephyr sont 115200 8N1, mais la documentation de la carte avertit : le port série virtuel du ST-LINK n'est pas relié au port série de la puce. Pour de la sortie console, prévoyez un câble série externe sur les broches UART2, PA2/PA3. Sans cela, printk part dans le vide — c'est le point de confusion n°1 des débutants sur cette carte.
Vérification attendue
Après west flash, la LED clignote à 1 Hz (500 ms ON / 500 ms OFF) et la commande affiche Halting target CPU... puis Successfully programmed. La carte tourne à 168 MHz (horloge système configurée depuis le quartz HSE 8 MHz par la configuration de la carte).
Erreurs fréquentes
- Écrire
-b stm32f4discoveryou-b disco_f407vg: le nom Zephyr exact eststm32f4_disco. - Brancher le câble sur le port micro-USB OTG en attendant un flash : le debug passe par le port du ST-LINK/V2-A.
- Chercher la console sur le port série virtuel du ST-LINK : non câblé sur les cartes stock (voir ci-dessus).
- Oublier les règles udev/permissions USB sous Linux pour le ST-LINK avant le premier
west flash.
Autres tutoriels pour cette carte
- 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