STM32L051C8T6两个低功耗模式对比

[复制链接]
keer_zu 发表于 2025-8-14 03:22 | 显示全部楼层 |阅读模式
### **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

进入方法

// 配置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默认作为系统时钟唤醒后):
    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配置正确:
      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)获取更详细的电气特性与寄存器配置细节。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1477

主题

12909

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部