stm32l0 rtc休眠周期自动唤醒文档整理

stm32l0 rtc休眠周期自动唤醒文档整理

wangxl@20190814

 

一、周期性自动唤醒--手册文档说明

周期性唤醒标志由 16 位可编程自动重载递减计数器生成。唤醒定时器范围可扩展至 17 位。

可通过 RTC_CR 寄存器中的 WUTE 位来使能此唤醒功能。

唤醒定时器的时钟输入可以是:  248  16 分频的 RTC 时钟 (RTCCLK)

 RTCCLK  LSE (32.768 kHz) 时,可配置的唤醒中断周期介于 122 µs  32 s 之 间,且分辨率低至 61 µs

· ck_spre(通常为 1 Hz 内部时钟)。

 ck_spre 频率为 1 Hz 时,可得到的唤醒时间为 1s  36h 左右,分辨率为 1 秒。这 一较大的可编程时间范围分为两部分:

– WUCKSEL [2:1] = 10 时为 1s  18h

– WUCKSEL [2:1] = 11 时约为 18h  36h。在后一种情况下,会将 216 添加到 16 位计数器当前值。完成初始化序列后(请参见 600 页的编程唤醒定时器),定时 器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有效。此外,当 计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使用其重载值(RTC_WUTR 寄存器值)动重载。 之后必须用软件清零 WUTF 标志。

通过将 RTC_CR2 寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,它会使器件退出低功耗模式。

如果已通过 RTC_CR 寄存器的位 OSEL[1:0] 使能周期性唤醒标志,则该标志可连接到RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 输出极性。

系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响。

 

二、配置周期唤醒

配置步骤如下:

1. 禁用周期唤醒功能,复位RTC_CR2中WUTE位;

2. 等待RTC_ISR1中WUTWF位置位,表示唤醒计数器可配置;

3. 配置唤醒时钟,设置RTC_CR1中WUCKSEL[2:0]位:

- 000: RTCCLK/16

- 001: RTCCLK/8

- 010: RTCCLK/4

- 011: RTCCLK/2

- 10x: ck_spre(1Hz,WUT计数范围:0x0000~0xFFFF)

- 11x: ck_spre(1Hz,WUT计数范围:0x10000~0x1FFFF)

4. 配置唤醒周期,装载寄存器RTC_WUTRH和RTC_WUTRL;

5. 使能周期唤醒功能,置位RTC_CR2中WUTE位。(该中断会使MCU退出低功耗状态,进入运行状态。)

 

 

RTCCLK,预分频2,4,8或16。如果RTCCLK为LSE,即32768Hz,则可配置唤醒周期为:(61us ~ 32s)

 

ck_spre, 1Hz时钟,则可配置唤醒周期为:(1s ~ 36h)

 

三、RTC时钟配置

1、时钟源选择:RTC时钟源可选HSE,LSE,HSI或LSI。

为确保RTC精确工作,要求系统时钟(SYSCLK)必须等于或大于4*RTCCLK值。如果系统时钟(SYSCLK)为LSE或LSI,则RTC时钟必须等于系统时钟(SYSCLK),并且禁用RTC同步机制(置位RTC_CR1寄存器RATIO位)。

 

2、配置RTC时钟源:配置RTC时钟源为LSE,1分频,即32768Hz。

 

3、配置ck_spre时钟; ck_spre时钟,默认1Hz时钟。

(1) 设置7位异步预分频,RTC_APREG:PREDIVA,默认127;

(2) 设置13(Medium)或15位同步预分频,RTC_SPRERx:PREDIV_S,默认255。

即:1Hz=32768/((127+1)*(255+1))

 

ck_spre时钟可用于日历和定时唤醒时钟。

 

  • 代码参考

//参数time 秒

void APP_EnterLP(uint32_t time )

{

         MX_GPIO_Init_stop();

 /* Enable Ultra low power mode */

          HAL_PWREx_EnableUltraLowPower(); //使能超低功耗

          /* Enable Fast WakeUP */

          HAL_PWREx_EnableFastWakeUp();            //使能快速唤醒

           /* Disable Wakeup Counter */

         HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);

         

      

      /* Clear Wake Up Flag */

        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

        

    //    HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, (uint32_t)(time * 2048), RTC_WAKEUPCLOCK_RTCCLK_DIV16);//rtc LSE=32.768k   2048Hz   488us-- 32秒

 

        HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time-1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); //wangxl@20190814  时钟选择1Hz  65535/60/60 ~18  可得到的唤醒时间为 1s 到 18h 左右

        

        printf("进入停止模式\r\n");

        

        /* Select MSI as system clock source after Wake Up from Stop mode */

        __HAL_RCC_WAKEUPSTOP_CLK_CONFIG (RCC_STOP_WAKEUPCLOCK_HSI);

        

        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON , PWR_STOPENTRY_WFI);

              

        MX_GPIO_Init();

       

        HAL_Delay(5);  //wangxl@20190814  稳定时钟 必免串口打印乱码

        printf("wake up\r\n");

}

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 RTC休眠闹钟唤醒是指利用STM32系列微控制器的RTC(实时时钟)模块实现的一种电源管理功能。当系统处于低功耗模式下(如休眠模式),RTC可以在预设的时间点产生一个中断信号,唤醒系统从休眠状态中恢复。 要使用STM32RTC作为闹钟唤醒功能,首先需要初始化RTC模块并设置闹钟时间。可以通过设置RTC的时分秒以及日期参数来设定闹钟的触发时间。然后需要配置RTC中断,使得闹钟触发时能够产生一个中断信号。可以在RTC的CR寄存器中设置ALRAE位来使能闹钟中断,并在RTC的ALRMAR寄存器中设置闹钟的时间。设置好参数后,需要通过打开RTC闹钟中断的NVIC中断控制器来使能闹钟中断。 当系统进入休眠模式后,RTC会计时并在预设的触发时间点产生中断信号,唤醒系统。在中断服务函数中,处理闹钟触发的事件,可以进行一些必要的操作以及系统状态的恢复。 需要注意的是,在使用RTC休眠闹钟唤醒功能时,需要合理选择休眠模式并设置相应的功耗管理选项,以达到最低功耗的目的。要注意RTC模块的供电要求以及时钟校准等相关设置,以确保RTC模块的准确性和稳定性。 总结一下,STM32 RTC休眠闹钟唤醒功能是通过使用RTC模块来实现的一种电源管理功能。通过设置RTC的闹钟时间和中断使能,可以在系统休眠时在预设的时间点唤醒系统,处理相应的事件并恢复系统状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值