Die STM32F4-MCU verfügt über eine Brownout-Reset-Funktion. Gemäß dem Handbuch , Abschnitt 5.2.2, wird ein Geräte-Reset erzeugt, wenn die Versorgungsspannung VDD unter den ausgewählten VBOR-Schwellenwert fällt. Nach dem Reset kann ich das BORRSTF-Flag im Register RCC_CSR (siehe Abschnitt 6.3.21 des Handbuchs) überprüfen, um festzustellen, ob der Reset auf einen Brownout zurückzuführen ist.
Ich möchte dieses Verhalten im STM32F100 simulieren, dem eine Brownout-Reset-Funktion fehlt. Meine Idee ist, den programmierbaren Spannungsdetektor (Abschnitt 4.2.2 im Handbuch ) zu verwenden, um einen Interrupt in EXTI-Zeile 16 zu generieren. Wenn der Interrupt-Handler aufgerufen wird, erzeuge ich einen Software-Reset; Nach dem Reset kann ich anhand des SFTRSTF-Flags im Register RCC_CSR verifizieren, dass der Grund ein Software-Reset war (siehe Abschnitt 6.3.10 des Handbuchs). Da ich an keiner anderen Stelle in meinem Code einen Software-Reset generiere, kann ich sicher sein, dass es an einem Brownout lag.
Folgendes möchte ich wissen:
Ich sehe keinen größeren Fehler in diesem Design, bedenke jedoch einige Einschränkungen:
Soweit ich weiß, müssen Reset-Flags manuell gelöscht werden (zumindest in F4), also: