mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F4 USB CDC


Autor: ESC- (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

derzeit ersetze binich dabei einen LPC1778 durch einen STM32F4 zu 
ersetzen.
Dazu gehören auch alle Softwaretreiber.

Bisher war es so, dass für den LPC1778 der USB CDC Treiber der Keil RL 
verwendet wurde. Das ganze läuft soweit auch einwandfrei.

Da es für den STM32F4 ebenfalls von Keil einen USB CDC Treiber gibt, 
möchte ich diesen gerne verwenden.  usbd_STM32F4xx_FS.c

Ich nutze den USB_FS Modus und nur als CDC Device über einen VCP am PC.

Ich bin nun schon soweit, dass sich meine Applikation korrekt am PC 
anmeldet. Zur Analyse verwende ich USBlyzer. Die ganzen Discriptoren 
stimmen exkat mit der alten Applikation überein.

Bisher dachte ich, dass alles einwandfrei funktioniert aber ein PC 
Programm, welches mit der Applikation kommunizieren soll, kann keine 
Verbindung zur Platine mit dem STM32F4 aufbauen.

Im USBlyzer ist mir aufgefallen, dass sich zwar die beiden Platinen 
identisch mit den Disciptoren anmelden, allerdings sendet die alte 
funktionierende Hardware etwa alle drei Sekunden folgende Daten aus dem 
angehängtem Bild.

Bei meinem STM32F439 ist nach der Anmeldung Schluss. Siehe Bild 2

Habt ihr eine Idee, woran das liegen könnte ? Scheinbar funktioniert die 
Anmeldung und ich konnte auch schon testweise Daten über USB zum STM32F4 
senden.

Vielen Dank.

Autor: ESC- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim LPC Controller wird regelmäßig die Funktion USBD_WriteEP 
aufgerufen. Beim STM32F4 leider nicht. Hat jemand eine Idee, woran das 
liegen könnte ?

Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ESC- schrieb:
> Habt ihr eine Idee, woran das liegen könnte ? Scheinbar funktioniert die
> Anmeldung und ich konnte auch schon testweise Daten über USB zum STM32F4
> senden.

Tja, da bleibt dir weiter nix übrig, als dich tatsächlich mit dem 
konkreten Treiber zu befassen, bis du dessen Funktionalität begriffen 
hast.

Die Datenrichtung Host-->Device funktioniert immer, sofern das Device 
sich als empfangsbereit zeigt. Die umgekehrter Datenrichtung 
funktioniert nur dann, wenn das Device sich durch Laden eines 
Sendepuffers und Gültigmachen desselben als sendebereit dem Host zeigt. 
Genau das aber ist die dezente Schwierigkeit bei einem CDC, denn dort 
muß ja der Treiber im µC die Stoßstelle zwischen asynchron und synchron 
beim Datenverkehr bewerkstelligen. Ich mach das bei meinen USB-CDC 
Treibern so, daß der Treiber in beiden Richtungen einen gehörig großen 
Puffer vorhält und ich zum Wieder-Anstoßen des Datentransfes 
Device-->Host den 1 ms Tick benutze.

W.S.

Autor: ESC- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nutzt du auch den Keil USB CDC Treiber der RL ?

Ich dachte das Verhalten der beiden Keil Treiber für den LPC und STM 
wären identisch.

Autor: Herbert (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
ESC- schrieb:
> Ich dachte das Verhalten der beiden Keil Treiber für den LPC und STM
> wären identisch.

Das wäre wohl eine Frage für den Support.

Autor: W.S. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ESC- schrieb:
> Ich dachte das Verhalten der beiden Keil Treiber für den LPC und STM
> wären identisch.

Die USB-Cores unterscheiden sich erheblich.

Bei den STM's muß man Statusbits per XOR ändern, das ist aus meiner 
Sicht herzlich ungewöhnlich. Die Unterschiede kann man sich mal anhand 
der angefügten Quellen zu Gemüte ziehen.

W.S.

Autor: ESC- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die USB Cores unterscheiden sich schon. Nur bin ich davon ausgegangen, 
dass die Entwickler von Keil funktionsgleiche Treiber für USB CDC 
entwickeln.

Beim LPC läuft alles problemlos. Dateien hinzugefügt und arg viel mehr 
war da nicht zu machen. Beim STM32 hängt es leider.

Autor: ESC- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann es auch sein, dass mein .INF File Schuld daran ist, dass die 
Kommunikation nicht richtig funktioniert ?

Ich habe ebenfalls das von Keil verwendet.



;------------------------------------------------------------------------------
;  Installation
;------------------------------------------------------------------------------

[SourceDisksFiles]

[SourceDisksNames]

[DestinationDirs]
FakeModemCopyFileSection=12
DefaultDestDir=12
[FakeModemCopyFileSection]

[MCBSTM32F400USB]
include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
AddReg=MCBSTM32F400USB.AddReg

[MCBSTM32F400USB.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

[MCBSTM32F400USB.Services]
AddService=usbser, 0x00000002, DriverService

[DriverService]
DisplayName=%DRIVER.SVC%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\usbser.sys

;------------------------------------------------------------------------------
;  String Definitions
;------------------------------------------------------------------------------

[Strings]
Keil       = "Keil - An ARM Company"
DRIVER.SVC = "MCBSTM32F400 USB VCOM Driver"
DESCRIPTION= "MCBSTM32F400 USB VCOM Port"
COMPOSITE0 = "MCBSTM32F400 USB VCOM Port"
COMPOSITE2 = "MCBSTM32F400 USB VCOM Port"



Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ESC- schrieb:
> Beim LPC läuft alles problemlos. Dateien hinzugefügt und arg viel mehr
> war da nicht zu machen. Beim STM32 hängt es leider.

Tja, wie gesagt, mußt du dich dann eben in die Details hineinknien. Als 
was ist dein STM denn am PC angemeldet?

Ach ja, ich hatte bei allen meinen USB-CDC's die gleichen Deskriptoren 
benutzt (von Nuvoton), was Probleme mit unterschiedlichen .INF erst 
garnicht hat aufkommen lassen.

W.S.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.