Wie entwerfe ich ein STM32-Board mit UART über eine USB-Verbindung?

Tut mir leid, wenn dies eine dumme Frage zu sein scheint, aber ich entwerfe eine benutzerdefinierte Leiterplatte basierend auf dem STM32F303RE-Mikrocontroller und bin etwas verwirrt darüber, wie der UART in der Hardware angeschlossen werden sollte, um seriell über USB zu kommunizieren.

Ich habe einen microUSB-Anschluss an Bord, sollten die UART-Pins direkt mit diesem Anschluss verbunden werden? Oder muss ich die USB-Pins am STM32 verwenden und den Mikrocontroller als USB-Gerät einrichten und den UART irgendwie an diese Pins anschließen (oder sie überhaupt nicht verwenden)?

Ich habe mit einem Nucleo-Board für die Entwicklung begonnen und kann dort über UART kommunizieren (unter Verwendung von HAL-UART-Funktionen), aber das Betrachten des Schaltplans ist aufgrund des integrierten ST-LINK verwirrend. Soweit ich sehen kann, wird das UART-Signal des STM32 an die UART-Pins der ST-LINK-MCU weitergeleitet und die USB-Pins der ST-LINK-MCU sind mit dem MicroUSB-Anschluss verbunden, aber ich bin mir nicht sicher, wie die Daten wird durchlaufen? Verwendet es tatsächlich die USB-HAL-Funktionen, um die empfangenen UART-Daten zu konvertieren?

Ich vermute, Sie fragen, wie Sie die MCU an einen USB-zu-Seriell-Konverter im FTDI-Stil anschließen können. Aber Ihr Chip hat eine eingebaute USB-Schnittstelle, von der ich ziemlich sicher bin, dass sie CDC unterstützen kann. Diese Frage scheint zu weit gefasst zu sein, und es sieht so aus, als müssten Sie möglicherweise viel mehr recherchieren, bevor Sie Ihre Leiterplatte entwerfen.
Möglicherweise möchten Sie diese kaufen und in kürzerer Zeit verwenden, um einen zu erstellen, oder andere Pfade in Betracht ziehen: electronic.stackexchange.com/questions/206521/… oder mobilewill.us/stm32-nucleo-and-dfu-usb-bootloading
Sie können die UART-Pins nicht mit einem USB-Anschluss verbinden. Sie müssen zwischen der Verwendung des nativen USB-Ports der MCU wählen, der am flexibelsten und billigsten, aber am schwierigsten zum Laufen zu bringen ist, oder einer USB<>UART-Lösung, die an die UART-Pins angeschlossen ist, was den Vorteil hat, dass Sie viel früher in Ihrer Firmware-Entwicklung arbeiten Prozess und viel unabhängiger von darin enthaltenen Fehlern und einigermaßen (wenn nicht vollständig) kompatibel mit Dingen wie dem Breakpoint-Debugging, das eine USB-Sitzung vollständig unterbrechen würde.
Ich empfehle, diese Frage nicht zu schließen, da sie (und ihre Antworten) ein grundlegendes Missverständnis dieser Technologien aufdeckt.
Danke für all die Optionen, ich kann jetzt meine Unkenntnis der Technologie sehen - ich glaube, ich war von der Funktionsweise des Nucleo abgeschreckt, aber das ist jetzt alles klar!

Antworten (2)

Sie können den UART Rx/Tx nicht direkt mit den DP/DN-Signalen am USB-Anschluss verbinden.

