Forum: Mikrocontroller und Digitale Elektronik STM32 USB HOST HID Anschlüsse direkt an Tastatur


von EM (Gast)


Lesenswert?

Hallo Zusammen,

ich möchte eine Tastatur an einen STM32F401RE anschließen. Da ich nur 
das Nucleo-Board zur Verfügung habe und ohne großen Aufwand etwas 
ausprobieren möchte, frage ich mich, ob man eine Tastatur direkt an die 
Pins anschließen kann. Also 5V an VCC, GND an GND und die beiden 
Anschlüsse zur Kommunikation an die jeweiligen Pins des STM. Geht sowas? 
Beim Discovery Board ist da ja noch allerhand Schaltung drumherum, 
deshalb wollte ich auf Nummer sicher gehen. Vielen Dank.

Grüße
EM

von Harry L. (mysth)


Lesenswert?

EM schrieb:
> ich möchte eine Tastatur an einen STM32F401RE anschließen.

Wenn dein Nucleo einen OTG-Host hat geht das.

EM schrieb:
> Also 5V an VCC, GND an GND und die beiden
> Anschlüsse zur Kommunikation an die jeweiligen Pins des STM. Geht sowas?

Theoretisch schon, aber praktisch wäre ein billiger USB-OTG-Adapter wohl 
der sinnvollere Weg.

https://www.amazon.de/CableCreation-Adapter-Stecker-Buchse-Adapterkabel-Space-Grau/dp/B01N1RHJC0/ref=sr_1_1_sspa

von STK500-Besitzer (Gast)


Lesenswert?

EM schrieb:
> Beim Discovery Board ist da ja noch allerhand Schaltung drumherum,
> deshalb wollte ich auf Nummer sicher gehen.

Schaltplan etc:
https://www.st.com/en/evaluation-tools/nucleo-f401re.html#cad-resources

von EM (Gast)


Lesenswert?

Wenn ich den USB-OTG Adapter nehme, dann bin ich doch aber nicht direkt 
an dem STM32 sondern an dem stlink der sich mit auf dem Board befindet, 
oder ?

von Harald A. (embedded)


Lesenswert?

Grundsätzlich kannst Du die Tastatur mit 5V versorgen und die D+/- 
direkt anschließen. Kenne den Prozessor nicht im Detail, ist der an der 
gewünschten Schnittstelle HOST oder OTG? Schreibe mal, an welche Pins Du 
konkret anschließen möchtest.

von EM (Gast)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

EM schrieb:
> Mein Nucleoboard hat leider nur den einen USB connector drauf, deshalb
> will ich eher sowas hier nehmen und direkt an die oben genannten Pins
> gehen.

Mache das, das wird funktionieren. Die Datenleitungen liegen auf PA11 
und PA12.

von STK500-Besitzer (Gast)


Lesenswert?

Harald A. schrieb:
> Kenne den Prozessor nicht im Detail, ist der an der
> gewünschten Schnittstelle HOST oder OTG?

Hat er: Kapitel 22 "USB on-the-go full-speed (OTG_FS)" im Reference 
Manual.

EM schrieb:
> Mein Nucleoboard hat leider nur den einen USB connector drauf, deshalb
> will ich eher sowas hier nehmen und direkt an die oben genannten Pins
> gehen.
>
> 
https://www.amazon.de/Breakout-Board-Buchse-Raster-Adapterstecker/dp/B07VBRTDVF/ref=sr_1_6?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=3FGNJKHJF8VF6&keywords=usb+buchse+board&qid=1676194547&sprefix=usb+buchse+board%2Caps%2C86&sr=8-6

kann man machen.

Dann fehlt dir "nur noch" die Software...

von EM (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab hier schnell mal eine Skizze erstellt. Passt das so? Es gibt ja 
nen extra VBUS Pin, sollte ich da auch VBUS der Tastatur anschließen 
oder wie im Bild einfach 5V?

von Stefan F. (Gast)


Lesenswert?

EM schrieb:
> Passt das so? E

Ja

> Es gibt ja nen extra VBUS Pin, sollte ich da auch VBUS der Tastatur
> anschließen oder wie im Bild einfach 5V?

Ich würde dir mal empfehlen, einen Blick ins Datenblatt und ins 
Referenzhandbuch zu werfen. Da ist beschrieben, dass der VBUS Pin ein 
analoger Eingang ist, den man optional benutzen kann, und wozu er gut 
ist.

Einfach in dem beiden Dokumenten nach "VBUS" suchen.

Achtung: Es gibt andere STM32 Modelle, wo der VBUS Pin eine völlig 
andere Funktion hat, z.B. beim STM32L072.

von EM (Gast)


Lesenswert?

Vielen Dank, wenn ich das richtig verstanden habe, ist der VBUS pin, 
zumindest bei meinem MCU dazu da, zu detektieren, ob die Spannung im 
richtigen Bereich liegt oder ob diese zum Beispiel gerade eingebrochen 
ist. Wenn ich die Tastatur direkt über den Stecker direkt an 5V 
anschließe, gehe ich einfach davon aus, dass es im richtigen Bereich 
liegt. Damit würde ich den VBUS einfach deaktiveren.

Hat vielleicht jemand ein gutes Tutorial, wie man die Software dazu 
schreibt? Ich bin noch neu im Programmieren von USB. Im Referenzmanual 
stehen zwar die Registerfunktionen aber das ist für den Anfang etwas zu 
viel Information. Ich habe noch diese 2 Tutorials gefunden, allerdings 
sind die etwas dünn beschrieben. Vielleicht hat jemand einen Link zu 
einem Tutorial wie man das angeht? Ich möchte nur die Tastendrücke der 
Tastatur auswerten. Die meisten Tutorials behandeln nur, wie man den 
STM32 als HID Device betreibt, allerdings nicht als HID Host.

https://www.youtube.com/watch?v=MlhUG4GsOT0
https://controllerstech.com/stm32-usb-host-hid/

Danke :)

