Abra el error en el host mientras usa VCP en STM32

0

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.

    
pregunta Dmitriy Kozlov

1 respuesta

2

Esto probablemente se deba a que la función Hal_Delay no está funcionando correctamente. La función Hal_Delay entrará en un bucle ocupado que comparará un valor incrementado de interrupción con el valor que especifique como argumento. Las funciones de interrupción se iniciarán al llamar a HAL_init (), de lo contrario, deberá realizar esta configuración usted mismo.

Para resumir, asegúrate de que se llame a la función HAL_Tick antes de usar HAL_Delay.

    
respondido por el staringlizard

Lea otras preguntas en las etiquetas