Ho lavorato a un progetto nelle ultime due settimane e il debug di questo problema è stato ripreso per tutta la settimana. Mi chiedo se qualcuno può aiutare, cercherò di essere il più esplicito e chiaro possibile.
Sto cercando di implementare una porta di comunicazione virtuale USB su un microcontrollore basato su STM32F302K8 (Cortex M4). Ho usato STM32CubMX per generare il codice necessario per configurare un dispositivo USB Full Speed che implementa una classe CDC. Il mio dispositivo viene visualizzato in Windows (Gestione dispositivi) e Linux. Sono in grado di implementare una semplice funzione di eco basata sul codice di esempio, ma quando provo ora ad utilizzare la funzione USBD_CDC_SetTxBuffer per inviare dati al PC, questo fa scattare un gestore di errori hardware. L'ho ridotto al fatto che il campo UsbDeviceFS.pClass (che è necessario per USBD_CDC_SetTxBuffer) non viene mai inizializzato perché USBD_CDC_Init () non viene mai chiamato nell'inizializzazione del dispositivo USB.
Ho implementato correzioni a diversi bug (incluso la modifica della dimensione dell'heap, la correzione del flag di trasmissione in USBD_CDC_TransmitPacket e la modifica della dimensione di CDC_DATA_HS_MAX_PACKET_SIZE a 256 da 512) nel codice di esempio documentato sul forum ST ma ottenendo sempre lo stesso errore.
Il mio codice di configurazione del dispositivo è
* 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);
}