STM VCP USB_BUSY?

0

Estoy utilizando el firmware STM32 VCP y estoy enviando datos a la aplicación de mi PC

Si no abrí mi puerto serie en la PC, y mi firmware sigue enviando los datos, causará que USB_BUSY ocurra (creo que el búfer de transmisión del firmware está lleno y está esperando que el lado de la PC reciba los datos)

cuando abro el puerto serie en la aplicación de mi PC durante el USB_BUSY, ¡la PC se bloqueará!

¿Puedo saber cómo puedo manejar el estado USB_BUSY en mi firmware? ¿Cómo puedo resolver este problema?

    
pregunta Tim

2 respuestas

1

El lado de mi PC es USB, emular como VCP

He logrado resolver el problema, pero no es una buena solución ...

He añadido 2 cosas:

  1. un protocolo de comunicación
  2. borrando el búfer tx para vaciarlo

Agregué un nuevo protocolo que es el comando START y STOP, necesito que el lado de mi PC envíe un comando STAT a mi firmware, antes de que empiece a enviar datos a mi PC

Siempre que esté en modo USB_BUSY, enviaré un búfer vacío para permitir que el firmware del VCP active una interrupción, y esto borrará mi USB_BUSY

Acabo de agregar esta línea de código solamente

USBD_LL_DataInStage((USB handler), (endpoint), 0); // 0 = empty buffer

¡Me encantaría saber si alguien tiene una mejor solución!

ACTUALIZAR !!<

Finalmente he resuelto este problema, ¡estoy reemplazando todo el controlador HAL STM32 para CDC USB de nuevo a la biblioteca de Periféricos Estándar para CDC USB!

y no hay mas problema con eso! Tengo muchos problemas con el controlador HAL de STM32, ¡está muy defectuoso! Si tiene algún problema con él, intente volver a la biblioteca de Periféricos estándar.

    
respondido por el Tim
1

Parece un problema de apretón de manos.

El controlador VCP falsifica su USB a un puerto RS232, cuando abre un puerto de este tipo, es posible que necesite configurar la velocidad en baudios, el formato de datos, la paridad, el bit de detención, etc. Por lo tanto, su dispositivo no debería enviar datos a su host cuando la configuración no se realiza.

Por lo tanto, si debe usar la clase VCP, su dispositivo debe enviar datos después de la configuración de com. O puede crear su propio protocolo, incluso su propia clase de USB, pero esto necesita volver a escribir el controlador USB en el lado de la PC.

Esta es la definiciones de clase de CDC USB (en la que se basa VPC) , puede darte un poco de ayuda.

    
respondido por el diverger

Lea otras preguntas en las etiquetas