From fdec73848574e0c43c1071b46e184772a84793ac Mon Sep 17 00:00:00 2001 From: Kilrah Date: Wed, 8 Nov 2017 13:02:32 +0100 Subject: [PATCH] Prevent lockup on boot in case of 32kHz oscillator failure (fix #5294) --- radio/src/targets/common/arm/stm32/rtc_driver.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/radio/src/targets/common/arm/stm32/rtc_driver.cpp b/radio/src/targets/common/arm/stm32/rtc_driver.cpp index 486662713..84c9bef5b 100644 --- a/radio/src/targets/common/arm/stm32/rtc_driver.cpp +++ b/radio/src/targets/common/arm/stm32/rtc_driver.cpp @@ -64,7 +64,15 @@ void rtcInit() RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_BackupAccessCmd(ENABLE); RCC_LSEConfig(RCC_LSE_ON); - while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); + + // Prevent lockup in case of 32kHz oscillator failure + uint32_t i = 0; + while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) + { + if ( ++i > 1000000 ) + return; + } + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); RCC_RTCCLKCmd(ENABLE); RTC_WaitForSynchro();