STM32 GPIO-Einstellungen verstehen

In der STM32 Standard Peripheral Library müssen wir den GPIO konfigurieren.

Aber es gibt 3 Funktionen, bei denen ich nicht sicher bin, wie ich sie konfigurieren soll;

  • GPIO_InitStructure.GPIO_Speed
  • GPIO_InitStructure.GPIO_OType
  • GPIO_InitStructure.GPIO_PuPd

In GPIO_Speed ​​gibt es 4 Einstellungen zur Auswahl

GPIO_Speed_2MHz  /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz

Woher weiß ich, welche Geschwindigkeit ich wähle? Gibt es Vor- oder Nachteile bei hoher oder niedriger Geschwindigkeit? (zB: Stromverbrauch?)

In GPIO_OType gibt es 2 Einstellungen zur Auswahl

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

Woher weiß ich, aus welcher ich wählen soll? und was ist open drain und push pull?

In GPIO_PuPd gibt es 3 Einstellungen zur Auswahl

GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP     // Pull up
GPIO_PuPd_DOWN   // Pull down

Ich denke, diese Einstellungen beziehen sich auf die anfängliche Einstellung von Push-Pull.

Verwandte: Wie man den "Open Drain"-Modus explizit auf Mikrocontrollern erzwingt, die ihn nicht nativ unterstützen, wie AVR/Arduino, PIC usw.: electronic.stackexchange.com/a/354993/26234

Antworten (2)

  • GPIO_PuPd (Pull-up / Pull-down)

In digitalen Schaltungen ist es wichtig, dass Signalleitungen niemals "schweben" dürfen. Das heißt, sie müssen immer in einem hohen Zustand oder einem niedrigen Zustand sein. Beim Schweben ist der Zustand unbestimmt und verursacht einige verschiedene Arten von Problemen.

Die Möglichkeit, dies zu korrigieren, besteht darin, einen Widerstand von der Signalleitung entweder zu Vcc oder Gnd hinzuzufügen. Wenn die Leitung nicht aktiv hoch oder niedrig angesteuert wird, bewirkt der Widerstand auf diese Weise, dass das Potential auf einen bekannten Pegel driftet.

Der STM32 (und andere Mikrocontroller) haben dafür eingebaute Schaltkreise. Auf diese Weise müssen Sie Ihrer Schaltung kein weiteres Teil hinzufügen. Wenn Sie beispielsweise "GPIO_PuPd_UP" wählen, entspricht dies dem Hinzufügen eines Widerstands zwischen der Signalleitung und Vcc.

  • GPIO_OType (Ausgangstyp):

Push-Pull: Dies ist der Ausgabetyp, den die meisten Leute als "Standard" betrachten. Wenn der Ausgang niedrig wird, wird er aktiv auf Masse "gezogen". Umgekehrt, wenn der Ausgang auf hoch gesetzt ist, wird er aktiv in Richtung Vcc "geschoben". Vereinfacht sieht das so aus:

drücken ziehen

Ein Open-Drain-Ausgang hingegen ist nur in eine Richtung aktiv. Es kann den Stift in Richtung Boden ziehen, aber es kann ihn nicht hoch treiben. Stellen Sie sich das vorherige Bild vor, aber ohne den oberen MOSFET. Wenn er nicht auf Masse zieht, ist der MOSFET einfach nicht leitend, wodurch der Ausgang schwebt:

offener Abfluss

Für diese Art von Ausgang muss der Schaltung ein Pull-up-Widerstand hinzugefügt werden, der bewirkt, dass die Leitung hoch geht, wenn sie nicht niedrig angesteuert wird. Sie können dies mit einem externen Teil tun oder indem Sie den GPIO_PuPd-Wert auf GPIO_PuPd_UP setzen.

Der Name kommt von der Tatsache, dass der Drain des MOSFET intern mit nichts verbunden ist. Diese Art der Ausgabe wird auch als "Open-Collector" bezeichnet, wenn ein BJT anstelle eines MOSFET verwendet wird.

  • GPIO_Geschwindigkeit

