你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L073待机唤醒导致复位

[复制链接]
lich0205 提问时间:2017-12-19 16:59 /
本帖最后由 lich0205 于 2017-12-21 14:09 编辑

为了降低功耗周期性的使芯片进入待机状态,在设定时间使用WKUP事件唤醒,在执行完设定动作之后再次进入待机状态,再唤醒,如此往复。
现在出现的问题是,第一次进入待机状态之后能够待机到设定时间(比如30s)然后唤醒芯片,程序重新开始执行,然而再次进入待机状态之后芯片立即就被唤醒从头开始执行程序了,感觉是哪里的标志没有复位,但是不确定

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__);
  }

    /**Initialize RTC and set the Time and Date
    */
  if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){
  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__);
  }

  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__);
  }

    HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);
  }

}


进入待机模式代码:
                if((1 == PWR_Standby_In_Flg) && (1 == USART_CallBack_Ok))
                {
                        
                        if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 60, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK)
                        {
                                _Error_Handler(__FILE__, __LINE__);
                        }        
                        

                        HAL_PWR_EnterSTANDBYMode();

                }

望指点,谢谢!

评分

参与人数 1 ST金币 -5 收起 理由
Inc_brza -5 标题不合格

查看全部评分

<
收藏 评论13 发布时间:2017-12-19 16:59

举报

13个回答
xmshao 回答时间:2017-12-19 22:14:03
会不会唤醒中断标志没有清除呢?
回答时间:2017-12-20 09:49:52
HAL_PWR_EnterSTANDBYMode这个是唤醒后直接复位运行的,如果不想复位运行用STOPMode。
Inc_brza 回答时间:2017-12-20 10:03:17
待机唤醒会复位,这个在手册里是已经清清楚楚写明的,
如安版主所说,建议使用STOPMode,如果想降低功耗,
建议用RTC Alarm进行定时唤醒或者Wakeup事件唤醒另外,建议楼主的标题修改一下,
《STM32L073待机唤醒导致复位》,这样直接就能看出你想问什么了!
lich0205 回答时间:2017-12-20 10:36:33
安 发表于 2017-12-20 09:49
HAL_PWR_EnterSTANDBYMode这个是唤醒后直接复位运行的,如果不想复位运行用STOPMode。 ...

版主大哥,可能我描述问题不是很清楚。容我再解释一下哈。
我想实现功能是这样的:
上电复位开始工作-->进入待机状态-->第一次待机30s-->退出待机,复位开始工作-->再次进入待机-->第二次待机30s-->退出待机,复位开始工作-->再次进入待机-->第三次待机30s-->退出待机,复位开始工作-->再次进入待机...   这样一个无限循环往复的过程。
但是现在调试出来的情况是:
上电复位开始工作-->进入待机状态-->第一次待机30s-->退出待机,复位开始工作-->再次进入待机-->第二次待机只有0s-->退出待机,复位开始工作-->进入待机状态-->第三次待机也只有0s-->退出待机,复位开始工作-->再次进入待机...  
也就是说只有第一次待机的时间达到了目的,待机了30s,但是第一次以后,第二次第三次第四次...进入待机之后没有延时就被立即复位运行,是为什么第二,第三,第四次。。。进入待机之后为什么没有延时的问题,就是不知道是不是第一次复位之后,RTC的外设里有些寄存器不受复位影响,导致后来的待机没有延时,但是由于进入待机之后除RTC都断电了,仿真器会掉线,在线调试看不到复位之后的寄存器的状态,因此特别迷惑
lich0205 回答时间:2017-12-20 10:40:40
Inc_brza 发表于 2017-12-20 10:03
待机唤醒会复位,这个在手册里是已经清清楚楚写明的,
如安版主所说,建议使用STOPMode,如果想降低功耗,
...

可能我之前描述的不是很清楚,容我再解释一下,现在使用的就是wakeup事件定时唤醒
我想实现功能是这样的:
上电复位开始工作-->进入待机状态-->第一次待机30s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机-->第二次待机30s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机-->第三次待机30s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机...   这样一个无限循环往复的过程。
但是现在调试出来的情况是:
上电复位开始工作-->进入待机状态-->第一次待机30s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机-->第二次待机只有0s-->wakeup事件唤醒退出待机,复位开始工作-->进入待机状态-->第三次待机也只有0s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机...  
也就是说只有第一次待机的时间达到了目的,待机了30s,但是第一次以后,第二次第三次第四次...进入待机之后没有延时就被立即复位运行,是为什么第二,第三,第四次。。。进入待机之后为什么没有延时的问题,就是不知道是不是第一次复位之后,RTC的外设里有些寄存器不受复位影响,导致后来的待机没有延时,但是由于进入待机之后除RTC都断电了,仿真器会掉线,在线调试看不到复位之后的寄存器的状态,因此特别迷惑
回答时间:2017-12-20 14:16:56
楼主是否有清除wekeup的标志位呢?RTC_ClearITPendingBit(RTC_IT_WUT);
Inc_brza 回答时间:2017-12-21 09:15:16
lich0205 发表于 2017-12-20 10:40
可能我之前描述的不是很清楚,容我再解释一下,现在使用的就是wakeup事件定时唤醒
我想实现功能是这样的 ...

24小时已过,请楼主自行修改标题,修改原因:标题不合格。
否则会关闭该帖子!
lich0205 回答时间:2017-12-21 14:10:16
Inc_brza 发表于 2017-12-21 09:15
24小时已过,请楼主自行修改标题,修改原因:标题不合格。
否则会关闭该帖子! ...

已经改好了
lich0205 回答时间:2017-12-21 14:10:33
Inc_brza 发表于 2017-12-21 09:15
24小时已过,请楼主自行修改标题,修改原因:标题不合格。
否则会关闭该帖子! ...

已经改好了
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版