由于需要对井盖姿态进行检测,采用了ADXL362低功耗姿态芯片,配合低功耗STM8L051单片机实现,这里主要对低功耗做个简单的介绍与总结;
void RTC_Config(void)
{
//CLK_LSEConfig(CLK_LSE_ON);
CLK_LSICmd(ENABLE);//使能LSI
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);//RTC时钟门控使能
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_64);//RTC时钟源LSI,1分频=38K Tang=1;
while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET);//等待LSI就绪
RTC_WakeUpCmd(DISABLE);
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);//38K/16=2.375k=0.421ms
RTC_ITConfig(RTC_IT_WUT, ENABLE);//开启中断 ouyang=38000/64div=593;593/16div=37; X/37=second(定时)
//RTC_SetWakeUpCounter(23750);//23750*0,421=10S左右
RTC_SetWakeUpCounter(22200);//370 = 10S 欧阳修改,最大修改为65530/37=1771S 即29.5分钟起来一次;22200=10分钟;
//ITC_SetSoftwarePriority(RTC_CSSLSE_IRQn, ITC_PriorityLevel_3);//优先级
enableInterrupts();
}
低功耗主要靠此RTC配置,目前配置是10分钟一次中断,那么,要更长时间,可以通过RTC中断:
#pragma vector=6
__interrupt void RTC_IRQHandler(void)
{
rtc_wake_flag++;
RTC->ISR2 &=~RTC_ISR2_WUTF;
}
来计算,比如每10分钟进入此中断,当rtc_wake_flag>144时,即达到1440分钟,也就是定时24 hour啦;
点滴记录,勇敢成长......