diff --git a/src/main/drivers/usb_msc.h b/src/main/drivers/usb_msc.h index 66f94e57e4..542f5e9c6f 100644 --- a/src/main/drivers/usb_msc.h +++ b/src/main/drivers/usb_msc.h @@ -32,3 +32,4 @@ uint8_t mscStart(void); bool mscCheckButton(void); void mscWaitForButton(void); void systemResetToMsc(int timezoneOffsetMinutes); +void systemResetFromMsc(void); diff --git a/src/main/drivers/usb_msc_f4xx.c b/src/main/drivers/usb_msc_f4xx.c index de0257cfdc..0fb400456a 100644 --- a/src/main/drivers/usb_msc_f4xx.c +++ b/src/main/drivers/usb_msc_f4xx.c @@ -152,9 +152,7 @@ void mscWaitForButton(void) while (true) { asm("NOP"); if (mscCheckButton()) { - *((uint32_t *)0x2001FFF0) = 0xFFFFFFFF; - delay(1); - NVIC_SystemReset(); + systemResetFromMsc(); } } } @@ -173,4 +171,13 @@ void systemResetToMsc(int timezoneOffsetMinutes) #endif NVIC_SystemReset(); } + +void systemResetFromMsc(void) +{ + *((uint32_t *)0x2001FFF0) = 0xFFFFFFFF; + delay(1); + __disable_irq(); + NVIC_SystemReset(); +} + #endif diff --git a/src/main/drivers/usb_msc_f7xx.c b/src/main/drivers/usb_msc_f7xx.c index 5f0029dc1c..29633f8942 100644 --- a/src/main/drivers/usb_msc_f7xx.c +++ b/src/main/drivers/usb_msc_f7xx.c @@ -157,9 +157,7 @@ void mscWaitForButton(void) while (true) { asm("NOP"); if (mscCheckButton()) { - *((uint32_t *)0x2001FFF0) = 0xFFFFFFFF; - delay(1); - NVIC_SystemReset(); + systemResetFromMsc(); } } } @@ -178,4 +176,13 @@ void systemResetToMsc(int timezoneOffsetMinutes) #endif NVIC_SystemReset(); } + +void systemResetFromMsc(void) +{ + *((__IO uint32_t*) BKPSRAM_BASE + 16) = 0xFFFFFFFF; + delay(1); + __disable_irq(); + NVIC_SystemReset(); +} + #endif diff --git a/src/main/fc/init.c b/src/main/fc/init.c index 1f28fc4a68..5b27214fdd 100644 --- a/src/main/fc/init.c +++ b/src/main/fc/init.c @@ -447,7 +447,7 @@ void init(void) if (mscStart() == 0) { mscWaitForButton(); } else { - NVIC_SystemReset(); + systemResetFromMsc(); } } #endif