中级会员
- 积分
- 317
- 金钱
- 317
- 注册时间
- 2016-11-1
- 在线时间
- 64 小时
|
发表于 2017-3-1 15:55:26
|
显示全部楼层
按照你的描述,唤醒时间是不确定的,有可能1天,一周,一个月,我做过周期唤醒,几十秒,几分钟的,发现的问题是,你不能随意调整时间,也就是下面23750,如果不断电的话,重新设置这个时间没有效果,必须断电才行,如果想定时不同的休眠时间,可以设定一个基准的唤醒时间,比如1个小时,进入中断之后再 time自增,达到要求(比如一天24小时)再处理其他,没有达到就继续休眠,这样可以设定不同的休眠时间,但本质上还是休眠1个小时,只是累加起来
你可以再试试,先休眠比较短的时间,然后修改唤醒时间,看看是否有效,期待你的结论,让我了解下原因是啥
CLK_LSICmd(ENABLE); //打开LSI时钟
while(!CLK_GetFlagStatus(CLK_FLAG_LSIRDY)); //等待LSI稳定
RTC_WakeUpCmd(DISABLE); //关闭自动唤醒
CLK_PeripheralClockConfig(CLK_Peripheral_RTC,ENABLE); //打开RTC时钟
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI,CLK_RTCCLKDiv_1); //RTC时钟1分频,38k
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); //配置wakeup的时钟,16分频,每次计数周期 1/38k * 16 = 0.421ms
RTC_SetWakeUpCounter(23750); //10s
//设置PWR模式
PWR_FastWakeUpCmd(ENABLE); //快速唤醒使能
PWR_UltraLowPowerCmd(ENABLE); //超低功耗使能
//RTC中断配置
RTC_ITConfig(RTC_IT_WUT,ENABLE); //使能唤醒中断
//开始配置RTC
RTC_WakeUpCmd(ENABLE); //打开唤醒功能,进入halt会自动开始计数
|
|