🛠 USB OTG FS et SDIO réels : les périphériques cachés derrière les en-têtes morpho
Objetivos
Comprender las dos "características" más engañosas de la Nucleo-F401RE: el conector micro-USB de la placa no es el USB del MCU, y los periféricos USB 2.0 OTG FS y SDIO reales del MCU solo están disponibles en los conectores ST morpho. Luego, planificar el cableado real para ambos.
La trampa
El conector USB de la placa (micro-B, full-speed) está conectado al adaptador host ST-LINK/V2-1, que se enumera como depurador SWD + puerto COM virtual + dispositivo de almacenamiento masivo USB. Los pines USB 2.0 OTG FS del STM32F401RE están expuestos en los conectores morpho, no enrutados al conector de la placa. Por lo tanto, Serial funciona sin ningún conocimiento de USB — y cualquier sketch que quiera que el propio MCU sea un dispositivo USB necesita cableado externo.
Lo que el silicio realmente tiene (documentación de la placa Zephyr)
USB 2.0 OTG FS (dispositivo/host), SDIO, controlador DMA, 4× SPI, 3× I2C, 3× USART/UART, I2S, ADC de 12 bits con 16 canales, RTC, 1 temporizador avanzado + 7 temporizadores de propósito general, 2 watchdogs.
Pasos — OTG FS en los conectores morpho
- Identificar los pines OTG FS (DM/DP) para el F401RE en los conectores morpho. > NO VERIFICADO: los números exactos de los pines morpho no fueron verificados automáticamente durante la investigación — léalos en UM1760, el manual oficial de la placa (descárguelo desde st.com en un navegador; las descargas mediante scripts están bloqueadas).
- Conectar un conector USB hembra: DM/DP con trazas cortas y resistencias en serie, VBUS desde su propia fuente de 5 V (el VBUS del conector de la placa alimenta el lado del ST-LINK), masas conectadas.
- En CubeMX, habilitar USB_OTG_FS en modo dispositivo (por ejemplo, la clase CDC) y generar:
/* CubeMX-style skeleton: the MCU becomes the USB device */
void MX_USB_DEVICE_Init(void)
{
hpcd_USB_OTG_FS.Instance = USB_OTG_FS; /* pins live on the morpho headers */
HAL_PCD_Init(&hpcd_USB_OTG_FS);
USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC);
USBD_Start(&hUsbDeviceFS);
}
Pasos — SDIO
- Conectar un zócalo SD a los pines SDIO (CMD, CLK, D0–D3) en el dominio de 3.3 V — el rango de VDD es 1.7–3.6 V, no 5 V.
- Comenzar desde los proyectos de ejemplo SDIO bajo
Projects/STM32F401RE-Nucleoen STM32CubeF4 — los ejemplos de GPIO, ADC, USART, USB y SDIO para esta placa exacta son mantenidos por ST. - Transmitir datos con el controlador DMA integrado en el chip para que el Cortex-M4F de 84 MHz permanezca libre mientras los bloques se mueven a la tarjeta.
Resultado esperado
Un dispositivo CDC que aparece porque el MCU es el dispositivo USB — no el ST-LINK — y una tarjeta SD registrando a velocidades SDIO sin bit-banging. Ambos coexisten con el puerto COM propio del ST-LINK: un diseño, dos puertos serie, cero confusión una vez que los dos mundos USB estén separados en su mente.
Errores comunes
- Conectar el conector de la placa a su proyecto de dispositivo USB y ver solo el puerto COM del ST-LINK.
- Alimentar VBUS desde el PC mientras también alimenta la placa externamente — tenga en cuenta los jumpers de selección de alimentación (USB VBUS o 3.3 V / 5 V / 7–12 V externo).
- Hacer bit-banging de USB o SD cuando el silicio tiene controladores nativos.
- Ignorar que el mismo silicio F401 se envía en placas Black Pill (STM32F401CC) con OTG FS conectado a un conector real — las técnicas se portan 1:1 si prefiere comprar en lugar de soldar.
Otros tutoriales para esta placa
- Prise en main de la Nucleo-F401RE : ST-LINK, LED LD2 et alimentation
- Premier Blink Arduino sur la Nucleo-F401RE avec le core STM32duino
- Console série sur le ST-LINK VCP : printf, ADC 12 bits et piège du USB
- STM32CubeF4 et HAL : blink + UART printf générés pour la Nucleo-F401RE
- ADC 12 bits et PWM sur la Nucleo-F401RE : oversampling, millivolts et LED en fondu
- Zephyr RTOS sur la Nucleo-F401RE : west build, devicetree et west flash