Empfehlung für Standardeinstellungen für unbenutzte Pins auf einem STM32 (ARM Cortex M3) - Pull up/Pull down?

Wir verwenden derzeit verschiedene Varianten der STM32-Mikrocontroller-Familie. Ich möchte folgendes wissen:

  1. Was sind die empfohlenen Standardeinstellungen für Pins der Mikrocontroller im Allgemeinen, wenn Sie die Möglichkeit haben, sowohl Pull-Ups als auch Pull-Downs auszuwählen? Was sind die Vor- und Nachteile, mit dem einen oder anderen zu gehen? (Vorausgesetzt, Sie richten sie standardmäßig als Eingänge ein)

  2. Insbesondere würde ich gerne wissen, was mit unbenutzten Pins für die STM32-Mikrocontroller-Familie zu tun ist. Es ist mir klar, dass wir die Pins nicht schwebend lassen sollten (was alles ist, was das Datenblatt sagt, :( ), aber sollte ich sie auf Eingabe mit Pull-Ups oder Eingaben mit Pull-Downs einstellen? Insbesondere möchte ich eine Einstellung zu wählen, die am wenigsten anfällig für ESD ist und möglichst auch am wenigsten Strom verbraucht.

  3. Sollten wir uns bei kritischen Pins auf die Firmware verlassen, um die Pins korrekt auf den korrekten Standardzustand einzustellen, oder sollte diese Verantwortung bei der externen Hardware liegen (Anschließen externer Pull-Ups oder Pull-Downs)? Wenn die für die externen Widerstände gewählten Werte größer als die internen Pull-Ups oder Pull-Downs sind, spielt die Einstellung in der Firmware keine Rolle.

Der Vorteil, den ich für das oben genannte tun kann, ist, dass wir uns nicht auf die Firmware verlassen, um den Pin korrekt einzurichten, wenn das Mikro aus irgendeinem Grund (fehlerhafte Hardware oder dergleichen) nicht richtig initialisiert wird.

Der Nachteil, den ich sehe, ist, dass es mehr kostet, dies zu tun, ist Hardware.

Jedes Licht, das Sie auf das Obige werfen können, wird wirklich geschätzt.

Vielen Dank..

Warum nicht unbenutzte Pins als Ausgänge setzen? Das würde das Pull-up vs. Pull-down-Problem beseitigen.
Zu beachten: „Bei jedem Reset-Ereignis sind alle GPIOs schwebende Eingänge. Dies verhindert eine versehentliche Beschädigung der GPIOs im Notfall.“ embedded-lab.com/blog/stm32-gpio-ports-insights

Antworten (3)

Diese Antwort ist nicht STM32-spezifisch, sondern basiert auf Erfahrungen und vielen solchen Diskussionen über viele (viele) Jahre. Andere können dies ergänzen - es deckt die Hauptpunkte ab (glaube ich), ist aber möglicherweise nicht vollständig.

Es ist ermutigend, jemanden zu sehen, der diese einfachen, aber grundlegenden Fragen stellt und ein Bewusstsein dafür zeigt, wie solche „kleinen Dinge“ im wirklichen Leben „banden“ können.

dh "Wenn das Mikro nicht richtig initialisiert ..." heißt eigentlich " ... wenn das Mikro nicht richtig initialisiert ..." :-) - und es ist offensichtlich, dass Sie das merken.

