针对STM32L051C8T6两个低功耗模式对比:
1. Standby Mode with RTC
进入方法:
c
// 配置RTC唤醒源(如周期唤醒)
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x1000, RTC_WAKEUPCLOCK_RTCCLK_DIV16); // 示例值
// 进入Standby模式
HAL_PWR_EnterSTANDBYMode();
关键步骤:
- 使能RTC时钟(
__HAL_RCC_RTC_ENABLE()
) - 配置RTC唤醒时间(通过
HAL_RTCEx_SetWakeUpTimer_IT()
) - 使能唤醒中断(
__HAL_PWR_ENABLE_IT(PWR_IT_WU)
) - 清除唤醒标志(
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU)
) - 执行
HAL_PWR_EnterSTANDBYMode()
功耗:
- 典型值:0.3 μA(VDD = 3.3V, 25°C)
- 所有时钟关闭,内核电压域断电,SRAM/寄存器内容丢失(除备份域)。
唤醒源:
- RTC唤醒事件(配置的定时器到期)
- NRST引脚外部复位
- 唤醒引脚(PA0)(上升沿触发)
唤醒后执行:
-
系统复位,程序从头开始执行(相当于上电复位)。
-
可通过
PWR->CSR
检查唤醒标志(SBF
)判断是否从Standby唤醒:cif (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET) { __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); // 清除标志 // 执行唤醒初始化 }
2. Stop Mode with RTC
进入方法:
c
// 配置RTC唤醒
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x1000, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
// 进入Stop模式
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
关键步骤:
- 选择稳压器模式(
PWR_LOWPOWERREGULATOR_ON
或PWR_MAINREGULATOR_ON
) - 配置RTC唤醒(同上)
- 使用
WFI
或WFE
指令进入(PWR_STOPENTRY_WFI/WFE
)
功耗:
- 低功耗稳压器开启:~1 μA(VDD=3.3V, 25°C)
- 主稳压器开启 :~10 μA
实际功耗受GPIO状态、未关闭外设影响。
唤醒源:
- RTC唤醒事件
- 外部中断(EXTI)(如按键、传感器信号)
- LPUART/USART唤醒
- LPTIM中断
唤醒后执行:
-
从中断处继续执行(非复位)。
-
需重新配置系统时钟 (HSI默认作为系统时钟唤醒后):
cvoid SystemClock_ReConfig(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // 重新配置HSI/MSI/PLL等 HAL_RCC_OscConfig(&RCC_OscInitStruct); HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1); }
-
RTC时钟无需重新配置(由备份域维持)。
关键差异总结
特性 | Standby Mode | Stop Mode |
---|---|---|
功耗 | ~0.3 μA | ~1 μA (低功耗稳压器) |
SRAM保持 | 否 | 是 |
唤醒后执行位置 | 复位(从头开始) | 中断处继续执行 |
时钟恢复 | 无需(复位后初始化) | 需手动重新配置系统时钟 |
唤醒延迟 | 较长(复位流程) | 极短(仅中断响应时间) |
补充说明
-
RTC时钟源:
-
使用LSE(32.768 kHz)以最小化功耗。
-
确保RTC配置正确:
cRCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC; PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
-
-
GPIO配置:
- 所有未使用的GPIO应配置为模拟输入以降低功耗。
- 唤醒引脚(如PA0)需配置为
GPIO_MODE_IT_RISING
。
-
调试影响:
- 连接调试器时功耗会增加,实际测量需断开调试接口。
建议参考STM32L051x8数据手册(DS11195)和参考手册(RM0377)获取更详细的电气特性与寄存器配置细节。