单片机
返回首页

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

2020-04-18 来源:eefocus

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


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


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


唤醒定时器的时钟输入可以是:  2、4、8 或 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('进入停止模式rn');


        /* 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 uprn');


}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章