你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32C0评测】sleep,standby,stop,run四种状态功耗检测

[复制链接]
北方 发布时间:2025-4-25 11:37

1 sleep,standby,stop,run四种工作状态

STM32C071 是一款基于 ARM Cortex-M0+ 内核的微控制器,它提供了多种工作模式以优化功耗和性能。以下是 STM32C071 的四种主要工作状态:Run、Sleep、Stop 和 Standby。

Run 状态:这是微控制器的正常工作状态,所有外设和内核都处于活动状态,以全速运行。在这种状态下,功耗相对较高,但性能也达到最佳。 Sleep 状态:在这种状态下,CPU 停止工作,但外设和内存保持活动状态。Sleep 状态可以显著降低功耗,同时保持对外设的快速响应。从 Sleep 状态唤醒通常只需要几微秒。 Stop 状态:Stop 状态比 Sleep 状态更进一步降低功耗。在这种状态下,CPU、外设和内存都停止工作,但某些外设(如 RTC、备份寄存器等)仍可保持运行。从 Stop 状态唤醒需要更长的时间,通常在毫秒级别。 Standby 状态:这是功耗最低的状态,几乎所有模块都停止工作,包括 CPU、外设、内存和振荡器。只有电源控制器和复位电路保持活动状态。从 Standby 状态唤醒需要最长的时间,通常在几十毫秒级别。Standby 状态适用于长时间不活动的应用,如电池供电设备。

在范例代码中,分别在运行和sleep,standby,stop状态切换,展示结果。状态时用标志位来置位而确定的。

检测的方法有两种,一种直接连STLINK一起测量,然后减去其数据

另一种是从开发板的JP5跳线断开,连接万用表的电流档测量。结果相差不大。

73078177.jpg

2 sleep状态及功耗

2.1 运行代码

int main(void)
{

  HAL_Init();

  SystemClock_Config();

  __HAL_RCC_PWR_CLK_ENABLE();

  BSP_LED_Init(LED1);

  BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
  __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
  while (1)
  {
    BSP_LED_Off(LED1);

    HAL_SuspendTick();

    HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);

    HAL_ResumeTick();

    BSP_LED_Init(LED1);
  }
}

2.2 代码说明

通过中断进入睡眠模式并从中唤醒。

在相关软件中,系统时钟设置为 48 MHz。 一个 EXTI 线通过 PC.13 连接到用户按钮,并配置为在按键按下时在下降沿产生中断。 SysTick 被编程为每 1 ms 产生一次中断,并且在 SysTick 中断处理程序中,LED1 被切换以指示 MCU 是处于睡眠模式还是运行模式。 启动后 5 秒,系统自动进入睡眠模式,并且 LED1 停止切换。 用户可以在任何时候按下用户按钮来唤醒系统。 然后软件在运行模式下运行 5 秒,然后再自动进入睡眠模式。 LED1 用于监控系统状态,如下所示:

LED1 切换:系统处于运行模式

LED1 关闭:系统处于睡眠模式

2.3 效果

1439524721.jpg

断开JP5位80uA,即0.8mA

2138008792.jpg

3 standby状态及功耗

3.1 核心代码如下

int main(void)
{

  HAL_Init();

  SystemClock_Config();

  BSP_LED_Init(LED1);


  /* Enable Power Control clock */
  __HAL_RCC_PWR_CLK_ENABLE();
  /* Check if the system was resumed from Standby mode */
  if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
  {
    /* Clear Standby flag */
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
    /* Check and Clear the Wakeup flag */
    if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF2) != RESET)
    {
      __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2);
    }
  }

  HAL_Delay(5000);

  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_HIGH);
  HAL_PWREx_EnablePullUpPullDownConfig();
  HAL_PWREx_EnableGPIOPullUp(PWR_GPIO_C, GPIO_PIN_13);

  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2);


  BSP_LED_On(LED1);
  while (1)
  {
  }
}

编译下载通过11.PNG

3.2 代码说明

系统时钟设置为 48 MHz,一个 EXTI 线连接到 PC.13 引脚并配置为在下降沿产生中断。

SysTick 被编程为每 1 ms 产生一次中断,并且在 SysTick 中断处理程序中,LED1 被切换以指示 MCU 是处于待机模式还是运行模式。

当在 EXTI 线上检测到下降沿时,会产生一个中断并唤醒系统,然后程序检查并清除待机标志。

清除待机标志后,软件启用连接到 PC.13 的唤醒引脚 PWR_WAKEUP_PIN2,然后清除指示已从 PWR_WAKEUP_PIN2 接收到唤醒事件的相应标志。

最后,系统再次进入待机模式,导致 LED1 停止切换。

接下来,用户可以通过按下连接到唤醒引脚 PWR_WAKEUP_PIN2 的用户按钮来唤醒系统。

WKUP 引脚上的下降沿将从待机模式唤醒系统。

或者,外部复位也将导致系统唤醒。应用程序需要确保 SysTick 在从待机模式唤醒后,程序执行以与复位后相同的方式重新开始,LED1 重新开始切换。

LED1 用于监控系统状态,如下所示:

LED1 切换:系统处于运行模式 LED1 关闭:系统处于待机模式 LED1 打开:配置失败(系统将进入无限循环)

3.3 演示效果

2043474830.jpg

断开测量1.35mA

1004921191.jpg

4 stop状态及功耗

4.1 代码

int main(void)
{

  HAL_Init();
  BSP_LED_Init(LED1);
  BSP_LED_Init(LED2);
  SystemClock_Config();
  BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
  __HAL_RCC_PWR_CLK_ENABLE();
  while (1)
  {
    HAL_Delay(5000);
    BSP_LED_Off(LED1);
    BSP_LED_Off(LED2);

   HAL_SuspendTick();
   HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);
    SYSCLKConfig_STOP();
  }
}

4.2 代码解析

如何使用中断进入停止模式并从中唤醒。

在相关软件中,系统时钟设置为 48 MHz,一个 EXTI 线通过 PC13 连接到用户按钮,并配置为在按键按下时在下降沿产生中断。

SysTick 被编程为每 1 ms 产生一次中断,并且在 SysTick 中断处理程序中,LED1 被切换以指示 MCU 是处于停止模式还是运行模式。

启动后 5 秒,系统自动进入停止模式,LED1 停止切换。

用户可以在任何时候按下用户按钮来唤醒系统。

然后软件在运行模式下运行 5 秒,然后再自动进入停止模式。

两个 LED(LED1 和 LED2)用于监控系统状态,如下所示:

LED2 亮起:配置失败(系统将进入无限循环) LED1 切换:系统处于运行模式 LED1 关闭:系统处于停止模式 这些步骤在无限循环中重复。

编译并通过

12.PNG

4.3 效果

1439524721.jpg

断开JP5电流最小,7.6uA

1727603631.jpg

5 小结

这个代码都是通过置位函数实现置位,如下代码,分别控制流过的电流和功耗。

HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);
或者
 HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);

在停止状态非常小,比正常运行小很多。可以通过不同的功耗对比实现不同的效果。最大工作电流1.35mA,最低停止低至7.6uA,而且可以迅速由软件切换,效果非常好,实现低功耗快速切换。

下面是包括stlink的功耗对比情况,供参考

Animation2.gif
Animation3.gif
Animation4.gif
1439524721.jpg
1727132695.jpg
收藏 评论1 发布时间:2025-4-25 11:37

举报

1个回答
STMCU-管管 回答时间:2025-4-25 15:53:33

感谢分享,不错

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版