stm32L476 进入stopmode后向通过RTC中断周期性唤醒,运行一次后就不能进入stopmode了

2019-03-23 15:29发布

rt
希望达到的效果是每12个小时执行一次业务逻辑,其他时间都进入休眠,于是这里就用来stopmode+HAL_RTCEx_SetWakeUpTimer_IT的方式来实现,这其中遇到两个问题:
(1)发现定时唤醒的时间设置大于30s就会不生效了,设置成300s实际也就等待20s左右,不知道是什么情况,求问大家。
(2)休眠唤醒后无法再次进入休眠,一旦第一次唤醒之后,再次调用相同的逻辑不会进入休眠,直接又开始休眠后的逻辑了
以上问题请假各位大侠,感激不尽!
void enterStopMode(int seconds){
        GPIO_InitTypeDef GPIO_InitStruct;

        HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);

        //开启rtc定时唤醒,RTC采用外部时钟32768,16分频,300秒对应传入参数为300*32768/16
  if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x8FFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
                SERIAL_PRINTF("set wakeup timer error! %d ",i);
  }
                SERIAL_PRINTF("enter stopmode! %d ",i);

                HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFE);
                SystemClock_Config();//恢复时钟
                //SERIAL_PRINTF("stop loop index is %d ",i);

        }

}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。