Hallo,
in meinem Programm (läuft auf STM32F4) löse ich an einer Stelle einen
manuellen Reset aus, um aus der Applikation in den Bootloader zu
gelangen. Die Applikation wird vom IWDG (independent watchdog)
überwacht, welcher großzügig ausgelegt ist (mehrere Sekunden).
Wenn ich in der Applikation jedoch nach dem Neustart
__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) (d.h. IWDG Watchdog hat
angeschlagen) abfrage, kriege ich ein gesetztes Flag zurück. Dass der
Watchdog tatsächlich kam, ist aber unwahrscheinlich, da dieser sehr
großzügig ausgelegt ist (mehrere Sekunden). Es ist auch kein zweites
Reset das Watchdog-Bedingt ist zu beobachten.
Mit dem Code unten starte ich den µC neu.
1 | void uC_Reset(void)
|
2 | {
|
3 | __DSB();
|
4 | SCB->AIRCR = (USIGN32)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
|
5 | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
|
6 | SCB_AIRCR_SYSRESETREQ_Msk );
|
7 |
|
8 | __DSB();
|
9 |
|
10 | /* Wait until reset */
|
11 | for(;;)
|
12 | {
|
13 | __NOP();
|
14 | }
|
15 | }
|
Lange Rede kurzer Sinn, weiß jemand warum nach einem Software-Reset das
RCC_FLAG_IWDGRST gesetzt ist?