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
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
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
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 ?
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.
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
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.
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...
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?
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.
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 :)
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.