🛠 USB OTG FS sur le port micro-AB : se faire passer pour un périphérique classe CDC

STM32F4DISCOVERY (kit Discovery STM32F407VGT6) · intermediaire · Schéma : les deux mondes USB de la STM32F4DISCOVERY — à gauche le port ST-LINK/V2-A (programmation), à droite le connecteur micro-AB OTG FS (PA11/PA12, VBUS PA9, ID PA10) reliant la carte à un PC qui voit un port série CDC ; les LED LD7/LD8 signalent VBUS et surintensité.

Objectif

La STM32F4DISCOVERY possède deux connecteurs USB indépendants : celui du débogueur ST-LINK/V2-A (qui programme la carte) et un vrai port USB OTG FS micro-AB câblé sur le contrôleur USB 2.0 OTG FS du STM32F407 (phy intégré). Ce tutoriel configure ce second port en périphérique CDC — un port série USB qui, lui, fonctionne toujours, contrairement au VCP du ST-LINK non câblé sur les cartes stock.

Brochage exact

Matériel

Démarche

  1. Dans l'exemple CDC de CubeF4 pour STM32F4-Discovery, régénérez ou écrivez : horloge 168 MHz, USB FS sur PA11/PA12, pull-up sur la ligne DP piloté par la pile USB.
  2. La pile USB Device (module STM32_USB_DEVICE_Library) fournit USBD_CDC : vous implémentez la réception dans le callback de la classe et envoyez avec CDC_Transmit_FS.
  3. Flash par le port ST-LINK (jamais par l'OTG sur une carte vierge), puis branchez le câble sur l'OTG : le PC énumère un périphérique série CDC sans pilote.

Squelette applicatif

/* après generation CDC sample CubeF4 — USB_DEVICE CDC */
USBD_HandleTypeDef husb;
USBD_Init(&husb, FS_PAD_VBUS, USB_OTG_FS_CORE_ID);
USBD_RegisterClass(&husb, USBD_CDC_CLASS);
USBD_CDC_RegisterInterface(&husb, &USBD_Interface_fops_FS);
USBD_Start(&husb);

/* Boucle principale : echo vers le terminal PC (port CDC, pas ST-Link) */
int main(void) {
  SystemClock_Config;              /* 48 MHz USB extraits de la PLL */
  /* ... USBD init ci-dessus ... */
  while (1) {
    if (rxReady) { CDC_Transmit_FS(rxData, rxLen); rxReady = 0; }
  }
}

Points critiques

Vérification attendue

Le PC voit un périphérique série CDC (nommé selon les descripteurs USB du firmware) ; l'écho fonctionne à 115200 et plus. La LED LD7 s'allume quand VBUS est présent sur le port OTG.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels