STM32低功耗学习笔记

闲来无事,学习STM32电源管理相关知识,怕以后忘记,记录相关笔记在此

前提:STM32有运行,睡眠,停止,待机状态,其中睡眠,停止,待机状态均可以降低功耗

既然是笔记,就抓重点,我喜欢问答方式得思维方式。

初看时,提出4个疑问。

1.芯片可以在哪个电压范围运行?

2.睡眠,停止,待机三个状态得区别

3.三种方式得代码如何编写?

1.在刚开始电压低于 VPOR 时 (约 1.92V),STM32 保持在上电复位状态 (POR,Power On Reset),当 VDD 电压持续上升至大于 VPOR 时,芯片开始正常运行,而在芯片正常运行的时候,当检测到 VDD 电压下降至低于 VPDR 阈值 (约 1.88V),会进入掉电复位状态 (PDR,Power Down Reset)。2

2.三个模式得具体差别如下,重点在睡眠和停止状态,待机状态相当于设备已经关机了,不做过多介绍。睡眠:只关闭了内核时钟,但是外设时钟没有关闭,唤醒后可以马上控制外设如灯开,灯关。停止模式:外设时钟已经关闭,唤醒时需要重新开启外设时钟,等待外设时钟就绪才能重新控制开关灯

 

3.1 进入睡眠模式(代码如下)

while(1)
{
    printf("\r\n 进入睡眠模式,按 KEY1 或 KEY2 按键可唤醒\r\n");
    // 使用红灯指示,进入睡眠状态
    LED_RED;
    // 进入睡眠模式
    __WFI(); //WFI 指令进入睡眠,也可以使用事件指令进入睡眠__WFE();
    // 等待中断唤醒 K1 或 K2 按键中断
    /*** 被唤醒,亮蓝灯指示 ***/
    LED_BLUE;
    Delay(0x1FFFFF);
    printf("\r\n 已退出睡眠模式\r\n");
}

3.2进入停止模式,调用标准库函数,关键在于后续唤醒,需要唤醒外部时钟以及外设时钟

//进入停止模式

PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);

//重新唤醒外部时钟

static void SYSCLKConfig_STOP(void)
{
    /* 使能 HSE */
    RCC_HSEConfig(RCC_HSE_ON);
    /* 等待 HSE 准备就绪 */
     while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);

    /* 使能 PLL */
    RCC_PLLCmd(ENABLE);

    /* 等待 PLL 准备就绪 */
    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

    /* 选择 PLL 作为系统时钟源 */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* 等待 PLL 被选择为系统时钟源 */
    while (RCC_GetSYSCLKSource() != 0x08);
}

3.3进入待机模式,进入待机模式相当于关机,因此唤醒方式只有上电唤醒或引脚唤醒,相当于要么电源重新开关,要么控制待机得引脚有电了就解除待机状态,反之进入待机有以下步骤。

/* 使能电源管理单元的时钟 , 必须要使能时钟才能进入待机模式 */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);

/* 清除 WU 状态位 */

PWR_ClearFlag (PWR_FLAG_WU);

/* 使能 WKUP 引脚的唤醒功能 ,使能 PA0*/

PWR_WakeUpPinCmd (ENABLE);

/* 进入待机模式 */

PWR_EnterSTANDBYMode();

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值