von Harald A. (embedded)


Lesenswert?

VBUS ist im Falle eines Slaves dazu da, damit der Controller merkt, dass 
ein Host angeschlossen wurde und den Pull-up an der Datenleitung im 
richtigen Moment schalten kann. Der Pull-Up signalisiert dem Host, dass 
der Slave jetzt bereit ist. Macht man den Pull-Up fest, muss man 
jederzeit mit Kommunikation vom Host rechnen. Verpasst man das als Slave 
(weil z.B. SW noch nicht bereit) gibt es auf der Host-Seite 
Fehlermeldungen. Im Falle als Host müsste man nochmal ins Datenblatt 
schauen, ob VBUS da eine Rolle spielt.
Mitnichten wird mit VBUS ermittelt, ob die Spannung im richtigen Bereich 
liegt.
Wenn Du keine Erfahrung mit USB hast, kannst Du nur mit fertigen Libs 
weiterkommen. Mit den direkten Registern brauchst du dich da garnicht 
erst zu beschäftigen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

EM schrieb:
> Wenn ich die Tastatur direkt über den Stecker direkt an 5V
> anschließe, gehe ich einfach davon aus, dass es im richtigen Bereich
> liegt.

Dann gehst du auch davon aus, dass der Stützkondensator am 
Mikrocontroller der Tastatur unendlich schnell geladen werden kann und 
dass dieser hohe Ladestrom deine Stromversorgung nicht negativ 
beeinflusst. Ganz so einfach ist Hot-Plugging nicht.

EM schrieb:
> Hat vielleicht jemand ein gutes Tutorial, wie man die Software dazu
> schreibt? Ich bin noch neu im Programmieren von USB.

Es gibt Tutorials, aber ich kenne keins, das zu deinem Anwendungsfall 
passt. USB ist eine sehr komplexe Sache.Firmen kaufen diese Teile 
normalerweise für viel Geld dazu. Für Hobbybastler stellt ST die HAL 
kostenlos zur Verfügung. Arbeite die da rein. Ich weiß das das aufwändig 
ist, aber immer noch sehr viel einfacher und schneller, als zu lernen, 
wie man USB Protokolle programmiert.

von Stefan F. (Gast)


Lesenswert?

Harald A. schrieb:
> Mitnichten wird mit VBUS ermittelt, ob die Spannung im richtigen Bereich
> liegt.

Ähem, entschuldigung...

> Im Falle als Host müsste man nochmal ins Datenblatt
> schauen, ob VBUS da eine Rolle spielt.

Tu das. Suche wie empfohlen im Datenblatt und Referenzhandbuch des 
STM32F401RE nach "VUSB". Und dann nimm den oben zitierten Satz zurück.

von Thomas Z. (usbman)


Lesenswert?

VBus spielt in der Rolle als Host keine Rolle. Es reicht VBus der USB A 
Buchse auf 5V zu legen, die muss hier ja nur die Tastatur mit Strom 
versorgen.

Achtung: Es gibt FullSpeed und LowSpeed Tastaturen.
Der Hostcode muss also erkennen an welche USB Leitung der Connect 
Widerstand hängt. Die meisten Tastaturen sind aber LowSpeed.

Wenn der Connect erkannt ist reicht im Prinzip folgende Sequenz:
 - USB Reset
 - USB SetAddress (address)
 - USB GetDeskriptor(Device,8)
 - USB GetDescriptor(Device,sizeof(USB_DEVICEDESCRIPTOR))
 - USB GetDescriptor(Config,sizeof(USB_DEVICEDESCRIPTOR))
 - USB GetDescriptor(Device,wTotalLength)
 - USB GetDescriptor(HidDescriptor,sizeof(USB_HIDDESCRIPTOR))
 - USB SetConfiguration (configValue)

Diese Sequenz ist im Prinzip eine vereinfachte Version dessen was 
Windows oder Linux beim Enumerieren macht.

Je nachdem wie gross Ep0Size im Devicedescriptor ist muss beim Lesen der 
Deskriptoren in entsprechende Packete aufgeteilt werden (8 |16|32|64 
Bytes)
Bei Lowspeed ist es immer 8 Bytes.


Was bei einem Host, speziell bei HID, kompliziert werden kann ist das 
Parsen des Hid Deskriptors, speziell dann wenn das mit möglichst vielen 
unterschiedlichen Tastaturen zusammenarbeiten soll.

Das kann man am Anfang aber erst mal hard codieren.

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.