🛠 MicroPython sur la STM32F4DISCOVERY : REPL interactif et pilotage des LED
Objetivo
Transformar la STM32F4DISCOVERY en un intérprete Python interactivo gracias al puerto oficial STM32F4DISC de MicroPython. El REPL pasa por el USB (CDC serie sobre el OTG FS, activado por MICROPY_HW_USB_FS en la configuración de la placa): a diferencia del modo Arduino, aquí el puerto serie USB funciona inmediatamente, sin cable externo. La configuración del puerto también activa el DAC, el generador de números aleatorios por hardware y los servos.
Material
- 1 placa STM32F4DISCOVERY + cable micro-USB de datos
- Esta vez, conecte el cable al conector micro-AB USB OTG FS (pines PA11/PA12): es el que hace aparecer el REPL
- Herramienta de flasheo: STM32CubeProgrammer o ST-LINK Utility a través del segundo puerto (ST-LINK/V2-A)
Instalación
- Obtenga el firmware
STM32F4DISC(builds publicados o compilación enports/stm32conmake), fuente oficial:ports/stm32/boards/STM32F4DISCdel repositorio micropython. - Fláshelo en la memoria flash de 1024 Ko del STM32F407VGT6 a través del ST-LINK integrado.
- Vuelva a conectar al puerto OTG: aparece un puerto serie USB; ábralo a 115200 baudios (Thonny, mpremote, picocom...).
Código completo
# Dans le REPL (Ctrl-D puis coller) ou dans un fichier main.py :
from machine import Pin
import time
# Broche verifiee dans ports/stm32/boards/STM32F4DISC/mpconfigboard.h
leds = [Pin('PD12', Pin.OUT), # verte
Pin('PD13', Pin.OUT), # orange
Pin('PD14', Pin.OUT), # rouge
Pin('PD15', Pin.OUT)] # bleue
user = Pin('PA0', Pin.IN) # bouton USER, actif a l'etat haut
while True:
for led in leds:
led.on; time.sleep_ms(120); led.off
print("btn:", user.value)
Dos particularidades de hardware a tener en cuenta desde el principio
- PA0 está compartido: el botón USER ocupa el mismo pin que UART4 TX/CTS y la función Wake-Up. MicroPython documenta la eliminación de la resistencia de superficie SB20 (parte inferior) para liberar PA0 si necesita usar UART4.
- PC7 está conectado a la entrada MCLK del códec de audio CS43L22: usarlo como salida UART solo tiene sentido si el códec está totalmente deshabilitado (comentario del puerto MicroPython).
Verificación esperada
MicroPython v... on ...; STM32F407 with STM32F407VG se muestra al conectar el puerto OTG. El programa hace parpadear los cuatro LED y muestra btn: 0 o btn: 1 según el estado del botón. Escriba Ctrl-C para interrumpir el bucle y volver al prompt.
Errores frecuentes
- Buscar el REPL en el puerto ST-LINK: el CDC serie de MicroPython sale por el puerto OTG FS (micro-AB), el otro conector.
- Escribir
Pin(12)pensando en PD12: el puerto STM32 de MicroPython acepta nombres de pines literales (Pin('PD12')), más explícitos que los números de Arduino. - Codificar un bucle en tiempo real en Python puro: el intérprete se ejecuta en un M4F a 168 MHz, es cómodo pero no está adaptado al control de audio estricto — para eso, vea el tutorial CS43L22 en C.
- Olvidar que la placa está oficialmente obsoleta (etiquetada como tal por Wikipedia): MicroPython, Zephyr, CubeF4 y el core Arduino aún la soportan, pero ya no hay nuevo hardware en producción.
Otros tutoriales para esta placa
- Premier téléversement sur la STM32F4DISCOVERY avec l'Arduino STM32duino
- Zephyr RTOS sur la STM32F4DISCOVERY : west build et west flash
- 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