Forum: Mikrocontroller und Digitale Elektronik STM32F105/205 einbindung eines VCP


von Mike (Gast)


Lesenswert?

Hallo,

ich möchte gerne in meinem Programm ein VCP integrieren. Da ich noch 
recht unwissend bin hoffe ich auf eine schnelle Lösung und etwas 
Verständnis falls ich etwas unbeholfen bin.

Und zwar geht es um den STM32F105, sowie STM32F205 stehen beide zur 
Verfügung. Die Platine ist selbst entwickelt (mit 8MHz Quarz). Zurzeit 
ist es so, dass ich das Programm mittels CubeMX generiert habe und 
einfach nur möchte, dass der PC die USB Schnittstelle als VCP erkennt. 
Im Gerätemanager wird leider nur ein "Unbekanntes USB-Gerät angezeigt. 
(Fehler beim Anfordern der Gerätebeschreibung - Code 43 - VID / PID sind 
verkehrt).

Ich vermute keinen Hardware Fehler auf der Platine, da diese mit einem 
STM32F072 ohne Probleme funktioniert. Der Unterschied zwischen den 
Mikrocontrollern STM32F072 und STM32F105/205 liegt in Bezug auf die USB 
Schnittstelle darin das der STM32F072 nur "USB" und der STM32F105/205 
"USB OTG (on the Go)" hat.

Im Cube MX habe ich die USB Schnittstelle wie folgt eingestellt:
Connectivity --> USB_OTG_FS --> Mode --> Device_Only
Middleware --> USB_Device --> Class For FS IP --> Communication Device 
Class (VCP)

Weitere Einstellungen im Cube MX
System Core
-->GPIOs entsprechend konfiguriert
-->RCC --> HSE --> Crystal/Ceramic Resonator
-->SYS --> Debug --> JTAG 5 Pins

In der Clock Configuration habe ich den 8MHz Quarz eingetragen und den 
Rest automatisch einstellen lassen.

Hat jemand eine Idee wo das Problem liegen könnte?

von Jim M. (turboj)


Lesenswert?

Mike schrieb:
> (Fehler beim Anfordern der Gerätebeschreibung - Code 43

Dann sollte man di Basiscs (Spannung, Takt, Pinbelegung) prüfen.

Code 43 sagt erstmal nur das er überhaupt keine Daten von dem USB Gerät 
erhalten konne (deshalb auch die flaschen VID/PID).

Falls an D+ ein Pullup angeschlossen ist, funktioniert das USB 
Peripherial vermutlich noch gar nicht.

von Stefan F. (Gast)


Lesenswert?

Mike schrieb:
> In der Clock Configuration habe ich den 8MHz Quarz eingetragen

Hast du auch einen 8Mhz Quarz angeschlossen? Kontrolliere in der 
Diagramm-Ansicht für die Takt-Konfiguration, ob irgend etwas rot ist. 
Manchmal versagt die Automatik, die Fehler werden dann farblich 
hervorgehoben.

von W.S. (Gast)


Lesenswert?

Mike schrieb:
> ich möchte gerne in meinem Programm ein VCP integrieren. Da ich noch
> recht unwissend bin hoffe ich auf eine schnelle Lösung

Die schnelle Lösung gibt es nicht - es sei denn, jemand hat das alles 
bereits vor dir getan und läßt dich an seinen Ergebnissen teilhaben. Ich 
nicht, denn mit den TM32F105 oder 205 habe ich mich bislang nicht 
befaßt.

Aber du kannst ja mal das Referenzmanual zu deinen Chips zu Rate ziehen 
und die betreffenden Kapitel über den USB mit dem entsprechenden Kapitel 
im Manual zum STM32F103 vergleichen - und dann deine eigenen Schlüsse 
draus ziehen.

So etwa würde ich an deiner Stelle vorgehen.

W.S.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

W.S. schrieb:
> Aber du kannst ja mal das Referenzmanual zu deinen Chips zu Rate ziehen
> und die betreffenden Kapitel über den USB mit dem entsprechenden Kapitel
> im Manual zum STM32F103 vergleichen

Die sind komplett unterschiedlich. Die "OTG" Peripherie ist sehr viel 
komplexer als die einfache "USB" Peripherie.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Niklas G. schrieb:
> Die sind komplett unterschiedlich.

Nun, OTG und simples Device sind oftmals zwei völlig verschiedene 
Peripherie-Cores.

Aber wenn das so ist bei diesem µC, dann ist für den TO ne richtige 
Eigenentwicklung angesagt. Muß er sich eben in die Thematik einarbeiten.

W.S.

von W.S. (Gast)


Lesenswert?

Hehe, hab grad bei ST geschaut:

Das zuständige RefManual ist das RM0008
und das gilt lt. ST dafür:
STM32F101xx,
STM32F102xx,
STM32F103xx,
STM32F105xx,
STM32F107xx

Siehe:
https://www.st.com/en/microcontrollers-microprocessors/stm32f105-107.html#

Also, es sollte ja wohl doch gehen!!!

W.S.

von Guest (Gast)


Lesenswert?

Egal ob normal USB oder OTG, der code der von Cube MX erzeugt wird 
stellt zumindest in so weit funktionalität her, dass das Gerät als VCP 
erkannt wird.

Sicher das auf der Hardware Siete alles passt? Kein kurzschluss beim 
löten des steckers o.ä.?

von Stefan F. (Gast)


Lesenswert?

W.S. schrieb:
> Das zuständige RefManual ist das RM0008 und das gilt lt. ST dafür:
> STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx, STM32F107xx
> Also, es sollte ja wohl doch gehen!!!

Du hast übersehen, dass es zwei separate Kapitel für die beiden 
grundsätzlich unterschiedlichen USB Cores hat.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

W.S. schrieb:
> Hehe, hab grad bei ST geschaut:
>
> Das zuständige RefManual ist das RM0008
> und das gilt lt. ST dafür:
> STM32F101xx,
> STM32F102xx,
> STM32F103xx,
> STM32F105xx,
> STM32F107xx
>
> Siehe:
> https://www.st.com/en/microcontrollers-microprocessors/stm32f105-107.html#
>
> Also, es sollte ja wohl doch gehen!!!

Nö, du hast einfach mal wieder garkeine Ahnung von garnichts!
Es ist immer dasselbe mit dir.
Du weist ja nichtmal wie ST "Datasheet" und "Referencemanual" aufbaut 
und trennt.
Aber du willst mal wieder mitreden!

Im RefMan steht alles was die angegebenen STM32 haben KÖNNTEN!
Was diese dann wirklich haben steht im Datenblatt.
Und was steht da beim F105? -> "USB OTG FS"
Ein "Universal serial bus full-speed device interface (USB)" hat der 
F105 nicht, sondern nur der F103.
Beim F105 sind sogar USB und CAN gleichzeitig nutzbar.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Mike schrieb:
> Ich vermute keinen Hardware Fehler auf der Platine, da diese mit einem
> STM32F072 ohne Probleme funktioniert. Der Unterschied zwischen den
> Mikrocontrollern STM32F072 und STM32F105/205 liegt in Bezug auf die USB
> Schnittstelle darin das der STM32F072 nur "USB" und der STM32F105/205
> "USB OTG (on the Go)" hat.

Das sind eben 2 komplett unterschiedliche Blöcke ;)
Aber zeig doch mal bitte trotzdem einen Schaltplan, das Layout und ein 
Foto des Aufbaus.

