OpenEdv-开源电子网

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

STM32L151C8T6-A 使用RTC 唤醒事件唤醒待机模式,唤醒时间不准的问题

[复制链接]

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2021-3-15
在线时间
15 小时
发表于 2021-6-2 21:10:32 | 显示全部楼层 |阅读模式
5金钱
首先感谢回帖呀~我用的STM32L151C8T6-A芯片待机模式,使用RTC的唤醒事件WakeUp(Internal Wakeup),设置Wake Up Clock为1Hz,Wake Up Counter为10s,即10s后自动唤醒。遇到的问题是:不到10s就会唤醒,大概8s就会唤醒,测试10分钟,1小时也都是不到指定时间就会自动唤醒。
猜测:1、是否需要使用wakeup引脚唤醒参考很多博主用的wakeup引脚,但是并非使用按键唤醒,而是内部RTC唤醒事件自动唤醒?
          2、是否和程序中进入待机模式前使能寄存器或者清除标志位相关?(程序如下)
RTC配置部分程序:
  sTime.Hours = 0;
  sTime.Minutes = 0;
  sTime.Seconds = 0;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
  {
    Error_Handler();
  }
  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_MAY;
  sDate.Date = 31;
  sDate.Year = 21;
  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
  {
    Error_Handler();
  }
  /** Enable the WakeUp
  */
  if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 10, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK)//10s后唤醒
  {
    Error_Handler();
  }

进入待机模式的程序:
void WKUP_EnterStandby(void)
{
        __HAL_RCC_AHB_FORCE_RESET();
        __HAL_RCC_PWR_CLK_ENABLE();
        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
//        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
        HAL_PWR_EnterSTANDBYMode();
}

if(uart2RxBuf[7]==0x44)
{
          printf("AT+MESH%c%c%cEnter LP\r\n",head[7],head[8],head[9]);
          WKUP_EnterStandby();
          printf("AT+MESH%c%c%cLP Failed\r\n",head[7],head[8],head[9]);
}

最佳答案

查看完整内容[请看2#楼]

已解决,一定要在进入待机模式时设置唤醒的时间。IDE自动生成的代码中,是在初始化时设置的时间,所以时间提前了。 更改后的代码如下: time=15; HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); __HAL_RCC_APB2_FORCE_RESET(); __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); __HAL_PWR_CLEAR_FLAG(P ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2021-3-15
在线时间
15 小时
 楼主| 发表于 2021-6-2 21:10:33 | 显示全部楼层
已解决,一定要在进入待机模式时设置唤醒的时间。IDE自动生成的代码中,是在初始化时设置的时间,所以时间提前了。
更改后的代码如下:
                          time=15;
                          HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);
                                __HAL_RCC_APB2_FORCE_RESET();
                                __HAL_RCC_PWR_CLK_ENABLE();
                                __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
                                __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
                                __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();
                                __HAL_RTC_WAKEUPTIMER_ENABLE(&hrtc);
                                HAL_PWR_EnterSTANDBYMode();
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-6-3 11:20:01 | 显示全部楼层
帮顶  
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2021-6-4 01:28:49 | 显示全部楼层
帮顶
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-6-4 09:59:19 | 显示全部楼层
STM32L1的标准库PWR实验就是用RTC自动唤醒做的,你测一下官方的代码时间准不准
回复

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2021-3-15
在线时间
15 小时
 楼主| 发表于 2021-6-5 14:55:04 | 显示全部楼层
阿侑kevin 发表于 2021-6-4 09:59
STM32L1的标准库PWR实验就是用RTC自动唤醒做的,你测一下官方的代码时间准不准

官方的代码在哪里取呀
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-6-6 08:48:54 | 显示全部楼层
回复

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2021-3-15
在线时间
15 小时
 楼主| 发表于 2021-6-7 10:26:22 | 显示全部楼层
阿侑kevin 发表于 2021-6-6 08:48
https://www.stmicroelectronics.com.cn/en/embedded-software/stm32-standard-peripheral-libraries.htm ...

感谢~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-22 22:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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