🛠 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é.

Objetivo

La STM32F4DISCOVERY posee dos conectores USB independientes: el del depurador ST-LINK/V2-A (que programa la placa) y un verdadero puerto USB OTG FS micro-AB conectado al controlador USB 2.0 OTG FS del STM32F407 (phy integrado). Este tutorial configura este segundo puerto como dispositivo CDC — un puerto serie USB que, a diferencia del VCP del ST-LINK no conectado en las placas estándar, siempre funciona.

Pinado exacto

Material

Procedimiento

  1. En el ejemplo CDC de CubeF4 para STM32F4-Discovery, regenere o escriba: reloj de 168 MHz, USB FS en PA11/PA12, pull-up en la línea DP controlado por la pila USB.
  2. La pila USB Device (módulo STM32_USB_DEVICE_Library) proporciona USBD_CDC: usted implementa la recepción en el callback de la clase y envía con CDC_Transmit_FS.
  3. Flashee a través del puerto ST-LINK (nunca por el OTG en una placa virgen), luego conecte el cable al OTG: el PC enumera un dispositivo serie CDC sin necesidad de controladores.

Esqueleto de la aplicación

/* apres 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; }
  }
}

Puntos críticos

Verificación esperada

El PC ve un dispositivo serie CDC (nombrado según los descriptores USB del firmware); el eco funciona a 115200 y más. El LED LD7 se enciende cuando hay VBUS presente en el puerto OTG.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales