当前位置:首页 > 单片机 > 单片机
[导读]ErrorStatus RTC_WakeUpCmd(FunctionalState NewState){__IO uint32_t wutcounter = 0x00;uint32_t wutwfstatus = 0x00;ErrorStatus status = ERROR;assert_param(IS_FUNCTIONAL_STATE(NewState));RTC->WPR = 0xCA;R

ErrorStatus RTC_WakeUpCmd(FunctionalState NewState)

{

__IO uint32_t wutcounter = 0x00;

uint32_t wutwfstatus = 0x00;

ErrorStatus status = ERROR;

assert_param(IS_FUNCTIONAL_STATE(NewState));

RTC->WPR = 0xCA;

RTC->WPR = 0x53;

if (NewState != DISABLE)

{

RTC->CR |= (uint32_t)RTC_CR_WUTE;

status = SUCCESS;

}

else

{

RTC->CR &= (uint32_t)~RTC_CR_WUTE;

do

{

wutwfstatus = RTC->ISR & RTC_ISR_WUTWF;

wutcounter++;

} while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00));

if ((RTC->ISR & RTC_ISR_WUTWF) == RESET)

{

status = ERROR;

}

else

{

status = SUCCESS;

}

}

RTC->WPR = 0xFF;

return status;

}

上边时RTC唤醒的打开和关闭,在使用时,发现就RTC_WakeUpCmd(DISABLE)这个函数就要占据8ms(可怕)系统延时,这对于低功耗产品来说,不能频繁地使用此函数,否则带来不必要的浪费。

原因:在关闭时函数内部下面几句话


do

{

wutwfstatus = RTC->ISR & RTC_ISR_WUTWF;

wutcounter++;

} while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00));

在这里要等待,可能等待时间与RTC唤醒设定的值有关系。就没有再详细的跟踪测试。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