STM32L151中RTC_WakeUpCmd()函數(shù)帶來了系統(tǒng)延時
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喚醒的打開和關閉,在使用時,發(fā)現(xiàn)就RTC_WakeUpCmd(DISABLE)這個函數(shù)就要占據(jù)8ms(可怕)系統(tǒng)延時,這對于低功耗產(chǎn)品來說,不能頻繁地使用此函數(shù),否則帶來不必要的浪費。
原因:在關閉時函數(shù)內部下面幾句話
do
{
wutwfstatus = RTC->ISR & RTC_ISR_WUTWF;
wutcounter++;
} while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00));
在這里要等待,可能等待時間與RTC喚醒設定的值有關系。就沒有再詳細的跟蹤測試。