• 正文
  • 相关推荐
申请入驻 产业图谱

APM32F402/403 RTC 定时唤醒 STOP 模式实战:低功耗系统精准唤醒方案

20小时前
211
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在电池供电、工业传感、便携医疗等低功耗应用场景中,STOP 模式凭借近乎零功耗的特性,成为延长设备续航的核心手段。APM32F402/F403 系列 MCU 的 RTC(实时时钟)模块,支持在 STOP 模式下通过闹钟 / 周期唤醒实现精准计时与低功耗切换。AN1162 应用笔记系统梳理了 RTC 配置、STOP 模式 entry/exit 流程、时钟源选择及低功耗优化技巧,本文基于官方文档,用工程化语言完整拆解,帮你快速实现“精准定时 + 深度休眠”的高效组合。

资料获取:AN1162_APM32F402_F403_RTC定时唤醒STOP模式

1. 核心场景与价值:为什么用 RTC 唤醒 STOP?

STOP 模式下,MCU 内核、大部分外设时钟均停止,仅保留 RTC、备份域及少量唤醒逻辑,功耗可降至μA 级,大幅降低电池损耗。

RTC 定时唤醒的核心价值在于:

  • 精准时序控制:按秒 / 分 / 小时 / 日周期唤醒,无需依赖外部中断
  • 低功耗续航:休眠期间 CPU 停止,仅 RTC 运行,适配电池供电场景
  • 多场景适配:定时采集、定时上报、定时自检、低功耗计时等

2. RTC 与 STOP 模式基础:关键配置与原理

2.1 RTC 核心特性(AN1162 重点)

  • 支持日历计时(秒 / 分 / 时 / 日 / 周 / 月 / 年)与计时计数两种模式
  • 唤醒源:闹钟(Alarm A/B)、周期唤醒(Wakeup Timer)
  • 时钟源:可选LSE(低速外部晶振,32.768kHz)、LSI(低速内部晶振,约 32kHz)
  • 特性:支持备份域保护、溢出中断、校准功能

2.2 STOP 模式分类与唤醒逻辑

APM32F402/F403 的 STOP 模式分为STOP0与STOP1,核心差异在于唤醒源与恢复效率:

  • STOP0:支持 RTC 闹钟 / 周期唤醒、外部中断唤醒,恢复速度快
  • STOP1:仅支持少量唤醒源,功耗更低,适合极致低功耗场景

AN1162 推荐优先使用STOP0,兼容性与稳定性最佳。

唤醒流程核心逻辑:

  1. 进入 STOP 模式:内核休眠、时钟关闭、备份域保持供电
  2. RTC 计时运行,到达预设时间 / 周期时触发闹钟 / 周期中断
  3. 中断唤醒 MCU:退出 STOP 模式,恢复时钟与外设,执行任务

3. 硬件设计:RTC 与 STOP 模式必备电路

3.1 RTC 时钟源选择(直接影响精度)

时钟源 特点 适用场景 精度
LSE(32.768kHz) 外部晶振,温漂小,稳定性高 高精度定时、时钟同步场景 ±20ppm~±50ppm
LSI(约 32kHz) 内部晶振,无需外部器件 低成本、低精度、仅需计时场景 约 ±1%(随温度 / 电压波动

推荐方案:高精度应用优先接LSE 晶振(X1=32.768kHz,匹配电容 12~20pF),低成本应用可选用 LSI。

3.2 唤醒引脚与电源设计

  • RTC 唤醒无需额外 GPIO(闹钟 / 周期为内部中断),若需外部触发唤醒,可配置EXTI 中断引脚
  • STOP 模式下,VBAT 电源必须稳定供电(备份域供电),否则 RTC 数据丢失
  • 增加VBAT 滤波电容(1μF 钽电容 + 100nF 陶瓷电容),抑制电源波动

4. 软件实现:3 步完成 RTC 定时唤醒 STOP 模式(AN1162 标准流程)

步骤 1:RTC 初始化(时钟 + 配置)

  1. 使能备份域时钟:
    RCM_EnableBackupClock(); // 使能备份域时钟
    RCM_EnableLSIClock();    // 使能LSI,或LSE
    
  2. 初始化 RTC(按 AN1162 官方驱动模板):
    // 选择时钟源
    RTC_SelectClockSource(RCM_RTCSEL_LSI); // 或 RCM_RTCSEL_LSE
    // 初始化RTC日历(可选,根据需求设置初始时间)
    RTC_TimeTypeDef RTC_TimeStruct;
    RTC_DateTypeDef RTC_DateStruct;
    RTC_TimeStruct.Hours = 0;
    RTC_TimeStruct.Minutes = 0;
    RTC_TimeStruct.Seconds = 0;
    RTC_DateStruct.WeekDay = RTC_WEEKDAY_MONDAY;
    RTC_DateStruct.Month = RTC_MONTH_JANUARY;
    RTC_DateStruct.Date = 1;
    RTC_DateStruct.Year = 24;
    RTC_Init(&RTC_TimeStruct, &RTC_DateStruct);
    

步骤 2:配置唤醒源(闹钟 / 周期)

方案 A:闹钟唤醒(精准定时,如每 1 分钟唤醒)

RTC_AlarmTypeDef RTC_AlarmStruct;
// 设置闹钟时间:当前时间 + 1分钟(示例)
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct);
RTC_TimeStruct.Seconds += 60;
if (RTC_TimeStruct.Seconds >= 60) {
    RTC_TimeStruct.Seconds -= 60;
    RTC_TimeStruct.Minutes += 1;
}
// 配置闹钟A
RTC_AlarmStruct.AlarmTime = RTC_TimeStruct;
RTC_AlarmStruct.AlarmMask = RTC_ALARMMASK_NONE; // 精准匹配时分秒
RTC_ConfigAlarm(RTC_ALARM_A, &RTC_AlarmStruct);
// 使能闹钟中断
RTC_EnableAlarmInterrupt(RTC_ALARM_A);

