diff options
| author | YangZhongQing <[email protected]> | 2022-09-11 12:08:59 +0800 |
|---|---|---|
| committer | Man, Jianting (Meco) <[email protected]> | 2022-09-23 21:04:35 -0400 |
| commit | 1c2d05d54598e57121bc12e4e2c1b8c0681b2db1 (patch) | |
| tree | 997bedc963503731f3d5cd313ecf1dd7cb7d5fd0 /bsp | |
| parent | fc55785e70fbf8d117b7f713f67131f640e9fe3d (diff) | |
RTC STM32F1 Enable PWR and BKP clocks in the same time
bsp\stm32\libraries\HAL_Drivers\drv_rtc.c在STM32F10x上有一个“RTC首次上电时BKP时钟没使能”的问题。
STM32F10x要求:
写RTC Domain and RTC registers之前需要__HAL_RCC_BKP_CLK_ENABLE(详见:stm32f1xx_hal_rtc.c里面的##### Backup Domain Access #####)
问题分析:
1、RTC首次上电时:由于HAL_RTC_Init初始化之前没有使能BKP时钟,所以对RTC registers的初始化无效。
2、然后用date命令设置时间,调用到set_rtc_time_stamp也没有__HAL_RCC_BKP_CLK_ENABLE,所以HAL_RTCEx_BKUPWrite写的值无法真正永存于BKP,重启后就丢失。
最终导致:对于RTC首次上电的情况,每次重启后RTC_BKP_DR1里的值都不是BKUP_REG_DATA,导致永远无法调用到rt_rtc_f1_bkp_update()去使能BKP时钟。
解决办法:
参考STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\RTC\Calendar\main.c里面的RTC_Configuration()同时打开RCC_APB1Periph_PWR和RCC_APB1Periph_BKP
Diffstat (limited to 'bsp')
| -rw-r--r-- | bsp/stm32/libraries/HAL_Drivers/drv_rtc.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_rtc.c b/bsp/stm32/libraries/HAL_Drivers/drv_rtc.c index 2bb3587eba..1e1a5ad205 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_rtc.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_rtc.c @@ -128,7 +128,6 @@ static void rt_rtc_f1_bkp_update(void) RTC_DateTypeDef RTC_DateStruct = {0}; HAL_PWR_EnableBkUpAccess(); - __HAL_RCC_BKP_CLK_ENABLE(); RTC_DateStruct.Year = HAL_RTCEx_BKUPRead(&RTC_Handler, RTC_BKP_DR2); RTC_DateStruct.Month = HAL_RTCEx_BKUPRead(&RTC_Handler, RTC_BKP_DR3); @@ -232,6 +231,9 @@ static rt_err_t stm32_rtc_init(void) { #if !defined(SOC_SERIES_STM32H7) && !defined(SOC_SERIES_STM32WL) && !defined(SOC_SERIES_STM32WB) __HAL_RCC_PWR_CLK_ENABLE(); +#ifdef SOC_SERIES_STM32F1 + __HAL_RCC_BKP_CLK_ENABLE(); +#endif #endif RCC_OscInitTypeDef RCC_OscInitStruct = {0}; |
