[应用相关] STM32进入待机模式并唤醒过程详解

[复制链接]
957|1
 楼主| xiaoqizi 发表于 2025-6-13 18:22 | 显示全部楼层 |阅读模式
STM32CubeMX配置流程
1、配置时钟
注意:如想要使用芯片内置的16MHz的HSI时钟作为时钟源的话,这一步可以省略。
如希望使用芯片外置的晶振作为时钟源,可以像我这样配置:
注意:我的外置晶振是8Mhz的。

1.png

2.png

先输入外部晶振的时钟源是8MHz,之后选择它作为时钟源输入到PLL,将PLL的时钟作为时钟源作为系统时钟。最后将HCLK强行修改到168MHz,之后软件会自动计算出来PLL的参数。

2、配置唤醒

3.png

在途中复选框打勾,即可完成唤醒源PA0引脚的配置。
**注意:**在Debug一栏,默认是Disable,可以选择SWD或者是JTAG,不要保持默认,否则下次就连不上JTAG啦!
【当然如果不小心保持了默认的Disable,以至于连不上JTAG了,我们也有办法的,比如使用串口下载程序,往后有机会细讲】

3、配置LED引脚
这个时候其实已经完成了待机模式及唤醒的配置,但为了观看效果,可以将原理图上的LED配置上。由于硬件电路是LED引脚输出低电平的时候,LED点亮,这里配置输出低电平。

4.png

这个时候我们查看一下,PA0是自动配置的,我们不需要改动。

5.png

STM32代码编写
1、上电之后检查是否曾处于待机模式
__HAL_RCC_PWR_CLK_ENABLE();//Enable PWR clock
    if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)//Has device been in Standby mode?
    {
      /* Clear Standby flag */
      __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);

      HAL_GPIO_WritePin(GPIOF, LED0_Pin|LED1_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(GPIOF, LED0_Pin|LED1_Pin, GPIO_PIN_RESET);
      HAL_Delay(500);

      HAL_GPIO_WritePin(GPIOF, LED0_Pin|LED1_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(GPIOF, LED0_Pin|LED1_Pin, GPIO_PIN_RESET);
      HAL_Delay(500);

      HAL_GPIO_WritePin(GPIOF, LED0_Pin|LED1_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(GPIOF, LED0_Pin|LED1_Pin, GPIO_PIN_RESET);
      HAL_Delay(500);
    }



如果曾处于待机模式,也即是说,设备是从待机模式被唤醒的,那么就会进if语句,先将标志位清零,之后将LED等多次置为高低电平,方便我们观察。

2、进入待机模式
    HAL_Delay(5000);

    HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);//Disable PWR_WAKEUP_PIN1 connected to PA0
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//clear flag
    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//Enable PA0 WakeUp Pin
    HAL_PWR_EnterSTANDBYMode();//Enter Standby Mode


前面先延迟5秒,让LED点亮5秒钟,即便不是从待机唤醒的,也会被我们观察到现象。
之后就是进入待机模式的流程。

实验现象
1、下载程序之后
LED灯亮5秒之后熄灭……当我们按下连接到PA0的按键之后,松开按键的瞬间【上升沿唤醒】,看到LED闪烁多次,又连续5秒点亮。证明芯片是从待机模式被唤醒的。

6.png

2、调试
在STM32CubeIDE软件上,执行如下步骤:

7.png

8.png

9.png

10.png

11.png

当程序执行到断点处,观看PWR寄存器。
第一次执行到的时候,不会进入if语句。
当进入待机模式后,按下PA0的按键,再次程序执行到断点处,观看寄存器的值。

12.png

程序进入了if语句,观看右侧的寄存器,对照芯片参考手册既可了解详细细节,此处不多赘述。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/smart_boy__/article/details/148214019

小岛西岸来信 发表于 2025-7-5 18:52 | 显示全部楼层
浅浅回答下,配置 WKUP 引脚 / RTC 闹钟触发,唤醒后执行复位流程重新初始化外设与代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

4366

帖子

3

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