×
单片机 > 单片机程序设计 > 详情

STM32L151中RTC_WakeUpCmd()函数带来了系统延时

发布时间:2020-05-19 发布时间:
|

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唤醒设定的值有关系。就没有再详细的跟踪测试。


关键字:STM32L151  RTC  系统延时 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实验八 交通灯控制(80C51单片机汇编语言编程)