🛠 Premier téléversement sur la STM32F4DISCOVERY avec l'Arduino STM32duino
Objetivo
Hacer funcionar la placa STM32F4DISCOVERY (MCU STM32F407VGT6: Cortex-M4F a 168 MHz, 1024 KB de flash, 192 KB de RAM incluyendo 64 KB en memoria acoplada al núcleo CCM, encapsulado LQFP100) con el ecosistema Arduino. Al finalizar el tutorial, se ejecuta un barrido de LED en la placa y el botón USER responde — sin ningún cableado externo.
Material
- 1 placa STM32F4DISCOVERY + cable micro-USB de DATOS
- El puerto micro-USB a utilizar es el del ST-LINK/V2-A integrado: es el que programa la placa, no se necesita ninguna herramienta externa
- PC con el Arduino IDE
Instalación
- En el Arduino IDE, abra el Gestor de placas e instale « STM32 STM32 boards by STMicroelectronics » (Arduino_Core_STM32).
- Seleccione la familia Discovery, luego la placa « STM32F407G-DISC1 » (constante
DISCO_F407VG, varianteSTM32F4xx/F407V(E-G)T_F417V(E-G)T, cortex-m4 con FPU hardwarefpv4-sp-d16, 1 MB de flash / 128 KB de datos). - Cargue el programa: la programación se realiza a través del ST-LINK/V2-A embarcado (SWD), no hay bootloader DFU en el lado del usuario en este puerto.
La trampa n.º 1: el puerto serie
La documentación de Zephyr es explícita: « ST-Link Virtual Com Port is not wired to chip serial port » en las placas de fábrica. La variante de Arduino, en cambio, etiqueta USART2 (PA2/PA3) como « Connected to ST-Link » — contradicción documentada según las revisiones (jumpers de la zona CN3/CN5 a verificar, ausentes en algunas). Regla práctica: pruebe Serial, y si no sale nada, conecte un cable serie externo a PA2/PA3 (UART2) a 115200 8N1.
Código completo
// 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");
}
}
Verificación esperada
Los LED verde, naranja, rojo y luego azul (pines PD12 a PD15) se encienden en secuencia al encender la placa. El botón USER (PA0, compartido con la función WKUP del MCU) se lee en estado alto cuando se pulsa. Si el puerto serie permanece mudo, no es culpa de su código: consulte el cable externo en UART2.
Errores frecuentes
- Programar a través del puerto micro-USB OTG en lugar del puerto ST-LINK: son dos conectores distintos, solo el segundo programa la placa en una placa de fábrica.
- Cable micro-USB solo de carga: el ST-LINK es invisible.
- Confiar en
Serialsin verificar el cableado VCP de la revisión de su placa (Problema n.º 1 documentado por Zephyr). - Olvidar que los pines son de 3,3 V (VDD 1,8 a 3,6 V, la mayoría de los pines toleran 5 V según el datasheet del F407): no aplique 5 V directamente a un pin sin verificar.
- Confundir con los kits F401/F411 Discovery: la IMU de 6 ejes LSM330 está en esas placas, no en la STM32F4DISCOVERY original.
Otros tutoriales para esta placa
- 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