Vor allem vermischt du hier F105 und F205.
Welchen von den beiden hast du denn?
Beim F105 hat der USB OTG noch 1,25kb exklusiven SRAM, aber der USB OTG 
des F205 hat das nicht.
Daher vermute ich da einen Unterschied, aber dazu müsste ich nochmal 
genauer in die Registerbeschreibung gucken.

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Danke erst einmal für die vielen Rückmeldungen.
Ich habe euch nochmal ein Auszug des Schaltplans der Platine angehängt, 
sowie die aktuelle clock configurtation.
Soweit ich das erkennen kann habe ich den Quarz angeschlossen und in der 
clock configuration alles richtig eingestellt, es werden keine Fehler 
angezeigt. Auch die Hardware habe ich nochmals gecheckt, soweit alles in 
Ordnung, kein Kurzschluss o.ä..
Fällt euch auf den Anhängen etwas auf?

von Stefan F. (Gast)


Lesenswert?

Mach mal zur Probe die Kondensatoren an den USB Leitungen weg.

Du könntest den HSE Takt mal auf MCO1 oder MCXO2 ausgeben um zu 
kontrollieren, ob die Frequenz stabil ist und stimmt.

Oder ganz banal: lasse eine LED blinken und kontrolliere, ob sie 
regelmäßig und mit der richtigen Frequenz blinkt.

Der externe Pull-Up Widerstand ist nicht nötig, ich vermute sogar, dass 
er weg muss. Zitat aus dem Referenzhandbuch:
"DP/DM integrated pull-up and pull-down resistors controlled by the 
OTG_FS core depending on the current role of the device."

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Mit den 22pF Kondis hat das mit einem F072 funktioniert?
Durchaus interessant, laut ST brauchts diese nicht.
Wenn du angst hast dir den STM32 durch ESD aus dem USB Kabel zu grillen, 
dann nimm TVS Dioden für USB.
Die gibts im SOT23-6/TSOP6, Datenpaar rein, Datenpaar raus sowie 
VCC/GND.
Beispiel: 
https://www.mouser.de/ProductDetail/Nexperia/IP4234CZ6125?qs=sSXnapcmqSskfgXn%2F9aKzA==
Diese verbau ich immer.
Die 22R können mit dieser TVS auch weg, die sind integriert.

Dein Gerät ist USB powered nehm ich mal an?
Ansonsten wärs noch empfehlenswert die 5V USB an den VUSB Pin des STM32 
zu legen. Wenn er 5V tolerant ist, dann direkt sonst per 
Spannungsteiler.

Der Widerstand an DP ist im STM32 integriert, also lass den weg.
Das USB Device muss inenrhalb eines kurzen Zeitfensters antowrten wen 
der Pull vom Host erkannt wurde und wenn deine Software dann noch nicht 
so weit ist dann is essig.
Das Quarz braucht durchaus etwas Zeit zum anschwingen und die PLL zum 
Einrasten.

Ansonsten fliegen die Boot0/Boot1 Pins ind er Luft rum, das ist auch 
nicht gut.
Belege die bitte mit GND oder 3,3V.
Boot0/1 -> GND für den Start aus dem Flash.

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.