So:

  • Die Verwendung von externem Pullup oder Pulldown ist für diejenigen unerlässlich, die wirklich daran interessiert sind, ein gut definiertes Ergebnis zu erzielen. Dies ist das größte Muss hier. Alles andere ist ein Bonus. dh die Einstellung auf Eingänge mit internem Pullxxx ist ein Kompromiss, der fast immer funktioniert.
    ABER wenn "fast immer" für Ihr Design nicht gut genug ist, brauchen Sie externe Pull-XXXs.

  • Pullup oder Down scheint kein überwältigend besseres Ergebnis zu haben. Sie kann zwischen ICs variieren, kann aber aus dem Datenblatt ermittelt werden. Wenn alle Dinge gleich sind (wie sie auch sein mögen), würde ich einen Pulldown bevorzugen, da möglicherweise geringere Leckströme zu externen Schaltkreisen des Geräts auftreten - dies ist jedoch bei einer konform beschichteten Leiterplatte und / oder einer harmlosen Umgebung wahrscheinlich minimal.

  • Vielleicht möchten Sie sich die Startaktion ansehen, wenn Sie sich wirklich dafür interessieren. zB wird ein hochgezogener Stift niedrig beginnen und irgendwann hoch gehen. Ein heruntergezogener Stift wird wahrscheinlich die ganze Zeit niedrig bleiben. Dies ist wahrscheinlich nicht wichtig, wird aber der Vollständigkeit halber erwähnt.

  • Die ESD-Empfindlichkeit ist gerätespezifisch, sehr wahrscheinlich symmetrisch und begünstigt im Durchschnitt über viele Prozessoren wahrscheinlich das Herunterziehen, da Treiber dazu neigen, besser als die Quelle zu sinken, wenn sie asymmetrisch sind. Wenn Sie sich sehr für ESD interessieren, möchten Sie möglicherweise niedrige Ausgänge mit Pulldowns verwenden, da ein Pfad mit niedriger Impedanz (wahrscheinlich) einen besseren ESD-Schutz bietet. Wenn Sie sich jedoch sehr für ESD interessieren, sollten Sie auf andere Weise dafür entwerfen und sich nicht auf den In-IC-Schutz als Hauptschutz verlassen.

  • Zu Frage 3 - Externe Pullxxxs sind wünschenswert, aber es scheint sicher zu sein, Werte zu verwenden, die am oberen Ende des richtigen Designs liegen, und dann interne xxxs parallel zu verwenden, falls gewünscht. Da interne Pull-xxxs jedoch oft einen 2:1-Effektivwert haben, können Sie den größten R und den kleinsten Strom erhalten, indem Sie nur extern verwenden. Was Sie natürlich vermeiden möchten, sind externe Klimmzüge und interne Klimmzüge oder umgekehrt - aber das ist wahrscheinlich kein Problem.

  • Wenn ich sage " ... limitierendes High-End des richtigen Designs ... " meine ich genau das und nicht "jenseits der Begrenzung ...". dh der Pin wird einen spezifizierten Widerstandswert haben, der es ermöglicht, dass die Vin-Spezifikation des ungünstigsten Falls erfüllt wird. Ein größerer Widerstand kann weniger Strom im Widerstand aufnehmen, kann jedoch beginnen, den internen Schalter sehr leicht einzuschalten. Das heißt, es kann sein, dass es einen Kompromiss zwischen Rpulldown_current und dem niedrigsten Gesamtstrom gibt, wenn der interne Treiber beginnt, einen Leckstrom (der extrem klein sein wird) zu sehen, der den Strom zum Treiber erhöht und ihn sehr leicht weiterflüstert.

  • Wenn Sie z. B. Pulldown verwenden, finden Sie möglicherweise eine geringere Leistung, um den Pin auf Ausgang zu setzen und ihn niedrig zu treiben, aber dies ist eine Option, über die zu gegebener Zeit entschieden werden kann.

  • Fast nebenbei - lassen Sie NIEMALS zu, dass Schutzdioden während des Betriebs "signifikante Ströme" verarbeiten. Ihnen dies zu gestatten, kann zu völlig unerklärlichen Prozessoraktionen führen. Je geringer der Strom, desto geringer ist die Wahrscheinlichkeit, dass etwas schief geht – und desto schwieriger ist es, es zu finden, wenn es passiert.

Sehr aufschlussreiche Antwort. Ich danke Ihnen sehr. Können Sie dies etwas näher ausführen - "Wenn Sie sich sehr für ESD interessieren, möchten Sie möglicherweise niedrige Ausgänge mit Pulldowns verwenden - da ein Pfad mit niedriger Impedanz (wahrscheinlich) einen besseren ESD-Schutz bietet"? Wenn Sie auf einen Ausgang einstellen - würden Sie standardmäßig auf Open Drain oder Push Pull (High / Low) gehen?
@IntelliChick Der springende Punkt beim Einstellen eines Ausgangs ist, ihn bei niedriger Impedanz in einen bekannten Zustand zu treiben, was bedeutet, dass Sie ihn definitiv NICHT auf Open Drain einstellen würden, insbesondere auf Open Drain mit einem HI-Ausgang, da dies nur eine hohe Impedanz ist.
@DKNguyen 8+ Jahre später ... :-). Und Intellichick wurde in diesen über 8 Jahren nicht gesehen - ABER es lohnt sich immer noch, Ihren Kommentar hinzuzufügen.
@RussellMcMahon Befreie dich aus dem Gefängnis, das die konventionelle Zeitwahrnehmung ist.
@DKNguyen Ich habe vor langer Zeit Unholde mit Photonen gemacht. Wir leben jetzt im Ewigen. Ich schaffe es jedoch immer noch nicht, das zu erreichen, was sie tun. ALLE Photonen leben in einer zeitlosen, "raumlosen" Zusammengehörigkeit. Ein Photon, das Sol verlässt, und ein Photon, das Alpha Centauri Proxima verlässt, sind zu jeder Zeit zusammen, kennen nie die Bedeutung von zuerst oder zuletzt ankommen oder Zeit dazwischen. Wenn ich sie frage, wie sie das erreichen können, lächeln sie nur. || Ein stetiges Rinnsal von Leuten kommentiert meine Posts viele Jahre nachdem sie gepostet wurden. Oder sogar bearbeiten. Deins bestimmt auch.

Wofür optimieren Sie? Die Kostenoptimierung schreibt vor, dass Sie ungenutzte Pins auf Ausgänge setzen. Die Zuverlässigkeitsoptimierung schreibt vor, dass alle Pin-Ebenen definiert sind, selbst in der kurzen Zeit, bevor die Firmware die Möglichkeit hat, ungenutzte Pins auf das zu setzen, was sie für angemessen hält.

Ich musste einmal die Zuverlässigkeitsberechnungen einer Prozessorplatine überprüfen. Es war gut gestaltet, mit Entkopplungskappen überall und Pull-to-whatever-Widerständen an allen I / O-Pins. Der Zuverlässigkeitsingenieur zückte sein Handbuch, addierte die Ausfallraten aller beteiligten Komponenten und kam auf eine Zahl, die von den Ausfallraten der passiven Komponenten dominiert wurde. Diese Zahl war höher als die Anforderung, also hatten wir ein Problem. Entfernen Sie diese Widerstände, und die Figur wäre in Ordnung. Aber bei diesem Vorschlag fingen die Elektroingenieure an, vor Wut zu schreien (zu Recht, meiner Meinung nach). Ich erinnere mich nicht, wie die Geschichte endete; Ich glaube, wir sind zum Kunden gegangen und haben darum gebeten, die Ausfallraten der Widerstände aus der Berechnung wegzulassen, weil sie keinen nennenswerten Strom führten.

Ich konfiguriere einfach unbenutzte Pins als Ausgänge und setze sie niedrig.

Würden Sie sie normalerweise auf Push-Pull oder Open Drain einstellen? Und in beiden Fällen würden Sie sie auf niedrig setzen? Können Sie mir sagen, warum Sie sich für eines entscheiden würden?
@Leon Heller - das erfüllt den Test "funktioniert normalerweise", schlägt jedoch fehl, "wenn der Mikroprozessor nicht richtig initialisiert wird oder wenn Murphy ein bisschen halb zufällig umkippt, wie er es gelegentlich tut. Ihr 'Pin auf Ausgang gesetzt und auf niedrig gesetzt' PLUS Pulldowns , funktioniert.