Simulieren Sie den Brownout-Reset des STM32F4 mit dem STM32F100

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:

  • Kann jemand einen Fehler in dieser Idee sehen?
  • Würde ein tatsächlicher Brownout das fragliche SFTRSTF-Flag löschen?

Antworten (1)

Ich sehe keinen größeren Fehler in diesem Design, bedenke jedoch einige Einschränkungen:

  • Da dies ein softwarebasierter Brownout-Reset ist (nicht in Optionsbytes konfiguriert), funktioniert es nicht, bis Ihr Code es konfiguriert (so dass ein Spannungsabfall direkt nach dem Einschalten nicht erkannt wird).
  • Da es Interrupts verwendet, funktioniert es nicht, wenn Interrupts mit höherer oder gleicher Interrupt-Priorität bereits ausgeführt werden.

Soweit ich weiß, müssen Reset-Flags manuell gelöscht werden (zumindest in F4), also:

  • Brownout löscht das Software-Reset-Flag nicht,
  • Sie müssen dieses Flag beim Start löschen, andernfalls können Sie nach einem anderen Reset mehrere Flags haben.