Add HSE support to STM32 RTC

pull/14243/head
Bora Özgen 2021-02-09 14:04:48 +01:00
parent 8ba88427cd
commit 4d1161b689
2 changed files with 19 additions and 2 deletions

View File

@ -62,7 +62,18 @@ void rtc_init(void)
while (LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID)) {
}
#endif /* DUAL_CORE */
#if MBED_CONF_TARGET_LSE_AVAILABLE
#if RTC_FROM_HSE
#define RTC_HSE_DIV (HSE_VALUE / RTC_CLOCK)
#if RTC_HSE_DIV > 31
#error "HSE value too high for RTC"
#endif
(void)RCC_OscInitStruct;
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInitStruct.RTCClockSelection = (RCC_RTCCLKSOURCE_HSE_DIVX | RTC_HSE_DIV << 16);
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
error("PeriphClkInitStruct RTC failed with HSE\n");
}
#elif MBED_CONF_TARGET_LSE_AVAILABLE
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
#if MBED_CONF_TARGET_LSE_BYPASS

View File

@ -38,7 +38,9 @@
extern "C" {
#endif
#if MBED_CONF_TARGET_LSE_AVAILABLE
#if RTC_FROM_HSE
#define RTC_CLOCK 1000000U
#elif MBED_CONF_TARGET_LSE_AVAILABLE
#define RTC_CLOCK LSE_VALUE
#else
#define RTC_CLOCK LSI_VALUE
@ -47,7 +49,11 @@ extern "C" {
#if DEVICE_LPTICKER && !MBED_CONF_TARGET_LPTICKER_LPTIM
/* PREDIV_A : 7-bit asynchronous prescaler */
/* PREDIV_A is set to set LPTICKER frequency to RTC_CLOCK/4 */
#if RTC_FROM_HSE
#define PREDIV_A_VALUE 124
#else
#define PREDIV_A_VALUE 3
#endif
/** Read RTC counter with sub second precision
*