方案 B:周期唤醒(循环定时,如每 1 秒唤醒)

// 配置周期唤醒:1秒周期(LSI时钟下,计数器值=32768)
RTC_ConfigWakeupTimer(32768); // 周期=计数器值/时钟源频率
// 使能周期唤醒中断
RTC_EnableWakeupTimerInterrupt();

步骤 3:进入 STOP 模式并等待唤醒

  1. 配置中断优先级(RTC 中断属于外部中断 EXTI):
    NVIC_EnableIRQ(RTC_Alarm_IRQn);  // 闹钟中断
    NVIC_EnableIRQ(RTC_WKUP_IRQn);    // 周期唤醒中断
    NVIC_SetPriority(RTC_Alarm_IRQn, 0x0F);
    
  2. 进入 STOP 模式(AN1162 推荐使用官方库函数):
    // 关闭所有不必要的外设时钟(降低功耗)
    PWR_EnablePowerDown();
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); // WFI模式,等待中断
    
  3. 唤醒后处理(中断服务函数):
    // RTC闹钟中断服务函数
    void RTC_Alarm_IRQHandler(void) {
        if (RTC_GetFlagStatus(RTC_FLAG_ALRAF) != RESET) {
            RTC_ClearFlag(RTC_FLAG_ALRAF); // 清除中断标志
            // 执行唤醒任务:如采集数据、上报信息
            // ...
            // 重新设置下一次闹钟(如需循环唤醒)
            RTC_TimeStruct.Hours = 0;
            RTC_TimeStruct.Minutes = 1;
            RTC_TimeStruct.Seconds = 0;
            RTC_ConfigAlarm(RTC_ALARM_A, &RTC_AlarmStruct);
        }
    }
    

5. 关键优化与避坑(AN1162 官方重点)

5.1 低功耗优化技巧

  • 关闭所有未使用外设时钟:进入 STOP 前,关闭 GPIO、ADC、TIM 等外设,进一步降低功耗
  • 配置 GPIO 为浮空输入:避免 GPIO 悬空导致的漏电流
  • 使用 LSI 时钟源:无需外部晶振,减少器件成本与功耗
  • 优化唤醒周期:根据业务需求设置合理周期,避免过度唤醒

5.2 常见问题与解决方案

问题现象 可能原因 解决方法
唤醒失败 时钟源未使能 确认 RCM_RTCSEL 配置正确,LSE/LSI 已启动
时间不准 LSI 温漂 / 漂移 改用 LSE 时钟源;或定期校准 RTC
进入 STOP 后死机 中断未关闭 / 标志未清除 进入前关闭所有非必要中断;唤醒后及时清除标志
功耗过高 外设未关闭 进入 STOP 前关闭所有外设时钟与电源

5.3 注意事项

  • RTC 配置必须在备份域解锁状态下进行(RCM_UnlockBackupConfig()),完成后锁定
  • STOP 模式下,内核寄存器与 RAM 数据会保留,无需额外存储
  • 周期唤醒与闹钟不可同时使用,需根据场景选择

6. 典型应用场景

  • 智能传感器:定时采集环境数据(温湿度、气压等),休眠期间低功耗
  • 医疗设备:定时监测体征数据,电池续航可达数月以上
  • 工业网关:周期性上报设备状态,休眠期间降低电网损耗
  • 便携消费电子:定时提醒、低功耗计时功能

AN1162 为 APM32F402/F403 系列 RTC 定时唤醒 STOP 模式提供了完整的工程化解决方案,核心在于“精准时钟配置 + 低功耗模式切换 + 中断唤醒处理”。通过 LSE/LSI 时钟源选择、闹钟 / 周期唤醒配置、硬件滤波与软件优化,可轻松实现低功耗 + 精准定时的双重需求。无论是低成本传感项目还是高精度网络应用,这套方案都能稳定落地,大幅提升产品续航与可靠性。

相关推荐