STM32L151中RTC_WakeUpCmd()函数带来了系统延时
扫描二维码
随时随地手机看文章
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唤醒设定的值有关系。就没有再详细的跟踪测试。