[STM32F0] STM32F030 STOP低功耗模式配置 11uA

[复制链接]
3414|3
 楼主| 幸福小强 发表于 2018-5-13 20:47 | 显示全部楼层 |阅读模式

1、进入睡眠的关键语句

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

2、进入低功耗需要的配置,GPIO配置原则:不回路,不悬空输入。下面是将所有IO输出为0

//输出
GPIOA->MODER = 0x55555555;
GPIOB->MODER = 0x55555555;
GPIOC->MODER = 0x55555555;
GPIOD->MODER = 0x55555555;
GPIOF->MODER = 0x55555555;
//即不上拉,也不下拉
GPIOA->PUPDR = 0x00000000;
GPIOB->PUPDR = 0x00000000;
GPIOC->PUPDR = 0x00000000;
GPIOD->PUPDR = 0x00000000;
GPIOF->PUPDR = 0x00000000;
//输出0
GPIOA->ODR=0x00000000;
GPIOB->ODR=0x00000000;
GPIOC->ODR=0x00000000;
GPIOD->ODR=0x00000000;
GPIOF->ODR=0x00000000;

3、非常重要:在配置IO之前,一定要先开启GPIO时钟

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);

好了,以上三点在程序中的顺序是反的,配置好之后,11uA!

如果第2点之前没有第3点,则2.6mA。


 楼主| 幸福小强 发表于 2018-5-13 20:48 | 显示全部楼层
  1. #include "stm32_lib/inc/stm32f0xx_rcc.h"  
  2. #include "stm32_lib/inc/stm32f0xx_pwr.h"  
  3.   
  4.   
  5. int main(void)  
  6. {  
  7.     //必须先开启时钟,在配置IO,否则配置的IO无效,电流无法进入uA级  
  8.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  
  9.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);  
  10.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);  
  11.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);  
  12.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);  
  13.   
  14.     //进入低功耗模式,IO配置原则为不悬空输入、不形成回路  
  15.   
  16.     //下面是配置输出为0  
  17.     //输出  
  18.     GPIOA->MODER = 0x55555555;  
  19.     GPIOB->MODER = 0x55555555;  
  20.     GPIOC->MODER = 0x55555555;  
  21.     GPIOD->MODER = 0x55555555;  
  22.     GPIOF->MODER = 0x55555555;  
  23.     //即不上拉,也不下拉  
  24.     GPIOA->PUPDR = 0x00000000;  
  25.     GPIOB->PUPDR = 0x00000000;  
  26.     GPIOC->PUPDR = 0x00000000;  
  27.     GPIOD->PUPDR = 0x00000000;  
  28.     GPIOF->PUPDR = 0x00000000;  
  29.     //输出0  
  30.     GPIOA->ODR=0x00000000;  
  31.     GPIOB->ODR=0x00000000;  
  32.     GPIOC->ODR=0x00000000;  
  33.     GPIOD->ODR=0x00000000;  
  34.     GPIOF->ODR=0x00000000;  
  35.   
  36.     //  
  37.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);  
  38.     PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);  
  39.   
  40.     while(1)  
  41.     {  
  42.     }  
  43. }  
 楼主| 幸福小强 发表于 2018-5-13 20:49 | 显示全部楼层
varda 发表于 2019-10-18 14:06 | 显示全部楼层
用这个方式,我就一个IC为什么会到400uA。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

143

主题

1720

帖子

2

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