summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/rtc.c
diff options
context:
space:
mode:
Diffstat (limited to 'stmhal/rtc.c')
-rw-r--r--stmhal/rtc.c47
1 files changed, 45 insertions, 2 deletions
diff --git a/stmhal/rtc.c b/stmhal/rtc.c
index 7a89d93e71..f58aa92733 100644
--- a/stmhal/rtc.c
+++ b/stmhal/rtc.c
@@ -161,7 +161,7 @@ void rtc_init(void) {
}
#endif
-static void RTC_CalendarConfig(void);
+STATIC void RTC_CalendarConfig(void);
void rtc_init(void) {
RTCHandle.Instance = RTC;
@@ -211,7 +211,7 @@ void rtc_init(void) {
}
}
-static void RTC_CalendarConfig(void) {
+STATIC void RTC_CalendarConfig(void) {
// set the date to 1st Jan 2014
RTC_DateTypeDef date;
date.Year = 14;
@@ -242,6 +242,49 @@ static void RTC_CalendarConfig(void) {
HAL_RTCEx_BKUPWrite(&RTCHandle, RTC_BKP_DR0, 0x32f2);
}
+/*
+ Note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select
+ the RTC clock source; in this case the Backup domain will be reset in
+ order to modify the RTC Clock source, as consequence RTC registers (including
+ the backup registers) and RCC_BDCR register are set to their reset values.
+*/
+void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc) {
+ RCC_OscInitTypeDef RCC_OscInitStruct;
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
+
+ /* To change the source clock of the RTC feature (LSE, LSI), You have to:
+ - Enable the power clock using __PWR_CLK_ENABLE()
+ - Enable write access using HAL_PWR_EnableBkUpAccess() function before to
+ configure the RTC clock source (to be done once after reset).
+ - Reset the Back up Domain using __HAL_RCC_BACKUPRESET_FORCE() and
+ __HAL_RCC_BACKUPRESET_RELEASE().
+ - Configure the needed RTc clock source */
+
+ // set LSE as RTC clock source
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
+ RCC_OscInitStruct.LSEState = RCC_LSE_ON;
+ RCC_OscInitStruct.LSIState = RCC_LSI_OFF;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
+ //Error_Handler();
+ return;
+ }
+
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
+ PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
+ //Error_Handler();
+ return;
+ }
+
+ // enable RTC peripheral clock
+ __HAL_RCC_RTC_ENABLE();
+}
+
+void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc) {
+ __HAL_RCC_RTC_DISABLE();
+}
+
/******************************************************************************/
// Micro Python bindings