标题: STM32L051单片机系统复位时正常,断电会导致RTC复位,这是为什么 [打印本页]

作者: lmn2005    时间: 2023-3-5 10:40
标题: STM32L051单片机系统复位时正常,断电会导致RTC复位,这是为什么
用STM32L051的RTC模块,按下系统复位键时,RTC时间正常,但当断电后再通电时,RTC被复位,时分秒均被清零。STM32L051的1脚有外接3V电池,且电压正常。MX_RTC_Init代码中的时间初始化设置有注释掉。
用STM32CubeMX配的代码(HAL库),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();
  }
}
请大佬分析一下,哪个环节出问题了?该如何解决?

作者: coody_sz    时间: 2023-3-5 13:21
是不是复位时,寄存器也复位了。
作者: Hephaestus    时间: 2023-3-5 14:03
不要执行MX_RTC_Init()函数,一旦执行了就是你现在的酱紫。
作者: lmn2005    时间: 2023-3-5 21:19
Hephaestus 发表于 2023-3-5 14:03
不要执行MX_RTC_Init()函数,一旦执行了就是你现在的酱紫。

没有执行的话,无法读取RTC时间。
作者: lmn2005    时间: 2023-3-5 21:19
coody_sz 发表于 2023-3-5 13:21
是不是复位时,寄存器也复位了。

系统复位的话,没有问题。
作者: lmn2005    时间: 2023-4-4 09:53
Hephaestus 发表于 2023-3-5 14:03
不要执行MX_RTC_Init()函数,一旦执行了就是你现在的酱紫。

其中的初始化时间(时间设置)有注释掉,也就是说每次系统开始就作简单的RTC设置,不写入任何时间数据。
作者: lmn2005    时间: 2023-4-4 09:54
如果连HAL_RTC_Init(&hrtc)也不执行的话,后续就无法读取RTC时间数据。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1