Ich arbeite jetzt seit zwei Wochen an einem Projekt und das Debuggen dieses einen Problems hat diese ganze Woche in Anspruch genommen. Ich frage mich, ob jemand helfen kann, und werde versuchen, so deutlich und klar wie möglich zu sein.
Ich versuche, einen virtuellen USB-Kommunikationsanschluss auf einem MicroController basierend auf dem STM32F302K8 (Cortex M4) zu implementieren. Ich habe STM32CubMX verwendet, um den Code zu generieren, der zum Einrichten eines USB-Vollgeschwindigkeitsgeräts zur Implementierung einer CDC-Klasse erforderlich ist. Mein Gerät wird sowohl unter Windows (Geräte-Manager) als auch unter Linux angezeigt. Ich kann eine einfache Echofunktion basierend auf dem Beispielcode implementieren, aber wenn ich jetzt versuche, die Funktion USBD_CDC_SetTxBuffer zum Senden von Daten an den PC zu verwenden, wird ein Hard Fault Handler ausgelöst . Ich habe dies auf die Tatsache eingegrenzt, dass das Feld UsbDeviceFS.pClass (das von USBD_CDC_SetTxBuffer benötigt wird) niemals initialisiert wird, da USBD_CDC_Init () bei der Initialisierung des USB-Geräts niemals aufgerufen wird.
Ich habe Korrekturen für mehrere Fehler implementiert (einschließlich Ändern der Heap-Größe, Beheben des Übertragungsflags in USBD_CDC_TransmitPacket und Ändern der Größe von CDC_DATA_HS_MAX_PACKET_SIZE von 512 auf 256) im Beispielcode, wie im ST-Forum dokumentiert, aber immer noch der gleiche Fehler.
Mein Geräte-Setup-Code lautet
* 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);
}