STM32L1XX系列低功耗

1电源管理

  • 上电复位 POR 参考

  • 掉电复位 PDR

  • 欠压复位
    使能BOR后POR和PDR的门限将被忽略,转而使用BOR设置的门限,BOR门限 在 option bytes中配置

模式 门限
1 1.8V上电 1.65V断电
2 2.1V上电 2.0V断电
3 2.4V上电 2.3V断电
4 2.7V上电 2.6V断电
5 2.9V上电 2.8V断电
  • 可编程电压监控 PVD

软件控制,监控VDD,门限可以设置在1.8-3.1间,100mV为间隔,当PVD大于或者小于门限则产生一个外部中断.

2低功耗模式

2.1低功耗运行模式

内核和外设都可以保存运行状态,需要配置内部电源变换器工作在低功耗模式下,系统时钟必须设置在128KHz一下,可以使用MSI作为系统时钟,内核供电必须选择供电范围2(1.5V),并且关闭动态电压调节功能

2.2睡眠模式

内核停止运行,外设保持运行.
通过特殊指令进入睡眠模式.
WFI由中断唤醒,任意的NVIC识别到外设中断都可以唤醒内核
WFE由事件唤醒,被配置为事件模式的EXTI中断唤醒内核

2.3低功耗睡眠模式

内核停止运行,外设保存运行

2.4停止模式

内核停止,内核电源范围内的时钟都停止,晶振也禁止,SRAM和寄存器内容保留。启动时需要重新配置时钟,并且清除标志位,唤醒后程序继续之前的运行。

2.5待机模式

电源内部变换器关闭、内核电源范围内全部断电,晶振被禁止,SRAM和寄存器不保留,RTC寄存器和备份寄存器保留。在待机模式下所有IO都保存高阻态,除了复位、RTC报警输出引脚、唤醒引脚,功耗典型值为1ua,但是如果对接了外部电路,不用配置引脚的优势也就变成了劣势,就如同我测试的SPI设备,待机模式的时候MOSI和SCK实际上是有电流的,功耗降不下去,这种时候选择停止模式,来单独配置IO口才行。

2.6 总结

image

3 代码与测试

测试硬件: 将STM32L151开发板上的多余器件全部去除
低功耗初始化函数

void low_power_init()
{
  /* Enable Ultra low power mode */
  HAL_PWREx_EnableUltraLowPower();
    
  /* Enable the fast wake up from Ultra low power mode */
  HAL_PWREx_EnableFastWakeUp();
    
    HAL_PWR_DisablePVD();
        
}

3.1待机模式(standby)

进入待机模式的代码,使用HAL库中的stm32l1xx_hal_pwr.c文件,下列中如果不进行清除标志位,则设备在第二次进入待机模式后将自动被唤醒。

void enter_standby_wakup()
{
        if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
        {
            /* Clear Standby flag */
            __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); 
        }
      HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
      __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
        
      HAL_PWR_EnterSTANDBYMode();
}

进入低功耗后所有引脚都会被置为高阻态,正常运行时功耗在10几mA,进入standby后电流下降到1~5uA左右,通过PA0上拉唤醒,该引脚也无需配置

3.2停止模式

代码使用了一个启动后常亮的引脚和一个外部中断按键,前者用于判断在进入停机模式后,引脚状态,结果是引脚仍然处于之前的状态,也就是寄存器被保持了。后者用于退出停机模式。

//该模式在退出时候必须重新配置时钟
//该模式需要在中断回调中添加
//__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

void enter_stop_exti()
{
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
    SystemClock_Config();
}

如果单单进入停止模式,外部引脚是有可能消耗电量的,可用如下代码将全部引脚置为浮空输入,并且关闭GPIO时钟

  GPIO_InitTypeDef GPIO_InitStructure = {0};
  /* Enable GPIOs clock */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();

  /* Configure all GPIO port pins in Analog Input mode (floating input trigger OFF) */
  GPIO_InitStructure.Pin = GPIO_PIN_All;
  GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStructure.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); 
  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
  HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
  HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
  HAL_GPIO_Init(GPIOH, &GPIO_InitStructure);

  /* Disable GPIOs clock */
  __HAL_RCC_GPIOA_CLK_DISABLE();
  __HAL_RCC_GPIOB_CLK_DISABLE();
  __HAL_RCC_GPIOC_CLK_DISABLE();
  __HAL_RCC_GPIOD_CLK_DISABLE();
  __HAL_RCC_GPIOH_CLK_DISABLE();

但并不是所有引脚都应该配置成浮空输入,对于一些特殊引脚可用在关闭时钟前进行单独配置,例如

~~~
        GPIO_InitStructure.Pin = GPIO_PIN_7;
        GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD;
        GPIO_InitStructure.Pull = GPIO_PULLDOWN;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
~~~

停止模式并不会重启程序,被唤醒后将会继续执行之前的代码,也就是说引脚是应该被回复成被应用的状态,我们可以在将所有引脚配置成为浮空输入之前保存一下GPIO寄存器的值,然后在退出停止模式后,将保存的值再赋值给寄存器。

//读取当前GPIO状态
GPIO_TypeDef gpio_a;
GPIO_TypeDef gpio_b;
GPIO_TypeDef gpio_c;
GPIO_TypeDef gpio_h;
rt_memcpy(&gpio_a,GPIOA,sizeof(GPIO_TypeDef));
rt_memcpy(&gpio_b,GPIOB,sizeof(GPIO_TypeDef));
rt_memcpy(&gpio_c,GPIOC,sizeof(GPIO_TypeDef));
rt_memcpy(&gpio_h,GPIOH,sizeof(GPIO_TypeDef));

//复位IO
rt_memcpy(GPIOA,&gpio_a,sizeof(GPIO_TypeDef));
rt_memcpy(GPIOB,&gpio_b,sizeof(GPIO_TypeDef));
rt_memcpy(GPIOC,&gpio_c,sizeof(GPIO_TypeDef));
rt_memcpy(GPIOH,&gpio_h,sizeof(GPIO_TypeDef));

3.3 睡眠模式

睡眠模式能够被任意中断唤醒,也就是滴答定时器中断也能唤醒它,下列示例代码是在rtt系统下,在空闲回调里面添加进入休眠模式

void enter_sleep()
{
    /*Suspend Tick increment to prevent wakeup by Systick interrupt. 
    Otherwise the Systick interrupt will wake up the device within 1ms (HAL time base)*/
    //HAL_SuspendTick();

    /* Enter Sleep Mode , wake up is done once Key push button is pressed */
    HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);

    /* Resume Tick interrupt if disabled prior to sleep mode entry*/
    //HAL_ResumeTick();
}

void low_pwoer_hook_cb()
{
     //该回调未关闭滴答
   enter_sleep();
}

void low_power_set_idle_hook()
{
        rt_thread_idle_sethook(low_pwoer_hook_cb);
}

4 官方文档翻译

  • 芯片功耗典型值
    待机模式:0.28uA
    待机模式+RTC:1.11uA
    停止模式:0.44uA
    停止模式+RTC:1.38uA
    低功耗运行模式:10.9uA
    运行模式: 185uA/MHz

5 实际测试图

下图为STM32L151进入停止模式 和 SX1278进入休眠模式的功耗图


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,561评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,218评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,162评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,470评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,550评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,806评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,951评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,712评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,166评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,510评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,643评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,306评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,930评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,745评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,983评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,351评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,509评论 2 348

推荐阅读更多精彩内容