STM32 USB-Device mit CubeMX Bug?

Gast #4150959
Lesenswert?
• ▲
▼
Hallo,

ich habe mit CubeMX von ST mir ein Codegerüst erzeugt das eine USB 
Device Schnittstelle als virtuellen COM-Port enthält. Im Code sind dann 
die Funktionen CDC_Receive_FS und CDC_Transmit_FS enthalten.
Wenn ich das Programm flashe und mein Board an den PC anstecke wird der 
Port richtig erkannt und auch der Treiber automatisch erkannt (Win7).
Mit der Transmit-Funktion kann ich Daten an den PC senden, das klappt 
wunderbar.

Bei einem empfangenen Byte wird ein Interrupt ausgelöst und dieser 
landet dann irgendwann in der Funktion CDC_Receive_FS. Hier kann ich das 
Byte dann auch auslesen und verarbeiten. Das funktioniert aber leider 
nur einmal. Nachdem das erste Byte empfangen wurde stehen im 
Endpoint-Register STAT_RX die Bits nicht auf 0x3, damit empfangene 
Pakete mit ACK bestätigt werden sondern auf 0x2, wodurch das Paket nicht 
richtig empfangen wird und auch kein Interrupt ausgegeben wird.

Ich nutze einen STM32L162-Prozessor auf einem Eval-Board, IDE ist IAR.

Hat jemand schon mal mit CubeMX die USB-Schnittstelle nutzen können? 
Wird hier eine falsche/alte Lib mitausgeliefert?

Vielen Dank für eure Hilfe
Chris
Persönliche Seite #4784297
Lesenswert?
• ▲
▼
I.d.R. musst du in der CDC_Receive_FS einen call auf
1
USBD_CDC_ReceivePacket(&hUsbDeviceFS);

machen, sodass die Schnittstelle bereit für das nächste Paket ist.

Das kann dann so aussehen:
1
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
2
{
3
  /* USER CODE BEGIN 6 */
4

5
    //hier den Buf irgendwo wegschreiben
6

7
    USBD_CDC_ReceivePacket(&hUsbDeviceFS);
8

9
    return (USBD_OK);
10

11
  /* USER CODE END 6 */ 
12
}

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