STM32L051C8T6两个低功耗模式对比

针对STM32L051C8T6两个低功耗模式对比:


1. Standby Mode with RTC

进入方法
c 复制代码
// 配置RTC唤醒源(如周期唤醒)
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x1000, RTC_WAKEUPCLOCK_RTCCLK_DIV16); // 示例值

// 进入Standby模式
HAL_PWR_EnterSTANDBYMode();

关键步骤

  1. 使能RTC时钟(__HAL_RCC_RTC_ENABLE()
  2. 配置RTC唤醒时间(通过HAL_RTCEx_SetWakeUpTimer_IT()
  3. 使能唤醒中断(__HAL_PWR_ENABLE_IT(PWR_IT_WU)
  4. 清除唤醒标志(__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU)
  5. 执行HAL_PWR_EnterSTANDBYMode()
功耗
  • 典型值:0.3 μA(VDD = 3.3V, 25°C)
  • 所有时钟关闭,内核电压域断电,SRAM/寄存器内容丢失(除备份域)。
唤醒源
  • RTC唤醒事件(配置的定时器到期)
  • NRST引脚外部复位
  • 唤醒引脚(PA0)(上升沿触发)
唤醒后执行
  • 系统复位,程序从头开始执行(相当于上电复位)。

  • 可通过PWR->CSR检查唤醒标志(SBF)判断是否从Standby唤醒:

    c 复制代码
    if (__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);

关键步骤

  1. 选择稳压器模式(PWR_LOWPOWERREGULATOR_ONPWR_MAINREGULATOR_ON
  2. 配置RTC唤醒(同上)
  3. 使用WFIWFE指令进入(PWR_STOPENTRY_WFI/WFE
功耗
  • 低功耗稳压器开启:~1 μA(VDD=3.3V, 25°C)
  • 主稳压器开启 :~10 μA
    实际功耗受GPIO状态、未关闭外设影响。
唤醒源
  • RTC唤醒事件
  • 外部中断(EXTI)(如按键、传感器信号)
  • LPUART/USART唤醒
  • LPTIM中断
唤醒后执行
  • 从中断处继续执行(非复位)。

  • 需重新配置系统时钟 (HSI默认作为系统时钟唤醒后):

    c 复制代码
    void 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保持
唤醒后执行位置 复位(从头开始) 中断处继续执行
时钟恢复 无需(复位后初始化) 需手动重新配置系统时钟
唤醒延迟 较长(复位流程) 极短(仅中断响应时间)

补充说明

  1. RTC时钟源

    • 使用LSE(32.768 kHz)以最小化功耗。

    • 确保RTC配置正确:

      c 复制代码
      RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
      PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
      PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
      HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
  2. GPIO配置

    • 所有未使用的GPIO应配置为模拟输入以降低功耗。
    • 唤醒引脚(如PA0)需配置为GPIO_MODE_IT_RISING
  3. 调试影响

    • 连接调试器时功耗会增加,实际测量需断开调试接口。

建议参考STM32L051x8数据手册(DS11195)和参考手册(RM0377)获取更详细的电气特性与寄存器配置细节。