🛠 MicroPython sur la STM32F4DISCOVERY : REPL interactif et pilotage des LED
Objectif
Transformer la STM32F4DISCOVERY en interpréteur Python interactif grâce au port officiel STM32F4DISC de MicroPython. Le REPL passe par l'USB (CDC série sur l'OTG FS, activé par MICROPY_HW_USB_FS dans la config de la carte) : contrairement au mode Arduino, ici le port série USB fonctionne immédiatement, sans câble externe. La configuration du port active aussi le DAC, le générateur de nombres aléatoires matériel et les servos.
Matériel
- 1 carte STM32F4DISCOVERY + câble micro-USB de données
- Cette fois, branchez le câble sur le connecteur micro-AB USB OTG FS (broches PA11/PA12) : c'est lui qui fait apparaître le REPL
- Outil de flash : STM32CubeProgrammer ou ST-LINK Utility via le second port (ST-LINK/V2-A)
Installation
- Récupérez le firmware
STM32F4DISC(builds publiés ou compilation dansports/stm32avecmake), source officielle :ports/stm32/boards/STM32F4DISCdu dépôt micropython. - Flashez-le dans la flash de 1024 Ko du STM32F407VGT6 via le ST-LINK embarqué.
- Rebranchez sur le port OTG : un port série USB apparaît ; ouvrez-le à 115200 bauds (Thonny, mpremote, picocom...).
Code complet
# Dans le REPL (Ctrl-D puis coller) ou dans un fichier main.py :
from machine import Pin
import time
# Broche vérifiée 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'état haut
while True:
for led in leds:
led.on; time.sleep_ms(120); led.off
print("btn:", user.value)
Deux particularités matérielles à retenir dès le début
- PA0 est partagé : le bouton USER occupe la même broche que UART4 TX/CTS et la fonction Wake-Up. MicroPython documente la suppression de la résistance de surface SB20 (face inférieure) pour libérer PA0 si vous avez besoin de l'UART4.
- PC7 est relié à l'entrée MCLK du codec audio CS43L22 : l'utiliser en sortie UART n'a de sens que si le codec est totalement inutilisé (commentaire du port MicroPython).
Vérification attendue
MicroPython v... on ...; STM32F407 with STM32F407VG s'affiche au branchement du port OTG. Le programme fait courir les quatre LED et affiche btn: 0 ou btn: 1 selon l'état du bouton. Tapez Ctrl-C pour interrompre la boucle et revenir au prompt.
Erreurs fréquentes
- Chercher le REPL sur le port ST-LINK : le CDC série de MicroPython sort sur le port OTG FS (micro-AB), l'autre connecteur.
- Écrire
Pin(12)en pensant à PD12 : le port STM32 de MicroPython accepte les noms de broches littéraux (Pin('PD12')), plus explicites que les numéros Arduino. - Coder une boucle temps réel en pur Python : l'interpréteur tourne sur un M4F à 168 MHz, c'est confortable mais pas adapté au pilotage audio dur — pour cela, voyez le tutoriel CS43L22 en C.
- Oublier que la carte est officiellement obsolète (étiquetée telle quelle par Wikipédia) : MicroPython, Zephyr, CubeF4 et le core Arduino la supportent toujours, mais il n'y a plus de nouveau matériel en production.
Autres tutoriels pour cette carte
- 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