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?
Antworten:
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:
quelle