Sie haben grundsätzlich zwei Möglichkeiten:

  1. Fügen Sie Ihrer Anwendung Software hinzu, um das USB-Peripheriegerät auf Ihrem STM32 zu verwenden, um einen virtuellen COM-Port zu implementieren. ST hat dafür einige Beispielprojekte, daher ist es nicht besonders schwierig, aber die Implementierung wird wahrscheinlich einige Zeit in Anspruch nehmen. Ich denke, es gibt hier Beispielsoftware: https://www.st.com/en/embedded-software/stsw-stm32121.html . In diesem Fall würden Sie die USB-Pins am STM32 mit dem USB-Anschluss verbinden.

  2. Sie können einen Chip kaufen, um eine USB-zu-UART-Brücke bereitzustellen. FTDI stellt mehrere Versionen davon her, wie diese hier: https://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT230X.pdf

    Dies erfordert einen zusätzlichen Chip, ist aber wahrscheinlich die einfachere Option, um zum Laufen zu kommen. In diesem Fall würden Sie die UART-Pins mit den Rx/Tx-Pins des FTDI-Chips verbinden und dann das USB-Paar auf dem FTDI-Chip mit dem USB-Anschluss verbinden.

  3. Ich denke, es gibt auch Option 3. Sie könnten ein USB-zu-TTL-UART-Kabel kaufen und dieses an Ihr Board anschließen, anstatt den USB-Anschluss auf Ihr Board zu stecken, wenn Sie sowohl mit der Software als auch mit dem PCB-Design so einfach wie möglich werden möchten. Konfektionierte FTDI-Kabel: https://www.ftdichip.com/Products/Cables/USBTTLSerial.htm .

Option 3 ist wirklich dasselbe wie Option 2 – der Chip ist in der Kabelbaugruppe versteckt.
Ha! Ich sehe aus, als hätten wir zur gleichen Zeit die gleiche Antwort getippt. Egal, diese Frage wird wohl sowieso geschlossen :-)
@DaveTweed Ja, elektrisch endet es gleich.
@Bitsmack Haha. Ja, unsere Antworten sind überraschend aufeinander abgestimmt; aber deins war schneller, besser geschrieben und hat Bilder, also lobe ich dich!

Die UART- und USB-Peripheriegeräte sind völlig getrennte Einheiten.

  1. Wenn Sie einfachen UART wünschen, können Sie im Allgemeinen die TX-, RX- und GND-Pins auf einen Anschluss ausbrechen und diese dann mit einem geeigneten UART-fähigen Gerät verbinden. Sie müssen beide Geräte so konfigurieren, dass sie übereinstimmen, was Geschwindigkeit (Baudrate), Paritätstyp, Anzahl der Stoppbits usw. angeht.

  2. Wenn Sie möchten, dass Ihr Projekt ein USB-Gerät wird, ist es komplizierter. Zusätzlich zu ziemlich strengen Hardware-Richtlinien muss es alle USB-Protokoll-Sachen „unter der Haube“ handhaben. ST stellt eine USB-Gerätebibliothek zur Verfügung, die hier zu finden ist . Es braucht ein bisschen Lernen.

  3. Eine dritte Option ist die Verwendung eines USB-zu-UART-Konverters. In diesem Fall übernimmt der Konverter alle Anforderungen des USB- und UART-Protokolls. Es nimmt einfachen UART von Ihrem Mikrocontroller und leitet ihn über ein USB-Kabel an einen USB-Host. Sie können Schaltkreise auf Ihrer Platine einbauen, um die Konvertierung durchzuführen, oder Sie können einen externen Konverter kaufen, den jemand anderes bereits entwickelt hat.

Ein Beispiel für einen internen USB-Seriell-Konverter wäre ein FT232H . Sie müssten es und seine unterstützende Schaltung zu Ihrem Design hinzufügen:

USB_IC

Ein Beispiel für ein vorkonfektioniertes Konverterkabel wäre hier . In diesem Fall stecken Sie es in einen USB-Anschluss (vielleicht an einem PC) und verbinden das andere Ende mit den UART-Pins Ihres Geräts:

USB_adapter

Dies sind nur Beispiele. Es stehen viele interne und externe Konverter zur Auswahl.


Übrigens, schließen Sie UART-Signale nicht einfach an einen USB-Anschluss an. Es wird nicht nur nicht funktionieren, sondern die unterschiedlichen Spannungspegel können Ihr Gerät und/oder das entfernte Gerät zerstören.

Wenn ich das Kabel verwenden würde, wissen Sie, ob Pull-up-Widerstände erforderlich sind? Im Kabelschema des Datenblatts heißt es, dass Pullup-Widerstände nicht eingebaut sind, aber ich bin mir nicht sicher, ob sie notwendig sind? Habe ich auch Recht, dass der TX am Kabel mit dem RX meiner MCU und RTS mit CTS auf ähnliche Weise verbunden ist? Sind in diesem Sinne die RTS- und CTS-Pins für das Kabel erforderlich?