🛠 Dompter l'USB natif de la Blue Pill : CDC, DFU et la résistance rebelle
Un vrai périphérique USB, pas un pont série
L'un des grands atouts du STM32F103 à ce prix : un périphérique USB full-speed intégré à la puce, sur PA11 (D−) et PA12 (D+). Contrairement à un Arduino Uno et son ATmega16U2, ici le microcontrôleur lui-même parle USB : CDC (port série virtuel), HID (clavier/souris), MIDI, DFU… sans silicium supplémentaire. Attention : l'USB est uniquement device (la carte ne pilote pas de clé USB) et le F103 n'a ni WiFi ni Bluetooth.
Le défaut matériel célèbre : le pull-up de D+
Pour s'enumer sur un bus USB full-speed, la ligne D+ doit être ramenée au niveau haut via une résistance de 1,5 kΩ vers 3,3 V. Or stm32-base documente un défaut de fabrication récurrent : « au lieu d'un 1,5 kΩ, elle porte soit une 10 kΩ, soit une 4,7 kΩ » — d'où une énumération USB aléatoire (périphérique reconnu puis perdu, ou jamais détecté). Le remède : remplacer la résistance par une 1,5 kΩ. Ce même pull-up est critique pour le bootloader STM32duino, dont l'astuce de reset USB (mettre brièvement PA12 à la masse pour renuméroter) « repose sur PA12 ayant une résistance de pull-up d'environ 1,5 kΩ ».
Le plan en trois étapes
- Vérifier/remplacer la résistance de pull-up D+ (composant près du connecteur USB ; 1,5 kΩ).
- Installer le bootloader communautaire STM32duino (dérivé de maple-bootloader) via SWD ou le bootloader ROM série. Il occupe 8 Ko de flash (la révision « boot20 » ; l'ancien bootloader maple en réservait 20 Ko flash / 3 Ko RAM) et expose le téléversement DFU et série par USB.
- Téléverser en DFU :
dfu-util -a 1 -D sketch.bin -s 0x8002000:leave— l'offset 0x8002000 correspond au décalage de 8 Ko laissé par le bootloader.
Précautions avant d'ouvrir le capot USB
- Gardez un moyen de re-flash de secours (ST-Link sur le connecteur SWD, ou série sur USART1) : se couper l'accès en modifiant le bootloader est le moyen le plus rapide de brique apparente.
- Le bootloader communautaire doit être compilé avec GCC 4.8 ; avec 4.9 ou plus récent, « les registres matériels sont lus incorrectement et le bootloader ne fonctionne pas » — utile si vous voulez le compiler vous-même.
- Pour du HID/MIDI sur mesure sans bootloader, regardez les exemples USB CDC-ACM de libopencm3-examples, qui tournent sur des cartes classe Maple/Blue Pill.
Autres tutoriels pour cette carte
- Découvrir la Blue Pill : que trouve-t-on dans la boîte ?
- Premier programme Arduino sur la Blue Pill (core officiel stm32duino)
- Alimenter et flasher la Blue Pill : BOOT0, port série, ST-Link et DFU
- Série, ADC et chasse aux contrefaçons : diagnostiquer sa Blue Pill
- Passer au niveau supérieur : STM32CubeIDE, HAL et LL sur F103
- Firmware libre sur Blue Pill avec libopencm3 et OpenOCD