🛠 Premier téléversement sur la STM32F4DISCOVERY avec l'Arduino STM32duino
Objectif
Faire vivre la STM32F4DISCOVERY (MCU STM32F407VGT6 : Cortex-M4F à 168 MHz, 1024 Ko de flash, 192 Ko de RAM dont 64 Ko en mémoire couplée au cœur CCM, boîtier LQFP100) avec l'écosystème Arduino. À la fin du tutoriel, un balayage de LED s'exécute sur la carte et le bouton USER réagit — sans aucun câblage externe.
Matériel
- 1 carte STM32F4DISCOVERY + câble micro-USB de DONNÉES
- Le port micro-USB à utiliser est celui de l'ST-LINK/V2-A intégré : c'est lui qui programme la carte, aucun outil externe n'est nécessaire
- PC avec l'Arduino IDE
Installation
- Dans l'Arduino IDE, ouvrez le Gestionnaire de cartes et installez « STM32 STM32 boards by STMicroelectronics » (Arduino_Core_STM32).
- Sélectionnez la famille Discovery, puis la carte « STM32F407G-DISC1 » (constante
DISCO_F407VG, varianteSTM32F4xx/F407V(E-G)T_F417V(E-G)T, cortex-m4 avec FPU matérielfpv4-sp-d16, 1 Mo de flash / 128 Ko de données). - Téléversez : la programmation passe par le ST-LINK/V2-A embarqué (SWD), il n'y a pas de bootloader DFU côté utilisateur sur ce port.
Le piège n°1 : le port série
La documentation Zephyr est explicite : « ST-Link Virtual Com Port is not wired to chip serial port » sur les cartes stock. Le variant Arduino, lui, étiquette USART2 (PA2/PA3) « Connected to ST-Link » — contradiction documentée selon les révisions (jumpers de la zone CN3/CN5 à vérifier, absents sur certains). Règle pratique : testez Serial, et si rien ne sort, branchez un câble série externe sur PA2/PA3 (UART2) à 115200 8N1.
Code complet
// Balayage des 4 LED + bouton USER — broches du variant officiel DISCO_F407VG
const int ledPins[4] = {LED_GREEN, LED_ORANGE, LED_RED, LED_BLUE}; // PD12, PD13, PD14, PD15
void setup {
for (int i = 0; i < 4; i++) pinMode(ledPins[i], OUTPUT);
pinMode(USER_BTN, INPUT); // PA0, pull-down externe sur la carte
Serial.begin(115200); // USART2 PA2/PA3 — voir le piège ci-dessus
Serial.println("STM32F4DISCOVERY ready");
}
void loop {
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], HIGH);
delay(150);
digitalWrite(ledPins[i], LOW);
}
if (digitalRead(USER_BTN) == HIGH) { // actif à l'état HAUT sur cette carte
Serial.println("USER pressed");
}
}
Vérification attendue
Les LED verte, orange, rouge puis bleue (broches PD12 à PD15) s'allument en séquence dès la mise sous tension. Le bouton USER (PA0, partagé avec la fonction WKUP du MCU) est lu à l'état haut quand on l'appuie. Si la série reste muette, ce n'est pas votre code : reportez-vous au câble externe sur UART2.
Erreurs fréquentes
- Programmer via le port micro-USB OTG au lieu du port ST-LINK : ce sont deux connecteurs distincts, seul le second programme la carte sur une carte stock.
- Câble micro-USB de charge seule : le ST-LINK est invisible.
- Compter sur
Serialsans vérifier le câblage VCP de sa révision de carte (Problème n°1 documenté par Zephyr). - Oublier que les broches sont en 3,3 V (VDD 1,8 à 3,6 V, la plupart des broches tolérantes 5 V au sens du datasheet F407) : pas de 5 V direct sur une broche sans vérifier.
- Confondre avec les kits F401/F411 Discovery : l'IMU 6 axes LSM330 est sur ces cartes-là, pas sur la STM32F4DISCOVERY d'origine.
Autres tutoriels pour cette carte
- Zephyr RTOS sur la STM32F4DISCOVERY : west build et west flash
- 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