Yo uso la placa STM32F407G-DISC1. He ejecutado algunos ejemplos con VCP basado en la biblioteca STD. Todo está bien. Entonces he intentado generar código por CubeMX. Y algo interesante sucede.
Si no se agrega ningún código, entonces el host define el VCP y el terminal puede conectarlo.
Si agrego CDC_Transmit_FS en un bucle sin fin de main (), funciona
volatile uint32_t time_var = 3e7;
while (1)
{
while(time_var) {
time_var--;
}
CDC_Transmit_FS(b, 4);
time_var = 3e8;
}
Si en lugar del bucle while interno uso la función HAL_Delay, el terminal no puede abrir el puerto.
while (1) {
Hal_Delay(5e3);
CDC_Transmit_FS(b, 4);
}
Entonces, el puerto COM se define en DeviceManager, pero el terminal no puede conectarse. Ocurre incluso antes de la primera llamada de CDC_Transmit_FS, aunque hUsbDeviceFS ya está inicializado.