|
用STM32L051的RTC模塊,按下系統(tǒng)復(fù)位鍵時(shí),RTC時(shí)間正常,但當(dāng)斷電后再通電時(shí),RTC被復(fù)位,時(shí)分秒均被清零。STM32L051的1腳有外接3V電池,且電壓正常。MX_RTC_Init代碼中的時(shí)間初始化設(shè)置有注釋掉。
用STM32CubeMX配的代碼(HAL庫(kù)),RTC.c代碼如下:
#include "rtc.h"
RTC_HandleTypeDef hrtc;
void MX_RTC_Init(void)
{
//RTC_TimeTypeDef sTime = {0};
//RTC_DateTypeDef sDate = {0};
hrtc.Instance = RTC;
hrtc.Init.HourFormat =RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut =RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
hrtc.Init.OutPutPolarity =RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType =RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) !=HAL_OK)
{
Error_Handler();
}
/*
sTime.Hours = 0x0;
sTime.Minutes = 0x0;
sTime.Seconds = 0x0;
sTime.DayLightSaving =RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation =RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc,&sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
sDate.WeekDay =RTC_WEEKDAY_WEDNESDAY;
sDate.Month = RTC_MONTH_MARCH;
sDate.Date = 0x1;
sDate.Year = 0x23;
if (HAL_RTC_SetDate(&hrtc,&sDate, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
*/
}
void HAL_RTC_MspInit(RTC_HandleTypeDef*rtcHandle)
{
if(rtcHandle->Instance==RTC)
{
__HAL_RCC_RTC_ENABLE();
}
}
void HAL_RTC_MspDeInit(RTC_HandleTypeDef*rtcHandle)
{
if(rtcHandle->Instance==RTC)
{
__HAL_RCC_RTC_DISABLE();
}
}
請(qǐng)大佬分析一下,哪個(gè)環(huán)節(jié)出問(wèn)題了?該如何解決?
|
|