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);
}
}
此帖出自
小平头技术问答
一周热门 更多>