Estoy usando el firmware STM32 VCP y estoy enviando datos a la aplicación de mi PC
Si no abrí mi puerto serial en la PC, y mi firmware continúa enviando los datos, causará que ocurra USB_BUSY (creo que el búfer de transmisión del firmware está lleno y está esperando que el lado de la PC reciba datos)
cuando abro el puerto serie en la aplicación de mi PC durante USB_BUSY, ¡hará que la PC se cuelgue!
¿Puedo saber cómo puedo manejar el estado USB_BUSY en mi firmware? ¿Como puedó resolver esté problema?
El lado de mi PC es USB, emular como VCP
He logrado resolver el problema pero no es una buena solución...
Agregué 2 cosas:
Agregué un nuevo protocolo que es el comando START y STOP, necesito que mi PC envíe un comando STAT a mi firmware, antes de que comience a enviar datos a mi PC
Siempre que esté en modo USB_BUSY, enviaré un búfer vacío para permitir que el firmware de 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 resolví este problema, reemplazando todo el controlador STM32 HAL para USB CDC de regreso a la biblioteca de periféricos estándar para USB CDC!
y no hay más problema con eso! Me encuentro con muchos problemas al usar el controlador HAL de STM32, ¡tiene muchos errores! Si tiene algún problema, intente volver a la biblioteca de periféricos estándar.
Parece un problema de apretón de manos.
El controlador VCP falsifica su USB a un puerto RS232, cuando abre dicho puerto, es posible que deba configurar la velocidad en baudios, el formato de datos, la paridad, el bit de parada, etc. Por lo tanto, su dispositivo no debe enviar datos a su host cuando el configuración no hecha.
Por lo tanto, si debe usar la clase VCP, su dispositivo debe enviar datos después de que se complete 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.
Estas son las definiciones de clase USB CDC (en las que se basa VPC), pueden brindarle ayuda.
divergente
Tim
divergente
divergente
Tim