Wie wähle ich die maximale UART-Ausgangsgeschwindigkeit?

Wenn ich ein Projekt in STM32CubeMX öffne und einen UART konfiguriere, gibt es eine maximale Ausgabegeschwindigkeitskonfiguration (unter GPIO-Einstellungen ), die standardmäßig auf Very High eingestellt ist . Die Optionen sind:

  • Niedrig
  • Mittel
  • Hoch
  • Sehr hoch

Im STM32CubeMX-Benutzerhandbuch steht Folgendes über die maximale Ausgabegeschwindigkeit :

Maximale GPIO-Ausgangsgeschwindigkeit (nur für Kommunikationsperipherie)
Zur Optimierung des Stromverbrauchs ist sie standardmäßig auf Niedrig eingestellt und kann je nach Anwendungsanforderungen auf eine höhere Frequenz geändert werden.

Aber es ist tatsächlich nur für reguläre Ausgangs-GPIOs auf "Low" eingestellt. Für UART TX / RX-Pins ist es tatsächlich auf Very High eingestellt.

Dazu habe ich ein paar Fragen:

  1. Welche "Anwendungsanforderungen" würden eine höhere Einstellung erfordern?
  2. Warum sind diese Einstellungen in UART standardmäßig sehr hoch und in Output GPIO niedrig?
  3. Am wichtigsten ist, können 2 UARTs mit unterschiedlichen maximalen Ausgangsgeschwindigkeiten sprechen (kommunizieren) oder sollten sie gleich konfiguriert werden? Welche Auswirkungen würden sich ergeben, wenn der UART jeder Seite in Bezug auf diese Einstellung unterschiedlich konfiguriert wäre?

Antworten (2)

Die GPIO-Geschwindigkeitseinstellung konfiguriert nur die Antriebsstärke oder die Fähigkeit, wie viel der Pin Strom liefern und senken kann. Mehr Strom bedeutet schnellere Signalübergänge zu schwereren kapazitiven Lasten.

1) Zum Beispiel Ansteuern eines FET-Gatters, das hochkapazitiv ist und nur halbwegs eingeschaltet sein muss

2) Jemand hat diese Standardeinstellungen oft gewählt, nur weil Sie einige grundlegende Standardeinstellungen benötigen, die meistens funktionieren. Die Verwendung von beispielsweise 3 Megabaud mit langen Drähten für das Debug-UART könnte sicherer sein, um eine hohe Treiberfähigkeit zu haben, aber das Blinken einer LED am GPIO einmal pro Sekunde spielt keine Rolle, welche Einstellung verwendet wird.

3) Natürlich können sie kommunizieren, wenn die verwendete Baudrate langsam genug ist, dass die Signalanstiegsgeschwindigkeit nicht viel zum Fehler beiträgt. Die schwächste Antriebsstärke kann möglicherweise bis zu etwa 2 MHz arbeiten, abhängig davon, welche MCU verwendet wird.

Woher weiß ich in Bezug auf 3, ob meine Baudrate "langsam genug" ist? Es ist 115200
Sie sehen sich die Zahlen in Datenblättern an. Wenn die schwächste Einstellung eine Frequenz von mindestens 2 MHz ausgeben kann, ist das ungefähr das 17-fache der benötigten 115200-Bitrate. Ausgehend von der maximalen Anstiegs- / Abfallzeit von 100 ns beträgt Ihre Bitperiode 8680 ns, sodass Ihre Bits fast 87-mal länger sind. Wenn Sie also etwa 1% der Bitzeit für das Ändern des Zustands aufwenden, ist dies in UARTs nichts, da UART den Pin abtastet an 16-fache Bitrate oder etwa alle 543 ns bei 115200 Bitrate.

Dies entspricht der Treiberstärkekonfiguration des GPIO-Pins, konfiguriert durch die OSPEEDR-Registerbits. Für jeden Pin gibt es 4 mögliche Einstellungen. Die Wahl eines stärkeren Ausgangsantriebs ermöglicht eine höhere maximale Betriebsfrequenz (weil die Übergänge schneller erfolgen), führt jedoch zu einem höheren Stromverbrauch, wenn der Stift umschaltet, und zu höheren EMI-Emissionen. Geringere Festigkeit bedeutet geringere EMI, geringeren Stromverbrauch und geringere Höchstgeschwindigkeit.

Werfen Sie einen Blick auf das Datenblatt der spezifischen MCU, die Sie verwenden, um zu überprüfen, was genau dies bedeutet. Zum Beispiel für STM32F405/407 hier (Kapitel 5.3.16: E/A-Port-Eigenschaften , Abschnitt Ein-/Ausgangs-AC-Eigenschaften ):

Geben Sie hier die Bildbeschreibung ein

Sie sehen also, dass Sie selbst bei der minimalen Einstellung im genannten schlimmsten Fall mit 2 MHz rechnen können. Dies ist wahrscheinlich viel höher als das, wofür Ihr UART bereits konfiguriert ist, sodass Sie es eigentlich nicht auf "sehr hoch" einstellen müssen. Sie tun es wahrscheinlich standardmäßig, um auf der sicheren Seite zu sein, aber Sie haben Ihre Baudrate nicht auf 100 Mbit / s konfiguriert, oder?

Als allgemeiner Rat sollten Sie diese Einstellung auf „Niedrig“ belassen, es sei denn, dies ist wirklich erforderlich.

Jetzt können natürlich zwei UART, die mit unterschiedlichen Einstellungen konfiguriert sind, miteinander kommunizieren (vorausgesetzt, die Bitrate ist niedriger als die maximale Geschwindigkeit, die der GPIO gemäß der obigen Tabelle und der von Ihnen gewählten Einstellung aushalten kann). Der mit einer stärkeren Einstellung konfigurierte UART hat einen viel schärferen Ausgang als der andere und strahlt mehr EMI aus, aber sie können miteinander sprechen.