搜索
查看: 2838|回复: 1

[原创] STM32G071评测:PWR

[复制链接]
  • TA的每日心情
    奋斗
    2021-4-15 11:47
  • 签到天数: 537 天

    [LV.9]

    29

    主题

    2176

    帖子

    127

    蝴蝶豆

    论坛元老

    最后登录
    2023-8-27
    发表于 2019-1-18 16:57:14 | 显示全部楼层 |阅读模式
    本帖最后由 stm1024 于 2019-1-19 20:58 编辑

    花了点时间走马观花的学习了一下STM32G0系列的电源管理,把要点拎出来和大家交流一下。
    G0提供了7种低功耗的方式,具有灵活的电源管理机制,有效降低了电源能耗,这7种低功耗方式分别是:
    • Low-power run(低功耗运行模式)
    • Sleep(睡眠模式)
    • Low-power sleep(低功耗睡眠模式)
    • Stop 0(停止模式0)
    • Stop 1(停止模式1)
    • Standby(待机模式)
    • Shutdown(关机模式)
    (如果翻译不对,还望指正)
    G0的电源模型如下:
    1.png

    VDD是主电源,向除VBAT供电之外的所有IO供电,包括Flash、复位、内部温度传感器和内部时钟源等,甚至还有待机电路(包括唤醒逻辑和独立看门狗)。同时VDD也是VDDA,向模拟量外设供电,VREF+是外部参考电压,为ADC或DAC提供参考电压。
    VDD的电源经过稳压器后,就变成了VCore,这个是给内部的外设、Flash控制器、SRAM等供电。
    VBAT是电池供电,这一部分是为备份域供电,备份域包括了RTC和备份寄存器等。

    0.正常运行模式Range1
    这可能是绝大部分MCU所采用的模式:
    2.png

    在此模式下,且系统时钟为64MHz,所有外设都能被供电。
    0.正常运行模式Range2
    这个模式其实和正常运行模式没太多差别:
    3.png

    虽然差别不多,但是还是很显著的:此模式下,系统主频为16MHz,Flash不能被擦除或编程。


    1. 低功耗运行模式
    4.png

    此模式下,主频被限制在2MHz,主稳压器被关闭,由低压稳压器供电,所有的外设可被供电,但是,不能通过PLL倍频(都2MHz了……)


    2.睡眠模式
    睡眠模式同样包括了Range1和Range2:
    5.png


    6.png

    Range1和Range2的主要区别与正常模式下Range1和Range2之间差别类似,即主频、Flash能否被擦除/编程。
    睡眠模式主要指的是ARM CortexM0+的内核进入Sleep了。


    3.低功耗睡眠模式
    低功耗睡眠模式.png

    此模式下,主频被限制在2MHz,ARM CortexM0+的内核进入Sleep,Flash也被断电,但外设都可以被供电。


    4.停止模式0
    STOP0.png

    以此模式为分界线,外设和时钟源已经不再是都可以全功能运行,因此也要留意能唤醒事件有哪些了。


    5.停止模式1
    STOP1.png

    停止模式1和停止模式0很类似,但是稳压器用的是低压稳压器,虽然功耗比停止模式0低,但是唤醒时间也会长一些。


    6.待机模式
    STANDBY.png


    ssss.png

    停止模式可以保持SRAM或不保持SRAM,不保持SRAM的话,SRAM的时钟就被关闭了,肯定功耗低。


    7.关机模式
    Shutdown.png

    这个最省电了,所有外设全都没电了,内核,Flash、SRAM也没电,可以说,除了备份域,其他都没戏了,所以也只能靠备份域唤醒。


    测试
    最后,talk is cheap,废话了这么多,直接上代码:
    1. int main(void)
    2. {
    3.   HAL_Init();
    4.   SystemClock_Config();
    5.   __HAL_RCC_PWR_CLK_ENABLE();

    6.   BSP_LED_Init(LED4);
    7.     BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
    8.   __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
    9.   RCC->IOPSMENR  = 0x00u;
    10.   RCC->AHBSMENR  = 0x00u;
    11.   RCC->APBSMENR1 = 0x00u;
    12.   RCC->APBSMENR2 = 0x00u;
    13.   while (1)
    14.   {
    15.     HAL_Delay(5000);
    16.     HAL_SuspendTick();   
    17.     HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
    18.     HAL_ResumeTick();
    19.     BSP_LED_Init(LED4);
    20.   }
    21. }
    复制代码
    可以通过ST-Link Utility看效果,记得把实时更新打开:
    33.png

    进入了Halted模式,应该就是Stop模式了。(上面配图有误,更正一下)
    按一下蓝色小按钮,唤醒:
    66.png

    嗯,又跑起来了,灯也一闪一闪的了,不过似乎要比第一次慢(不信就把Reset按一下)?
    慢就对了,因为现在用的是低压稳压器,主频被限制在了16MHz。

    祝大家周末愉快~
    回复

    使用道具 举报

    该用户从未签到

    26

    主题

    2070

    帖子

    6

    蝴蝶豆

    论坛元老

    最后登录
    2021-3-31
    发表于 2019-1-19 15:31:43 | 显示全部楼层
    很不错的分享
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-19 15:07 , Processed in 0.170349 second(s), 34 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表