OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8433|回复: 13

STM32L0, standby 模式;RTC唤醒准

[复制链接]

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2018-4-10
在线时间
28 小时
发表于 2020-12-4 14:41:00 | 显示全部楼层 |阅读模式
1金钱
采用STM32L051C8T6进行低功耗设计。待机模式下采用RTC唤醒,RTC时钟为内部37K时钟,1Hz分频后,程序设置180s唤醒,结果140s就醒了,请教一下是否那里配置有问题下面是进入低功耗模式的配置:
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);  /* ½ûÖ1»½DÑê±Öó¼Æêy */
            HAL_PWR_EnableBkUpAccess();         // μí1|oÄÄ£ê½ÏÂRTC ÔêDí·ÃÎê £¬RTC»½DÑDèòa
            HAL_PWR_DisablePVD();          // ½ûÖ1 PVD       
                        HAL_PWREx_EnableUltraLowPower();        // 1رÕVREFINT        éù3uA
                        HAL_PWREx_EnableFastWakeUp();         // oöÂÔVREFINT ¼ó¿ìÆô¶ˉËù¶è
       
                        HAL_DBGMCU_DisableDBGStopMode();                  //        // ÔêDí/½ûóà μ÷êÔ¶Ë¿ú éù800uA
                        GPIO_InitTypeDef GPIO_InitStruct={0};
               
                        __GPIOA_CLK_DISABLE();
                        __GPIOB_CLK_DISABLE();
                        __GPIOC_CLK_DISABLE();
                        __GPIOH_CLK_DISABLE();
                                               
                        HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);//??????????WR_WAKEUP_PIN1 connected to PA.00
                        HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,180, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); // rtc »½DÑ2éóÃLSIê±Öó£¬μúò»2Îêy£¬¼Æêyòç3ö»½DÑ£»μú¶t2Îêy£o½øDD16·ÖÅ䣬
                        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//?????PA.00?WakeUp Pin
                        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//       
                        HAL_PWR_EnterSTANDBYMode();//       

下面是RTC配置:


void MX_RTC_Init(void)
{

RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;

    /**Initialize RTC Only
    */
  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(__FILE__, __LINE__);
  }
  /* USER CODE BEGIN RTC_Init 2 */

  /* USER CODE END RTC_Init 2 */

    /**Initialize RTC and set the Time and Date
    */
  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(__FILE__, __LINE__);
  }
  /* USER CODE BEGIN RTC_Init 3 */

  /* USER CODE END RTC_Init 3 */

  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_JANUARY;
  sDate.Date = 0x1;
  sDate.Year = 0x0;

  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
  /* USER CODE BEGIN RTC_Init 4 */

  /* USER CODE END RTC_Init 4 */

    /**Enable the WakeUp
    */
  if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
  /* USER CODE BEGIN RTC_Init 5 */
  HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);
  /* USER CODE END RTC_Init 5 */

}

其中         HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);是什么意思也不是很清楚

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2018-4-10
在线时间
28 小时
 楼主| 发表于 2020-12-4 14:41:01 | 显示全部楼层
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2018-4-10
在线时间
28 小时
 楼主| 发表于 2020-12-4 14:54:21 | 显示全部楼层
66666666666666666
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2018-4-10
在线时间
28 小时
 楼主| 发表于 2020-12-4 15:51:37 | 显示全部楼层
666666666666
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2018-4-10
在线时间
28 小时
 楼主| 发表于 2020-12-4 17:35:07 | 显示全部楼层

还是有问题
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2018-4-10
在线时间
28 小时
 楼主| 发表于 2020-12-4 17:35:37 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-12-5 22:48:18 | 显示全部楼层

啥问题????
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2018-4-10
在线时间
28 小时
 楼主| 发表于 2020-12-6 15:25:20 | 显示全部楼层

RTC时钟用的内部37K,一开始采用默认的分频系数128 256 ;后来看这个对应的是32.768k的外部晶振;然后分频系数改成37,1000也不行,现在是能运行大概160s就唤醒了
回复

使用道具 举报

11

主题

2148

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4909
金钱
4909
注册时间
2015-1-10
在线时间
615 小时
发表于 2020-12-6 21:32:40 | 显示全部楼层
jasonyu 发表于 2020-12-6 15:25
RTC时钟用的内部37K,一开始采用默认的分频系数128 256 ;后来看这个对应的是32.768k的外部晶振;然后分 ...

内部的RC振荡很不准的,不建议用
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2018-4-10
在线时间
28 小时
 楼主| 发表于 2020-12-7 19:21:14 | 显示全部楼层
顶一顶,大家有什么好建议
回复

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2021-3-15
在线时间
15 小时
发表于 2021-6-2 11:36:15 | 显示全部楼层
你好,请问你解决了吗,我的问题和你一模一样,也是会提前唤醒,你用wakeup引脚没
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13114
金钱
13114
注册时间
2012-11-26
在线时间
3812 小时
发表于 2021-6-2 11:42:24 | 显示全部楼层
Melissa 发表于 2021-6-2 11:36
你好,请问你解决了吗,我的问题和你一模一样,也是会提前唤醒,你用wakeup引脚没

有LSE没,有的话用外部晶振作为时钟源试试
学无止境
回复

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2021-3-15
在线时间
15 小时
发表于 2021-6-2 13:19:33 | 显示全部楼层
jermy_z 发表于 2021-6-2 11:42
有LSE没,有的话用外部晶振作为时钟源试试

感谢答复呀~用的LSE,配置RTC wakeup 为Internal WakeUp,Wake Up Clock为1Hz,Wake Up Counter为60,60s唤醒,但是不到60s就唤醒了,大概40s就唤醒了
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2020-12-13
在线时间
26 小时
发表于 2021-9-8 16:07:28 | 显示全部楼层
大佬,能不能分享一下工程?学习用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-5 12:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表