Grundsätzlich steuert dies die Anstiegsgeschwindigkeit (Anstiegs- und Abfallzeit) des Ausgangssignals. Je schneller die Anstiegsgeschwindigkeit ist, desto mehr Rauschen wird von der Schaltung abgestrahlt. Es empfiehlt sich, die Slew-Rate langsam zu halten und sie nur zu erhöhen, wenn Sie einen bestimmten Grund haben.

Vielen Dank! für die großartige Antwort;), könnten Sie etwas mehr über verschiedene Probleme erklären, wenn es sich im schwebenden Zustand befindet?
Die Idee ist, dass das Verweilen für eine beliebige Zeitspanne bei einer Zwischeneingangsspannung sowohl die oberen als auch die unteren FETs in einem Eingangsblock teilweise einschalten und die Stromversorgung durch sie teilweise kurzschließen kann, was zu einem übermäßigen Stromverbrauch oder (in besonders schweren Fällen) führt ) potenzielle Schäden.
@Tim Auch wenn die Leitungen schweben, ist es sehr einfach, die Spannungspegel zu stören. Durch einfaches Bewegen der Hand um die Schaltung kann sich der Zustand des Eingangs aufgrund kapazitiver Wechselwirkungen ändern ...
@bitsmack letzte Frage! ;), wann hochziehen oder runterziehen? Ein mögliches Szenario, wie Sie bereits erwähnt haben, ist die Verwendung von Pull-Up während des Open-Drain. Wie wäre es mit Pull-Down? hängt es von der Hardware ab oder ist es egal, ob Sie nach oben oder unten ziehen?
@Tim Es kommt wirklich auf die Anwendung an. Wenn Sie einen Schalter (oder Knopf) lesen, spielt es keine Rolle. Wenn Sie eine Schnittstelle zu anderen Komponenten herstellen, hängt dies von der Schnittstelle ab. Beispielsweise ist die CS-Leitung für SPI-Kommunikation aktiv-niedrig. In diesem Fall möchten Sie einen Pull-up-Widerstand, damit der CS niemals versehentlich niedrig wird. Sie könnten denken, dass dies unnötig ist, wenn Sie die Linie immer aktiv mit einem Mikrocontroller ansteuern. Aber was ist, bevor der Mikrocontroller initialisiert? Oder wenn es zurückgesetzt wird? Der Pull-up-Widerstand beseitigt jede Mehrdeutigkeit ...
Ich war in meinem letzten Kommentar zu Tim unklar. Ich meinte, dass auf der CS-Leitung ein externer Pull-up-Widerstand platziert werden sollte. Ich habe versucht, die allgemeine Verwendung von Pull-Up/Pull-Down zu demonstrieren und nicht zu implizieren, dass ein internes Pull-Up angemessen wäre.
ARM verkauft keine Mikrocontroller. Sie verkaufen Lizenzen und Designs für die CPU-Architektur. Ich denke du meinst STM32. Fürs Protokoll, ARM-CPUs sind in vielen anderen Chips wie NXP, Microship usw. vorhanden.
@Welgriv Ein fairer Punkt, danke. Ich habe es geändert :)

Die GPIO-Geschwindigkeit ist die maximale Frequenz, die der GPIO erzeugen kann. Niedrigere Einstellungen können Strom sparen.

Der Ausgangstyp ist, ob der Pin Hochs und Tiefs ausgibt (Push-Pull) oder ob der Ausgang das Gate eines FET einschaltet, der mit dem Pin am Drain verbunden ist (Open Drain). Dies kann praktisch sein, wenn Sie einen angeschlossenen Stift benötigen, um einen Bus nach unten ziehen zu können, ohne andere Stifte kurzzuschließen.

Pull-up-Widerstände verbinden den Pin-Ausgang mit der Stromschiene, und Pull-down verbindet ihn über einen Widerstand mit Masse. Dies steuert unter anderem die Spannung des Pins, selbst wenn sich das Bit in einem hochohmigen Zustand befindet. Dies ist wichtig, um beispielsweise einen Punktschalter zu verwenden, um einen digitalen Eingangswert zu ändern. Auch bei geöffnetem Schalter ist die Eingabe vorhersehbar.