Forum: Mikrocontroller und Digitale Elektronik STM32F4 USB VCP RX Buffer


von Hans (Gast)


Lesenswert?

Hallo,

ich habe auf dem STM32F4Discovery Board die USB Schnittstelle als VCP 
zum laufen gebracht (Mit Hilfe von STM32CubeMX). Ich kann Senden und 
Empfangen. Jetzt habe ich einen loopback erstellt (IN = OUT). Wenn ich 
über das Terminal 8 Zeichen sende, bekomme ich die 8 Zeichen zurück. 
Sende ich aber 9 Zeichen springt der Controller in den 
HardFault_Handler_C laut Debugger. Kommt das durch den Überlauf des 
RxBuffers? Wie kann ich diesen erhöhen bzw. verhindern das der 
Controller in den HardFault_Handler_C springt.

Schon mal danke für eure Hilfe.

Gruß Hans

von Pieter (Gast)


Lesenswert?

Hallo Hans,

habe auf meinem System nur USB-HID laufen.
Die 8 Bytes sind für die Enumeration schon mal notwendig.
Was hast Du in den USB-Desriptoren eingestellt?
Wie erfolgt die Blockung bei USB-IN ( MC -> PC )?
Was sagt z.B. USB-View über die Blockgrößen?

Gruß Peter

von Hans (Gast)


Lesenswert?

Welchen Eintrag meinst du bei den Deskriptoren?
Was meinst du mit Blockung?

von Hans (Gast)


Lesenswert?

Die Endpunkte habe ich laut usbview

Endpoint Descriptor:
bEndpointAddress:     0x82  IN
Transfer Type:   Interrupt
wMaxPacketSize:     0x0008 (8)
bInterval:            0xFF

Endpoint Descriptor:
bEndpointAddress:     0x01  OUT
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x81  IN
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

von abc (Gast)


Lesenswert?

Hans schrieb:
> Schon mal danke für eure Hilfe.

Auch wenn man einen Bug in einem Code natürlich nicht ausschließen kann, 
so sei bitte gewarnt:

Die neue STM32 HAL ist fürchterlichst verbuggt, im speziellen 
hinsichtlich des USB.

Unsere FW Entwicklungsabteilung hat schon 3+ kritische Bugs an ST 
geschickt, die auch bestätigt wurden. Wann die neue Version kommt, weiß 
keiner.

von Hans (Gast)


Lesenswert?

Das macht ja Mut :)

Weiß trotzdem jemand wo man die Receive Buffergröße einstellen kann? 
Oder der der Interrupthandler heißt zum debuggen?

von W.S. (Gast)


Angehängte Dateien:

Lesenswert?

Hans schrieb:
> Das macht ja Mut :)

Wenn du zum Erfolg kommen willst, dann wirst du nicht umhinkommen, die 
ganze USB-Sache selbst verstehen zu lernen. Irgendwelche generellen aber 
finsteren USB-Treiber sich generieren zu lassen ohne sie zu verstehen, 
endet eigentlich fast immer im Fiasko.

Ich häng dir mal ne alte Quelle aus meiner Feder dran. Ist zwar für den 
STM32F103, aber m.W. verwendet ST den gleichen USB-Peripheriecore für 
alle seine STM32, die Anpassung sollte also keine echte Hürde sein.

W.S.

von W.S. (Gast)


Lesenswert?

Nochwas:
USB kannst du NICHT debuggen, denn da wirst du spätestens nach 3 ms 
rausgeschmissen. Also vergiß den Debugger.

W.S.

von Hans (Gast)


Lesenswert?

Weiß denn wer wo ich die Buffet Größe einstellen kann?

von Pieter (Gast)


Lesenswert?

moin moin,

bei mir zu hause gibt es kein Internet .-((

USB via STM32F103 und STM32F4xx sind 2 verschiedene Treiber-Modelle!
Auf dem 103 habe ich auch USB-HID laufen.


Die Deskriptoren scheinen richtig zu sein.

>> Was meinst du mit Blockung?

Die Aufteilung des Datenstromes auf die Blockgröße der USB-Übertragung.


Da ich STM32 in Pascal progge, werden meine Quellen hier nichts nützen.

..wie w.s. meint: man muss eine Vorstellung von dem haben, was bei USB 
so abgeht. Es wird aber auch nur mit kalt Wasser gekocht.

Gruß
Peter

von W.S. (Gast)


Lesenswert?

Hans schrieb:
> Weiß denn wer wo ich die Buffet Größe einstellen kann?

egal, solange was Leckeres drauf steht und man zugreifen kann.

Liest du denn eigentlich, wenn man dir was Wichtiges sagt?

W.S.

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.