STM32 Grundlegendes zu GPIO-Einstellungen

41

In der STM32 Standard Peripheral Library müssen wir das 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 der GPIO_Speed stehen 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, aus welcher Geschwindigkeit ich wähle? Gibt es Vor- oder Nachteile bei hoher oder niedriger Geschwindigkeit? (zB: Stromverbrauch?)

Im GPIO_OType stehen 2 Einstellungen zur Auswahl

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

Wie kann man wissen, aus welchen man wählen soll? und was ist open drain und push pull?

Im GPIO_PuPd stehen 3 Einstellungen zur Auswahl

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

Ich denke, diese Einstellungen hängen mit der anfänglichen Einstellung von Push-Pull zusammen.

Tim
quelle
Verwandte: Wie explizit zwingen „open drain“ -Modus auf Mikrocontrollern , die nicht nativ sie unterstützen, wie AVR / Arduino, PIC, etc: electronics.stackexchange.com/a/354993/26234
Gabriel Staples

Antworten:

45
  • GPIO_PuPd (Pull-Up / Pull-Down)

    In digitalen Schaltkreisen ist es wichtig, dass Signalleitungen niemals "floaten" dürfen. Das heißt, sie müssen sich immer in einem hohen oder niedrigen Zustand befinden. Im schwebenden Zustand ist der Zustand unbestimmt und verursacht einige verschiedene Arten von Problemen.

    Um dies zu korrigieren, fügen Sie einen Widerstand von der Signalleitung entweder zu Vcc oder zu Gnd hinzu. Auf diese Weise bewirkt der Widerstand, dass das Potential auf einen bekannten Pegel abweicht, wenn die Leitung nicht aktiv hoch oder niedrig gesteuert wird.

    Der ARM (und andere Mikrocontroller) verfügen dazu über eine integrierte Schaltung. Auf diese Weise müssen Sie Ihrer Schaltung keinen weiteren Teil hinzufügen. Wenn Sie beispielsweise "GPIO_PuPd_UP" wählen, ist es gleichbedeutend damit, einen Widerstand zwischen der Signalleitung und Vcc hinzuzufügen.

  • GPIO_OType (Ausgabetyp):

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

    drücken ziehen

    Ein Open-Drain-Ausgang ist dagegen nur in eine Richtung aktiv. Es kann den Stift in Richtung Boden ziehen, aber nicht hoch fahren. Stellen Sie sich das vorherige Bild vor, jedoch ohne den oberen MOSFET. Wenn der MOSFET nicht an Masse gezogen wird, ist er einfach nicht leitend, wodurch der Ausgang schwimmt:

    opendrain

    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 tief 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 MOSFETs intern mit nichts verbunden ist. Diese Art von Ausgang wird auch als "Open-Collector" bezeichnet, wenn ein BJT anstelle eines MOSFET verwendet wird.

  • GPIO_Speed

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

bitsmack
quelle
Vielen Dank! Erläutern Sie für die großartige Antwort etwas mehr die verschiedenen Probleme, wenn es sich im schwebenden Zustand befindet.
Tim
3
Die Idee ist, dass das Verweilen für eine beliebige Zeitdauer bei einer mittleren Eingangsspannung sowohl den oberen als auch den unteren FET in einem Eingangsblock teilweise einschalten und die Stromversorgung durch sie teilweise kurzschließen kann, was zu einem übermäßigen Stromverbrauch führt oder (in besonders schweren Fällen) ) möglicherweise beschädigen.
Chris Stratton
@ Tim Ja, was Chris Stratton gerade gesagt hat :)
bitsmack
3
@Tim Auch wenn die Leitungen schweben, können die Spannungspegel sehr leicht gestört werden. Nur mit der Hand über den Stromkreis zu winken, kann den Zustand des Eingangs aufgrund kapazitiver Wechselwirkungen
ändern
1
@Tim Es kommt wirklich auf die Anwendung an. Wenn Sie einen Schalter (oder eine Taste) lesen, spielt dies keine Rolle. Wenn Sie eine Schnittstelle zu anderen Komponenten herstellen, hängt dies von der Schnittstelle ab. Beispielsweise ist für die SPI-Kommunikation die CS-Leitung aktiv-niedrig. In diesem Fall möchten Sie einen Pull-up-Widerstand, damit der CS nie versehentlich auf Low geht. Sie könnten denken, dass dies unnötig ist, wenn Sie die Leitung immer aktiv mit einem Mikrocontroller steuern. Aber wie sieht es aus, bevor der Mikrocontroller initialisiert wird? Oder wenn es zurückgesetzt wird? Der Pull-up-Widerstand beseitigt alle Unklarheiten ...
bitsmack
5

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

Der Ausgabetyp ist, ob der Pin Hochs und Tiefs aktiviert (Push-Pull) oder ob der Ausgang das Gate eines FET einschaltet, der an den Pin am Drain angeschlossen ist (Open Drain). Dies kann praktisch sein, wenn Sie einen angeschlossenen Pin benötigen, um einen Bus nach unten zu ziehen, ohne andere Pins kurzschließen zu müssen.

Pull-Up-Widerstände verbinden den Pin-Ausgang mit der Stromschiene und Pull-Down-Widerstände verbinden 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, wenn Sie beispielsweise einen Punktschalter verwenden, um einen digitalen Eingangswert zu ändern. Auch bei geöffnetem Schalter ist der Eingang vorhersehbar.

Scott Seidman
quelle