Forum: Mikrocontroller und Digitale Elektronik Schaltung für USB Funktion am STM32


von S.T.M (Gast)


Lesenswert?

Hallo zusammen,

ich versuche zum ersten Mal eine USB Funktion mit einem STM32 zu 
realisieren. Dazu wollte ich einen STM32F302RBT6 einsetzen. Ich habe mir 
das Datenblatt angeschaut und sehe nur, dass ich den Pin PA11 für USB_DM 
und den Pin PA12 für USB_DM verwenden soll. Wie soll aber die komplette 
Schaltung dazu aussehen? Es muss doch noch VBUS angeschlossen werden. 
Ich werde aus dem Datenblatt nicht schlauer.

MfG

von Beo Bachta (Gast)


Lesenswert?

S.T.M schrieb:
> Ich werde aus dem Datenblatt nicht schlauer.

Suche dir ein User Manual zu einem STM Nucleo Board mit deinem
Prozessor, dort ist eine vollständige Beschaltung angegeben.

von Harry L. (mysth)


Lesenswert?


von S.T.M (Gast)


Lesenswert?

Vielen Dank euch beiden. Das was ich gesucht habe, steht in der 
Application Note, was Harry gelinkt hat. Die Datenblätter von ST sind ja 
eigenartig, wenn man für jede Funktion ein passendes Application Note 
raussuchen muss.

MfG

von Rene K. (xdraconix)


Lesenswert?

S.T.M schrieb:
> Die Datenblätter von ST sind ja eigenartig, wenn man für jede Funktion
> ein passendes Application Note raussuchen muss.

Genau das finde ich gut, die Informationen sind auf das wichtigste des 
jeweiligen Szenarios heruntergebrochen. Nicht jeder nutzt z.b. USB 
etc... Das schrumpft die eigentliche Datenblattstärke um einiges.

Wenn man nun aber z.b. aus dem Atmel Lager kommt, ist das schon 
verfremdlich, das stimmt schon ? Da muss man sich umgewöhnen.

von Stefan F. (Gast)


Lesenswert?

S.T.M schrieb:
> Wie soll aber die komplette Schaltung dazu aussehen?
1
USB Buchse        Mikrocontroller
2
3
                    1,kΩ
4
               +----[===]---o 3,3V
5
               |
6
D+  o----------+--o DP PA12
7
D-  o-------------o DM PA11
8
GND o-------------o GND

Siehe http://stefanfrings.de/stm32/stm32f3.html#usb

> Es muss doch noch VBUS angeschlossen werden.

VBUS kannst du benutzen, um dein Gerät mit Strom zu versorgen. Dann 
kommt da ein Low-Drop 3.3V Spannungsreler dran. Wenn deine Schaltung 
eine andere Stromversorgung hat, brauchst du VBUS nicht zu benutzen.

In realen Schaltungen empfehlen sich zusätzlich Suppressor-Dioden zum 
Schutz gegen Überspannung.

Zum Debuggen kann es hilfreich sein, den Pull-Up Widerstand schaltbar zu 
machen, damit man nicht nach jedem Reset das USB Kabel aus- und wieder 
einstecken muss. Das Programm soll dann den Pull-Up nach jedem Reset ca. 
1 Sekunde verzögert einschalten.

von S.T.M (Gast)


Angehängte Dateien:

Lesenswert?

Rene K. schrieb:
> Wenn man nun aber z.b. aus dem Atmel Lager kommt, ist das schon
> verfremdlich, das stimmt schon ? Da muss man sich umgewöhnen.

Ja ich komme aus dem AVR Lager :)
Daher auch die Verwirrung.

Stefanus F. schrieb:
> Wenn deine Schaltung
> eine andere Stromversorgung hat, brauchst du VBUS nicht zu benutzen

Ist es nicht sinnvoll, wenn man den VBUS über einen Spannungsteiler an 
einen GPIO hängt? Damit der Controller weiss, dass ein USB Kabel 
angeschlossen wurde? Mein Schaltplan habe ich angehängt.

Auf deiner Homepage steht, dass man einen 48MHz Quarz nehmen soll. In 
der Application Note steht aber, es würde auch ein 16MHz gehen. Was 
stimmt denn nun?

MfG

von Stefan F. (Gast)


Lesenswert?

S.T.M schrieb:
> Ist es nicht sinnvoll, wenn man den VBUS über einen Spannungsteiler an
> einen GPIO hängt? Damit der Controller weiss, dass ein USB Kabel
> angeschlossen wurde?

Das erfährt er schon durch die USB Kommunikation.

> Auf deiner Homepage steht, dass man einen 48MHz Quarz nehmen soll.

Nein, dort steht, dass die USB Schnittstelle mit 48MHz getaktet werden 
muss. Dort steht auch, dass daher der Systemtakt entweder 48MHz oder 
72MHz sein muss und dass man dementsprechend den Prescaler auf 1 oder 
1,5 einstellt.

Von Quarz ist das alles wiederum ziemlich unabhängig, da dessen Frequenz 
mittels PLL auf 48 oder 72MHz erhöht wird. Alle mir bekannten Evaluation 
Kits und Development Boards haben einen 8MHz Quarz.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

S.T.M schrieb:
> Auf deiner Homepage steht, dass man einen 48MHz Quarz nehmen soll.

Der Controller kann nur max 32 MHz als Quarz. Auf der Website ist vom 
Systemtakt die Rede, welcher über eine PLL erzeugt wird. Viele 
Schaltungen verwenden 8MHz-Quarze. Die 48 MHz für USB werden über eine 
weitere interne PLL erzeugt.

Hier die USB-Schaltung vom Olimexino, als Inspiration:
https://www.mikrocontroller.net/articles/Datei:Olimexino_STM32_USB.png

S.T.M schrieb:
> Damit der Controller weiss, dass ein USB Kabel
> angeschlossen wurde?

Das sollte er ja auch an den SOF-Paketen vom Host erkennen, ist also 
eher für Testzwecke sinnvoll.

Edit: Zu spät!

von Quarzrechner (Gast)


Lesenswert?

Stefanus F. schrieb:
> Von Quarz ist das alles wiederum ziemlich unabhängig

Nö, da man nur mit bestimmten Basis-Frequenzen des Quarzes die
notwendigen 72 bzw 48 MHz erreichen kann.

S.T.M schrieb:
> Auf deiner Homepage steht, dass man einen 48MHz Quarz nehmen soll.

Eine so hohe Frequenz für den Quarz würde nicht funktionieren.

von Stefan F. (Gast)


Lesenswert?

Quarzrechner schrieb:
> Nö, da man nur mit bestimmten Basis-Frequenzen des Quarzes die
> notwendigen 72 bzw 48 MHz erreichen kann.

Das wird er früh genug merken, wenn er die Taktkonfiguration berechnet 
oder es in CubeMx zusammen klickt.

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.