🛠 Console série sur le ST-LINK VCP : printf, ADC 12 bits et piège du USB

Famille STM32 Nucleo-64 F4 — modelo insignia: Nucleo-F401RE · debutant · Schéma : IMG-stm32f4-nucleo-debutant-3-stm32f4nuc-console-serie-stlink-vcp.svg — Nucleo-F401RE avec un potentiomètre sur A0, flèches vers une fenêtre de moniteur série affichant des lignes ADC en millivolts

Objetivos

Domina la consola serie en la Nucleo-F401RE: el ST-LINK/V2-1 expone un puerto COM virtual, y el núcleo de Arduino conecta el objeto Serial predeterminado a USART2 (RX = PA3, TX = PA2) a través de él. Construirás un pequeño registrador de mediciones que imprime líneas formateadas y aprenderás a escalar correctamente el ADC de 12 bits del F401.

Hardware

La verdad sobre el cableado

El conector micro-USB de la placa va al ST-LINK, no al periférico USB OTG del MCU. Esto es una ventaja para los principiantes: el puerto COM siempre está disponible, incluso si tu sketch nunca toca USB. Los pines OTG FS del propio MCU están disponibles en los conectores morpho para trabajos avanzados de dispositivo USB (consulta el tutorial avanzado de USB OTG).

Código

const int kProbePin = A0;   // PA0 on the Arduino connector

void setup {
  Serial.begin(115200);     // ST-LINK VCP, no native USB needed
  while (!Serial && millis < 2000) {}  // brief wait for the VCP to settle
  Serial.println("Nucleo-F401RE serial log up");
}

void loop {
  int raw = analogRead(kProbePin);       // 12-bit ADC, 16 channels (F401RE)
  Serial.printf("ADC raw=%d  mV=%lu\n", raw,
                (unsigned long)(raw * 3300 / 4095));
  delay(250);
}

Pasos

  1. Carga el sketch con la placa Nucleo F401RE seleccionada.
  2. Abre el monitor serie a 115200 baudios en el puerto COM del ST-LINK.
  3. Gira el potenciómetro: la columna de milivoltios debe barrer de 0 → 3300 mV.
  4. Desconecta y vuelve a conectar el cable: el registro se reinicia — el VCP se reenumera con la placa.

Resultado esperado

Líneas limpias ADC raw=... mV=... a 4 Hz. Dado que el ADC es de 12 bits (0–4095 sobre 0–3,3 V), la conversión divide por 4095, no por 1023 — un error clásico heredado de los tutoriales de AVR de 10 bits. Serial.printf funciona directamente en el núcleo STM32, sin necesidad de acrobacias con TinyPrintf.

Errores comunes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales