Edit : Diese Frage ist falsch. Der stm325105 hat nur einen Wakeup-Pin. Andere ST-Teile haben jedoch mehr als einen Wakeup-Pin, sodass die gegebene Antwort für diese gültig ist.
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, wacht die CPU auf.
Das Problem ist, dass ich möchte, dass die CPU verschiedene Dinge tut, je nachdem, welcher Wakeup-Eingang ausgelöst wurde. Gemäß 5.3.5 aus dem ST stm32f105xx-Referenzhandbuch werden keine Register aufbewahrt, außer einem Statusregister, das angibt, dass wir aufgeweckt wurden (aber nicht von wem) und 42 Sicherungsregister.
Der Standby-Modus ermöglicht den niedrigsten Stromverbrauch. Es basiert auf dem Deepsleep-Modus des Cortex ® -M3, bei dem der Spannungsregler deaktiviert ist. Die 1,8-V-Domäne wird folglich abgeschaltet. Außerdem werden die PLL, der HSI-Oszillator und der HSE-Oszillator abgeschaltet. SRAM- und Registerinhalte gehen verloren, mit Ausnahme von Registern in der Sicherungsdomäne und der Standby-Schaltung.
Nach dem Aufwachen aus dem Standby-Modus wird die Programmausführung auf die gleiche Weise neu gestartet wie nach einem Reset (Boot-Pins-Abtastung, Vektor-Reset wird abgerufen usw.). Das SBF-Statusflag im Leistungssteuerungs-/Statusregister (PWR_CSR) zeigt an, dass sich die MCU im Standby-Modus befand.
Dieser ST-Forenbeitrag, Wie bestimme ich den Ursprung von Wakeup from Standby? , deutet darauf hin, dass ich nicht erkennen kann, welches Wakeup in der Software ausgelöst wurde. Ich habe dort keine weiteren Beiträge gefunden, die mehr Erleuchtung brachten.
Wie kann ich Software oder Hardware verwenden, um nach dem Aufwachen festzustellen, welcher Weckeingang ausgelöst wurde?
Ich kenne die Details dieses ST-Teils nicht, daher gehe ich davon aus, dass Ihre Beschreibung korrekt ist.
Der Prozessor sollte sehr bald aufwachen, nachdem eine der Tasten gedrückt wurde. Dies sollte insbesondere gelten, wenn es einen internen RC-Oszillator hat. Selbst wenn Sie irgendwann aus Genauigkeitsgründen von einem Kristall laufen müssen, können Sie das Teil vielleicht von einem internen RC starten lassen und später zum Kristall wechseln. Es gibt Mikros, die so etwas können, obwohl ich nicht weiß, ob Ihres dazu gehört.
In jedem Fall lesen Sie beide Eingänge so schnell wie möglich nach dem Aufwachen. Sofern an diesem ST-Mikro nichts Ungewöhnliches ist, sollte dies zwischen einer ms und einigen 10 ms ab dem Tastendruck liegen.
Um sicherzustellen, dass die Leitung immer noch niedrig ist, verwenden Sie einen Kondensator, um die Leitung für bis zu 100 ms nach dem Loslassen der Taste niedrig zu halten.
Nehmen wir zum Beispiel an, dass der garantierte logisch niedrige Eingangspegel 20 % der Versorgungsspannung beträgt. Die Leitung wird mit einem Widerstand hochgezogen und hat einen Kondensator gegen Masse. Der Taster schließt die Leitung gegen Masse kurz. Die Leitung schwebt daher hoch und wird aktiv auf Masse gezwungen, wenn der Knopf gedrückt wird. Beim Loslassen des Tasters fällt die Spannung exponentiell zur Versorgung hin ab.
Das Abfallen auf 20 % des Endwerts erfolgt in 0,22 Zeitkonstanten. Angenommen, Sie möchten sicherstellen, dass die Leitung nach einem Tastendruck 100 ms lang niedrig aussieht. Das bedeutet, dass die RC-Zeitkonstante 450 ms betragen muss. Bei 100 kΩ Pullup müsste die Kapazität 4,5 µF betragen. Eine 10-V-Kappe mit 4,7 µF würde also gut funktionieren.
Zusammengefasst ist hier die Schaltung:
PlasmaHH
folgte Monica zu Codidact
Daniel Näslund
folgte Monica zu Codidact