He estado trabajando en un proyecto durante las últimas dos semanas y la depuración de este problema se ha desarrollado durante toda la semana. Preguntándome si alguien puede ayudar, trataré de ser lo más explícito y claro posible.
Estoy intentando implementar un puerto de comunicación virtual USB en un microcontrolador basado en el STM32F302K8 (Cortex M4). He usado STM32CubMX para generar el código necesario para configurar un dispositivo USB de velocidad completa implementando una clase CDC. Mi dispositivo aparece tanto en Windows (Administrador de dispositivos) como en Linux. Soy capaz de implementar una función de eco simple basada en el código de ejemplo, pero cuando trato de usar la función USBD_CDC_SetTxBuffer para enviar datos a la PC, esto activa un Controlador de fallas. He reducido esto al hecho de que el campo UsbDeviceFS.pClass (que es necesario para USBD_CDC_SetTxBuffer) nunca se inicializa porque USBD_CDC_Init () nunca se llama en la inicialización del dispositivo USB.
He implementado soluciones a varios errores (incluido cambiar el tamaño del montón, corregir el indicador de transmisión en USBD_CDC_TransmitPacket y cambiar el tamaño de CDC_DATA_HS_MAX_PACKET_SIZE a 256 desde 512) en el código de ejemplo que figura en el código ST foro pero sigue teniendo el mismo error.
El código de configuración de mi dispositivo es
* USB Device Core handle declaration */
USBD_HandleTypeDef hUsbDeviceFS;
/* init function */
void MX_USB_DEVICE_Init(void)
{
/* Init Device Library,Add Supported Class and Start the library*/
USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC);
USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS);
USBD_Start(&hUsbDeviceFS);
}