STTM32F427 USB - CDC_Transmit_FS Ende der Übertragung erkennen

#4051893
Lesenswert?

Hallo!

Ich habe das Problem bei einem STM32F427 mit CDC Interface das Ende 
einer laufenden Übertragung zu erkennen. Der USB-Stack ist mit CubeMX 
zusammengeklickt und hat Version 1.4 (die derzeit aktuellste).

Für die Übertragung verwende ich "CDC_Transmit_FS", welches einen 
Pointer und ein Längenfeld nimmt. Vom der CDC-Implementierung wird der 
Buffer mit USBD_CDC_SetTxBuffer direkt gesetzt, dann 
USBD_CDC_TransmitPacket aufgerufen. Dieses prüft mit "(hcdc->TxState == 
0)" ab ob bereits eine Übertragung läuft und setzt sonst TxState auf 1 
und beginnt die Übertragung.

Problem: der in der CDC-Klasse implementierte Callback "USBD_CDC_DataIn" 
welcher TxState wieder resetten soll wird nie aufgerufen. Er wird in der 
Callback-Struktur "USBD_ClassTypeDef  USBD_CDC" referenziert und sollte 
dann vom USB-Core in "USBD_LL_DataInStage" aufgerufen werden:

OTG_FS_IRQHandler -> HAL_PCD_IRQHandler -> HAL_PCD_DataInStageCallback 
(weak-Funktion durch CDC-Klasse überschrieben) -> USBD_LL_DataInStage -> 
DataIn (USBD_CDC_DataIn)

Scheinbarer Fehler ist, dass "HAL_PCD_DataInStageCallback" nur 
aufgerufen wird, wenn das XFRC-Interrupt (Transfer Complete) gesetzt ist 
- dies wird aber nirgends aktiviert. Versuche es manuell "irgendwo" zu 
aktivieren waren nicht erfolgreich.

Hatte jemand schon mal das Problem?

Viele Grüße
Robert

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren