Ermitteln Sie, welcher Momentschalter das Aufwecken einer STM32-CPU verursacht hat


10

Bearbeiten : Diese Frage ist falsch. Der stm325105 hat nur einen Weckstift. Andere ST-Teile haben jedoch mehr als einen Weckstift, sodass die angegebene Antwort für diese gilt.


Ich habe einen stm32f105, der zwei Momenttasten hat, die mit den Weckeingängen verbunden sind. Der Prozessor wird in den STANDBY-MODUS versetzt. Wenn eine der Tasten gedrückt wird oder der RTC-Timer ausgelöst wird, wird die CPU aktiviert.

Das Problem ist, dass ich möchte, dass die CPU verschiedene Dinge tut, je nachdem, welcher Weckeingang ausgelöst wurde. Gemäß 5.3.5 aus dem ST stm32f105xx-Referenzhandbuch bleiben keine Register erhalten, außer einem Statusregister, das angibt, dass wir aufgeweckt wurden (aber nicht von wem), und 42 Sicherungsregistern.

Der Standby-Modus ermöglicht den niedrigsten Stromverbrauch. Es basiert auf dem Cortex ® -M3-Tiefschlafmodus mit deaktiviertem Spannungsregler. Die 1,8-V-Domäne wird folglich ausgeschaltet. Die PLL, der HSI-Oszillator und der HSE-Oszillator sind ebenfalls ausgeschaltet. SRAM- und Registerinhalte gehen mit Ausnahme von Registern in der Sicherungsdomäne und in der Standby-Schaltung verloren.

Nach dem Aufwachen aus dem Standby-Modus wird die Programmausführung auf die gleiche Weise wie nach einem Reset neu gestartet (Boot-Pins-Abtastung, Vektor-Reset werden abgerufen usw.). Das SBF-Statusflag im Leistungssteuerungs- / Statusregister (PWR_CSR) zeigt an, dass sich die MCU im Standby-Modus befand.

Dieser ST-Forumsbeitrag, Wie man den Ursprung von Wakeup aus dem Standby-Modus ermittelt? schlägt vor, dass ich nicht erkennen kann, welches Aufwecken in der Software ausgelöst wurde. Ich habe dort keine anderen Beiträge gefunden, die mehr Aufklärung gaben.

Wie kann ich mithilfe von Software oder Hardware nach dem Aufwachen feststellen, welcher Aufweckeingang ausgelöst wurde?


1
Lassen

1
Einige STM32F105-Varianten wurden nachgeschlagen, sie haben nur EINEN Weckstift. Welchen Teil meinst du genau und welche Stifte?
Berendi - Protest

@berendi Mein STM32F105 hat, wie Sie sagen, nur einen Weckstift. Es ist im STOP-Modus konfiguriert, nicht im STANDBY-Modus, wie in meiner Frage angegeben. Es verwendet EXTI-Ereignisse zum Aufwachen. Ich hatte die Bedeutung dieser "EXTI-Ereignisse" mit "Weckstiften" verwechselt. Aber ich denke, die Antwort von Olin ist immer noch nützlich, wenn jemand im STANDBY-MODUS zwischen "durch RTC geweckt" oder "durch Weckstift geweckt" unterscheiden muss. Hat jemand Vorschläge, wie man diese Frage bearbeitet, um sie an Olins Antwort anzupassen? Eine kleine Notiz am Anfang, die beschreibt, was los ist? En komplette Nachbearbeitung? Oder sollte ich einfach die ganze Frage löschen?
Daniel Näslund

1
Es gibt ST-Controller mit mehr als einem Wakeup-Pin wie F0, F3, L0 oder L1, bei denen die Quelle nach dem Verlassen des Standby-Modus tatsächlich nicht bestimmt werden kann, da sie ein einziges Wakeup-Eingangsflag haben. ST hat dieses Versehen zuerst in der neuesten F7- und L4-Serie korrigiert, die separate Flags für jeden Weckeingang haben.
Berendi - Protest

Antworten:


11

Ich kenne die Details dieses ST-Teils nicht, daher gehe ich davon aus, dass Ihre Beschreibung korrekt ist.

Der Prozessor sollte sehr bald nach dem Drücken einer der beiden Tasten aufwachen. Dies sollte insbesondere dann zutreffen, wenn es einen internen RC-Oszillator hat. Selbst wenn Sie aus Genauigkeitsgründen irgendwann von einem Kristall laufen müssen, können Sie das Teil möglicherweise von einem internen RC aus starten lassen und später zum Kristall wechseln. Es gibt Mikros, die solche Dinge tun können, obwohl ich nicht weiß, ob deins eines davon ist.

In jedem Fall lesen Sie beide Eingänge so bald wie möglich nach dem Aufwecken. Sofern dieses ST-Mikro nichts Ungewöhnliches aufweist, sollte es vom Knopfdruck zwischen einer ms und einigen 10 ms liegen.

Um sicherzustellen, dass die Leitung immer noch niedrig ist, verwenden Sie einen Kondensator, um die Leitung nach dem Loslassen der Taste bis zu 100 ms lang niedrig zu halten.

Angenommen, der garantierte logisch niedrige Eingangspegel beträgt 20% der Versorgungsspannung. Die Leitung wird mit einem Widerstand hochgezogen und hat einen Kondensator gegen Masse. Die Taste schließt die Leitung gegen Masse kurz. Die Leine schwebt daher hoch und wird beim Drücken der Taste aktiv zur Erdung gezwungen. Wenn die Taste losgelassen wird, fällt die Spannung in Richtung Versorgung exponentiell ab.

Der Abfall auf 20% des Endwerts erfolgt in 0,22 Zeitkonstanten. Nehmen wir an, Sie möchten sicherstellen, dass die Leitung nach einem Tastendruck 100 ms lang niedrig aussieht. Das heißt, die RC-Zeitkonstante muss 450 ms betragen. Bei einem Pullup von 100 kΩ müsste die Kapazität 4,5 µF betragen. Eine 10-V-Kappe mit 4,7 µF würde also gut funktionieren.

Zusammenfassend ist hier die Schaltung:


1
Sollte umgekehrt sein, wachen STM32s mit steigender Flanke auf. Außerdem beginnen sie immer mit der internen Uhr, das Umschalten auf externen Kristall und pll erfolgt durch die Software. Das Problem liegt im Startcode, der vom CubeMX-Tool bereitgestellt oder generiert wird, was es etwas schwierig macht, Benutzercode vor dem Einrichten des Uhrbaums auszuführen.
Berendi - Protest
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.