Estoy usando el firmware STM32 HAL VCP generado por CubeMX en la placa de descubrimiento STM32F4. El puerto COM virtual funciona, puedo transmitir desde el microcontrolador a la PC tantos mensajes como quiera. Pero en la otra dirección, desde la PC hasta el microcontrolador, solo puedo enviar un mensaje. Si trato de enviar una segunda, static int8_t CDC_Receive_FS (char* Buf, uint32_t *Len)
no se llamará a la devolución de llamada y RealTerm se bloquea en la PC. Mi programa cliente también se bloquea cuando intenta escribir en el puerto COM por segunda vez.
En el lado del microcontrolador, eliminé todo mi código CDC_Receive_FS()
, actualmente solo regresa USBD_OK
. En la función principal solo hay una HAL_Delay()
llamada periódica, también intenté eliminar esto, pero no tuvo efecto.
Alguna idea, cual puede ser el problema?
Encontré la respuesta para mi propia pregunta. Hay un ejemplo bien documentado en la siguiente página web: http://visualgdb.com/tutorials/arm/stm32/usb/
En primer lugar, tuve que completar el código generado tal static int8_t CDC_Receive_FS (char* Buf, uint32_t *Len)
como está escrito en la fuente anterior.
Después de eso, tuve que crear e implementar la int VCP_read(void *pBuffer, int size)
función, tal como está escrito en la fuente mencionada anteriormente.
El punto clave era que tenía que llamar periódicamente a la int VCP_read(void *pBuffer, int size)
función para leer del búfer los datos recibidos. Si no llamo a esta función, la PC no puede escribir la próxima vez que el puerto COM.
KalleMP
Tenk de Milán
usuario101731