智能手表低功耗设计:sleep模式切换的实测数据对比
在智能手表(Wear OS / RTOS平台)中,休眠(Sleep / Stop / Standby)模式的选择与切换策略直接决定待机续航。同一颗MCU(以STM32L4+ nRF5340双核典型组合为例),不同休眠深度、唤醒源配置带来的电流差异可达两个数量级。本文给出实测数据与代码切换模板。
一、休眠等级与硬件配置
模式 描述 唤醒源 典型唤醒延迟
Run(LCD ON) 全速+显示刷新 — —
Sleep(WFI, 仅CPU停) 外设保持,SRAM保留 任何中断 < 2μs
Stop1(深睡) 主时钟关,SRAM/LCD RAM保留,少数外设可选 EXTI/RTC/Timer/WKUP引脚 3~5 μs
Standby(最低) 仅备份域+RTC保留,SRAM丢失需重启 RTC Alarm / WKUP引脚 ~50 μs(冷启残留)
Shutdown(nRF52) 全掉电,仅复位电路活 Pin Reset / RTC ms级
二、实测电流数据(STM32L452 + 典型穿戴外设)
测试条件:3.7V LiPo,关闭调试接口(SWD),开启BOR,室温25℃。
工作状态 外设状态 平均电流 备注
Run @ 80MHz + OLED ON 加速度计@25Hz, 心率LED OFF 8.4 mA 正常使用
Sleep (WFI) + OLED OFF 加速度计@25Hz, BLE保持连接 1.2 mA 短时 idle
Stop1 + BLE保留(Advertising 1Hz) 仅RTC+Radio LP 23 μA 典型抬腕唤醒待机
Stop1 + 全外设关(仅RTC 1Hz) — 3.8 μA 深度待机,日历闹钟
Standby + RTC SRAM丢失需重初始化 0.9 μA 需用户感知重启
nRF5340 Shutdown (App core) + Radio LP — 1.5 μA 蓝牙广播保持(Adv 1s/2s)
续航推算(按 100mAh电池):Stop1(RTC only) ≈ ≈ 100mAh/3.8μA ≈ 2.8年理论待机(实际含抬腕唤醒≈5~7天日常使用)
三、Sleep → Stop1 切换代码示例(HAL)
void enter_stop1_with_rtc_wakeup(void)
{
HAL_SuspendTick(); // 停止Systick中断防唤醒
// 配置RTC Alarm(例:5秒后唤醒)
HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm);
// 进入Stop1(保留SRAM, 关主时钟)
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,
PWR_STOPENTRY_WFI);
// --- 唤醒后从这里继续执行 ---
SystemClock_Config(); // 重配HSE/PLL(Stop后HSI默认)
HAL_ResumeTick();
// 清RTC Alarm Flag
__HAL_RTC_ALARM_CLEAR_FLAG(&hrtc, RTC_FLAG_ALRAF);
}
注意:
• 进Stop前关非必要外设时钟(__HAL_RCC_xxx_CLK_DISABLE)
• 唤醒后第一件事重配系统时钟(HSE+PLL),否则外设时序错
• 若用 HAL_PWREx_EnterSTOP2() 更低功耗但部分SRAM Bank掉电需规划
四、nRF5340 低功耗模式切换(Zephyr风格伪码)
// App core进入System OFF,保留Net core发广播
pm_state_force(PM_STATE_SOFT_OFF, NULL);
// Net core配置低功耗广播间隔
ble_adv_set_interval(1600); // 1s interval
实测确认:Net core在System OFF下仍可维持 Adv 1Hz → 平均1.5μA。
五、关键优化与避坑
问题 原因 解决
Stop模式电流 >> 20μA DBGMCU_CR 未关(SWD仍吸电)或 未关GPIO时钟 __HAL_DBGMCU_DISABLE_DBG() + __HAL_RCC_GPIOx_CLK_DISABLE()
唤醒后串口乱码 系统时钟未切回HSE/PLL就printf 在WFI返回后立刻调 SystemClock_Config()
RTC不唤醒 RTC时钟源在Stop下未保持(LSI vs LSE) 用 LSE (32.768kHz) 且 HAL_PWREx_EnableBkUpReg()
偶尔唤醒失败 唤醒源优先级低于 PendSV/SysTick 确保无高优先级 pending IRQ;关Systick before WFI
BLE断开再连失败 应用未保存连接参数或白名单 在Stop→Run 重建 BLE 协议栈上下文
六、续航估算建议
实际佩戴场景(每日抬腕30次、心率采5min、BLE同步2min):
• 按实测:Run 8.4mA×活跃占比≈2h + Stop1(3.8μA)×22h
• 典型续航 ≈ 5~7天(100mAh电池)
- 若改为Standby(0.9μA)且无抬腕 → 理论>20天(失去交互体验)
七、结语
智能手表低功耗设计的核心在于按使用场景分层进入Sleep/Stop1/Standby,并在唤醒后正确恢复时钟与外设。实测数据表明,合理运用Stop1模式(保留RTC与必要唤醒源)可将待机电流从mA级压至μA级,是实现“一周一充”穿戴产品的决定性手段。





