如何配置RTC以周期性地从低功率模式唤醒STM32

1.简介


STM32的集成RTC(实时时钟)外围设备可用于定期将其从各种低功耗模式中唤醒。电池供电的应用程序通常具有电源方案,其中应用程序将运行一小段时间,然后进入低功率模式以节省电力并延长电池寿命。RTC可用于从低功率模式唤醒STM32,即使在待机等最低功率模式下也是如此。
在本文中,我们将了解如何配置STM32的RTC外围设备,以周期性地从低功率模式唤醒STM32,如STOP2模式,STOP2模式是STM3L4的最低功率模式之一。

2.先决条件

 
  • 硬件:
    • 用于为板供电和编程的迷你USB电缆
    • 核苷酸-L476
  • 软件
    • STM32管
 

3.理论


STM32中的RTC可以配置为唤醒源,用于从STOP等低功率模式唤醒微控制器。假设我们想每10秒从STOP模式唤醒一次,RTC可以很容易地设置为这样做。STM32L476的RTC时钟源,即本例中Nucleo-L476板上使用的微控制器,可以由LSI(低速内部)或LSE(低速外部)振荡器提供。Nucleo板包括一个连接到LSE振荡器引脚的32.768 KHz晶体。在本练习中,LSE振荡器将被选为RTC的时钟源,因为它比LSI振荡器提供了更高的精度。
我们将计算RTC的唤醒计数器,使其每10秒唤醒一次STM32。举个例子,让我们将RTC时钟的预分频器设置为16。以下是计算唤醒计数器设置的公式:
RTC_WAKEUPCLOCK_RTCCLK_DIV=RTCCLK_Div16=16
唤醒时基=(RTC_WAKEUPCCLOCK_RTCCLK_DIV/(LSI))
唤醒时间=唤醒时基*唤醒计数器
=(RTC_WAKEUPCCLOCK_RTCCLK_DIV/(LSI))*唤醒计数器
===>唤醒计数器=唤醒时间/唤醒时基
 
要将唤醒计时器配置为10s,让我们计算上面解释的唤醒计数器:
唤醒时基=16/(~32.768KHz)=0.488毫秒
唤醒时间=0.488毫秒*唤醒计数器
唤醒计数器=唤醒时间/0.488毫秒=10秒/0.488 ms=20491=0x500B

在下面的练习中,我们将使用刚才计算的值。


4.步骤

  1. 打开STM32CubIDE  
  2. 使用NUCLEO-L476板创建新项目


 
  1. 输入项目的名称。
  • 对于这篇文章,我将把我的项目称为“RTCWakeUP”

 
  1. 使用默认设置初始化所有外围设备:
  • 要执行此操作,请单击下面的“是”:
  1. 选择RTC
  • 在“引脚输出和配置”选项卡中的“定时器”下,选择RTC:
  1. 激活时钟源并启用内部唤醒
  • 首先单击“激活时钟源”以启用RTC外围设备的时钟。
  • 对于唤醒,选择“内部唤醒”,而不是将唤醒信号输出到引脚。此内部唤醒将负责在RTC中设置的编程时间段后将STM32从低功率模式唤醒。
  1. 配置RTC
  • 我们将使用本文前面计算的值。选择唤醒时钟为RTCCLK/16,然后将唤醒计数器设置为0x500B。

 
  1. 启用RTC全局中断
  • 我们将使用WFI(等待中断)进入STOP模式,因此要从STOP模式唤醒,我们需要为RTC启用中断。
  1. 将RTC的时钟源设置为LSE(Nucleo板上的外部32.768 KHz晶体):
  • 在时钟配置选项卡中,为RTC源Mux选择LSE,如下所示:

 
  1. 生成代码
  • 保存项目,它将生成代码。
  1. 添加代码
  • 现在,我们将添加一些代码,使STM32处于低功率模式:STOP 2模式,并使用我们配置的RTC唤醒。
STOP2模式是STM32L4中提供的最低功率模式之一,它提供了快速唤醒时间和保留的RAM和寄存器配置。

总的来说,执行循环开启LED 1秒,进入STOP 2模式,然后RTC在10秒后唤醒STM32。当RTC唤醒设备时,执行转到RTC ISR以清除一些RTC故障,然后返回到main以继续代码执行。

 
/*用户代码开始时*/WHILE(1){HAL_GPIO_WritePin(LD2_GPIO_Port、LD2_Pin、GPIO_Pin_SET);HAL_Delay(1000);HAL_GPIO_2 WritePin tc);系统时钟配置();HAL_ResumeTick();/*用户代码结束时*/
 
  1. 现在构建代码,加载并重置板以开始执行。
  • 您将看到LED亮起一秒钟,然后熄灭10秒钟(STM32处于低功率模式),然后RTC唤醒STM32,LED将再次亮起,并将持续重复。
 

5.链接


STM32L496-产品介绍
STM32L47xxx、STM32L48xxx、STM22L49xxx和STM32L44xxx基于Arm®的高级32位MCU-参考手册。。。
STM32CubeIDE-STM32集成开发环境-STMicroelectronics
NUCLEO-L476RG-STM32Nucleo-64开发板,带STM32L476RGMCU,支持Arduino和ST morp。。。