He estado trabajando en un proyecto para el pasado dos semanas y la depuración de este problema ha llevado hasta esta semana. Pregunto si alguien puede ayudar, voy a tratar de ser lo más explícito y claro como sea posible.
Estoy tratando de implementar un USB Virtual de Puerto de Comunicaciones en un Microcontrolador basado en el STM32F302K8 (Cortex M4). He utilizado STM32CubMX para generar el código necesario para crear un USB de Velocidad Completa Dispositivo de implementación de una clase CDC. Mi dispositivo se muestra en Windows (Administrador de Dispositivos) y Linux. Soy capaz de implementar un simple eco de la función que se basa en el código de ejemplo, pero cuando yo ahora pruebe a utilizar la función USBD_CDC_SetTxBuffer para enviar datos a la PC, esto pone en marcha un Duro Controlador de errores. Que se han reducido de esto por el hecho de que el UsbDeviceFS.pClass (la cual es necesaria por USBD_CDC_SetTxBuffer) campo nunca se inicializa porque USBD_CDC_Init() nunca es llamado en la inicialización del Dispositivo USB.
He implementado la corrección de algunos bugs (incluyendo un cambio en el tamaño de la pila, la fijación de la transmisión de la bandera en USBD_CDC_TransmitPacket, y cambiar el tamaño de CDC_DATA_HS_MAX_PACKET_SIZE 256 512) en el código de ejemplo de como se documenta en el ST foro, pero sigue recibiendo el mismo errror.
Mi dispositivo configuración de código 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);
}