🛠 Dompter l'USB natif de la Blue Pill : CDC, DFU et la résistance rebelle

STM32F103 "Blue Pill" (STM32F103C8T6) · intermediaire · Le F103 possède un vrai périphérique USB full-speed sur PA11/PA12. Comment l'exploiter, et pourquoi l'énumération échoue sur beaucoup de cartes.

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

  1. Vérifier/remplacer la résistance de pull-up D+ (composant près du connecteur USB ; 1,5 kΩ).
  2. 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.
  3. 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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels