Forum: Mikrocontroller und Digitale Elektronik STTM32F427 USB - CDC_Transmit_FS Ende der Übertragung erkennen


von Robert B. (robertb)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.