如何配置RTC以周期性地从低功率模式唤醒STM32
如何配置RTC以周期性地从低功率模式唤醒STM32 1。简介STM32的集成RTC(实时时钟)外围设备可用于定期将其从各种低功耗模式中唤醒。这很常见。。。
如何配置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))*唤醒计数器
===>唤醒计数器=唤醒时间/唤醒时基
唤醒时基=(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
唤醒时间=0.488毫秒*唤醒计数器
唤醒计数器=唤醒时间/0.488毫秒=10秒/0.488 ms=20491=0x500B
在下面的练习中,我们将使用刚才计算的值。
4.步骤
- 打开STM32CubIDE
- 使用NUCLEO-L476板创建新项目

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

- 使用默认设置初始化所有外围设备:
- 要执行此操作,请单击下面的“是”:

- 选择RTC
- 在“引脚输出和配置”选项卡中的“定时器”下,选择RTC:

- 激活时钟源并启用内部唤醒
- 首先单击“激活时钟源”以启用RTC外围设备的时钟。
- 对于唤醒,选择“内部唤醒”,而不是将唤醒信号输出到引脚。此内部唤醒将负责在RTC中设置的编程时间段后将STM32从低功率模式唤醒。

- 配置RTC
- 我们将使用本文前面计算的值。选择唤醒时钟为RTCCLK/16,然后将唤醒计数器设置为0x500B。

- 启用RTC全局中断
- 我们将使用WFI(等待中断)进入STOP模式,因此要从STOP模式唤醒,我们需要为RTC启用中断。

- 将RTC的时钟源设置为LSE(Nucleo板上的外部32.768 KHz晶体):
- 在时钟配置选项卡中,为RTC源Mux选择LSE,如下所示:

- 生成代码
- 保存项目,它将生成代码。
- 添加代码
- 现在,我们将添加一些代码,使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();/*用户代码结束时*/
- 现在构建代码,加载并重置板以开始执行。
- 您将看到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。。。