打印
[STM32L0]

系统复位时正常,断电导致RTC复位,这是为什么

[复制链接]
536|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lmn2005 于 2023-3-31 15:16 编辑

用STM32L051的RTC模块,按下系统复位键时,RTC时间正常,但当断电后再通电时,RTC被复位,STM32L051的1脚有外接3V电池,且电压正常。
用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();
  }
}



请大佬分析一下,哪个环节出问题了?

使用特权

评论回复
沙发
lmn2005|  楼主 | 2023-3-29 09:29 | 只看该作者
有哪位大佬用过ST32的RTC的,请教一下。

使用特权

评论回复
板凳
lmn2005|  楼主 | 2023-3-30 21:09 | 只看该作者
没有了,我只单独测试STM32的内置RTC功能。如果不断电,即使按复位,RTC时间不复位。如果断电(1脚的3V电池有给RTC维持供电),RTC就被复位,原来设置的时间不会继续走下去,读出的时间全部都是0。

使用特权

评论回复
地板
香水城| | 2023-3-31 12:05 | 只看该作者
你给出都是配置代码,没啥好说的,经典配置。

对于L0系列是这样的:

5095064265c07748f6.png (44.42 KB )

5095064265c07748f6.png

使用特权

评论回复
5
lmn2005|  楼主 | 2023-3-31 15:18 | 只看该作者
这段话的意思是不是说电源复位,就会引起RTC的复位?

使用特权

评论回复
评论
lmn2005 2023-3-31 20:02 回复TA
@香水城 :如果真的这样的话,那么这个系列的RTC就没有意义了。 
香水城 2023-3-31 17:35 回复TA
应该是的。 关于RTC备份域的复位跟别的系列这个地方明显不一样。 
6
Henryko| | 2023-4-2 16:39 | 只看该作者
为啥电源复位会引起RTC复位?

使用特权

评论回复
7
jtracy3| | 2023-4-2 16:46 | 只看该作者
是不是数据没有保存呢?              

使用特权

评论回复
8
maudlu| | 2023-4-2 17:46 | 只看该作者
RTC复位是由于断电使得RTC存储单元中的电池电量耗尽,而整个系统的时间信息会丢失

使用特权

评论回复
9
timfordlare| | 2023-4-2 18:41 | 只看该作者
STM32CubeMX生成的代码就是有这个问题的。

使用特权

评论回复
10
albertaabbot| | 2023-4-2 19:32 | 只看该作者
STM32CubeMX有问题。              

使用特权

评论回复
11
ccook11| | 2023-4-2 20:02 | 只看该作者
每次都是重新初始化数据的吗?              

使用特权

评论回复
12
lmn2005|  楼主 | 2023-4-3 18:57 | 只看该作者
ccook11 发表于 2023-4-2 20:02
每次都是重新初始化数据的吗?

没有

使用特权

评论回复
13
SantaBunny| | 2023-4-3 20:38 | 只看该作者
可能是STM32CubeMX的问题

使用特权

评论回复
14
lmn2005|  楼主 | 2023-4-4 08:33 | 只看该作者
timfordlare 发表于 2023-4-2 18:41
STM32CubeMX生成的代码就是有这个问题的。

stm32f103或其他系列的,也有这种问题吗?

使用特权

评论回复
15
lmn2005|  楼主 | 2023-4-4 08:34 | 只看该作者
难道不用STM32CubeMX,只用ST库文件,然后自己写配置代码和用户代码?

使用特权

评论回复
16
lmn2005|  楼主 | 2023-4-4 09:50 | 只看该作者
jtracy3 发表于 2023-4-2 16:46
是不是数据没有保存呢?

根据手册说明,RTC是独立的单元,只要VBAT有电源,RTC单元的计数就不要停止。
所有时间数据我们不用保存到外面的存储器。

使用特权

评论回复
17
lmn2005|  楼主 | 2023-4-4 09:56 | 只看该作者
如果不执行HAL_RTC_Init(&hrtc) 的话,则后续无法读取RTC时间数据。

使用特权

评论回复
18
Stahan| | 2023-4-4 23:41 | 只看该作者
电源复位就会影响芯片复位吧

使用特权

评论回复
19
lmn2005|  楼主 | 2023-4-5 12:00 | 只看该作者
Stahan 发表于 2023-4-4 23:41
电源复位就会影响芯片复位吧

电源复位肯定就会影响芯片复位,但会不会影响RTC(VBAT维持供电的情况下)的复位?

使用特权

评论回复
20
MessageRing| | 2023-4-5 22:48 | 只看该作者
按复位也不能复位?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

466

帖子

1

粉丝