打印

分享STM32的几种省电操作步骤

[复制链接]
4581|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
justperky|  楼主 | 2015-9-16 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  进入SLEEP模式的省电操作
  1、为了降低系统功耗,进入SLEEP模式时,执行如下操作流程:
  关闭无需等待中断或事件的外设时钟;设置进入机制(Sleep-Now或Sleep-on-Exit);设置系统进入SLEEP模式。
  2、退出睡眠模式的方式:
  WFI(等待中断),可由任一外设中断触发,WFE(等待事件),可由任一外设事件触发。

相关帖子

沙发
justperky|  楼主 | 2015-9-16 09:27 | 只看该作者
  进入STOP省电模式的操作
  为了降低系统功耗,进入STOP模式的操作流程:
  关闭设置为普通IO功能的GPIO口时钟;
  关闭已开启时钟的外设的使能位(尤其是ADC、DAC、USB等带模拟模块的外设);
  关闭已开启时钟的外设的时钟;
  关闭预取缓冲区,并将Flash等待周期置为0;
  设置PWR_CR中LPDS位选择电压调节器的模式:
  正常模式:电压调节器处于正常供电状态;
  低功耗模式:可降低电压调节器自身的功耗,
  将MCU从STOP模式唤醒的时间有所增加;
  设置系统进入STOP模式。

使用特权

评论回复
板凳
justperky|  楼主 | 2015-9-16 09:27 | 只看该作者
  退出STOP省电模式的操作
  1、退出停止模式:
  以WFI进入时:任意外部中断线的中断;
  以WFE进入时:任意外部中断线的事件;
  不包括PVD和USB唤醒事件。
  2、从STOP模式恢复后,时钟的配置返回到复位时的状态(系统时钟为HSI),用户程序必须重新配置整个时钟系统,包括PLL。

使用特权

评论回复
地板
王大熊| | 2015-9-18 08:49 | 只看该作者
学习了,这个资料很有借鉴意义

使用特权

评论回复
5
裁定心生| | 2015-9-19 08:45 | 只看该作者
这些都是操作寄存器的,没有操作库函数的步骤简介么

使用特权

评论回复
6
精彩人生sun| | 2015-9-19 22:14 | 只看该作者
讲的很详细,赞一个

使用特权

评论回复
7
打着哈欠说| | 2015-9-21 20:11 | 只看该作者
解释的很详细,对学习低功耗很有帮助

使用特权

评论回复
8
邓布利多| | 2015-9-22 15:18 | 只看该作者
不错,收藏了。

使用特权

评论回复
9
冒泡的鱼儿| | 2015-9-22 22:46 | 只看该作者
ST的低功耗没使用过,顶起来!

使用特权

评论回复
10
Thefantasy| | 2015-9-24 14:56 | 只看该作者
总结的很详细,很有帮助,谢谢了!

使用特权

评论回复
11
追逐浪花| | 2015-9-30 13:33 | 只看该作者
原来是用这种方式去减低功耗
不需要让芯片睡眠吗

使用特权

评论回复
12
shenmu2012| | 2015-10-7 17:18 | 只看该作者
justperky 发表于 2015-9-16 09:27
  进入STOP省电模式的操作
  为了降低系统功耗,进入STOP模式的操作流程:
  关闭设置为普通IO功能的 ...

该模式下这个最低功耗是多大的?

使用特权

评论回复
13
shenmu2012| | 2015-10-7 17:19 | 只看该作者
这几种低功耗模式的讲解和那有意义的,赞一个。不过希望给出个具体点的例程的更好的。

使用特权

评论回复
14
firstblood| | 2015-10-7 18:21 | 只看该作者
justperky 发表于 2015-9-16 09:27
  进入STOP省电模式的操作
  为了降低系统功耗,进入STOP模式的操作流程:
  关闭设置为普通IO功能的 ...

进入stop省电模式的,,看下我这是不是的啊:
void mcu_pwr_enter_stop_mode_set(void)
{     
          GPIO_InitStructure.GPIO_Pin =  0xffff;
                GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;       
                GPIO_Init(GPIOB,&GPIO_InitStructure);
                GPIO_InitStructure.GPIO_Pin =  0xffff;
                GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;       
                GPIO_Init(GPIOA,&GPIO_InitStructure);

                ADC1->CR2 &= 0xfffffffe;                  //ADON==0;          
          RCC_APB1PeriphClockCmd( RCC_APB1Periph_ALL, DISABLE);  
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_ALL, DISABLE );   
    RCC_APB1PeriphClockCmd( RCC_APB1Periph_BKP | RCC_APB1Periph_PWR, ENABLE );
   
//                 RCC_HSEConfig(RCC_HSE_OFF);                       
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Disable);
                FLASH_SetLatency(FLASH_Latency_0);  
//     PWR_EnterSTANDBYMode();               
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}

看有没有啥问题的啊

使用特权

评论回复
15
firstblood| | 2015-10-7 18:23 | 只看该作者
补充下: 我采用的是闹钟唤醒的————
void rtc_alarmtime_set(uint16_t cSleepTime)
{
    RTC_ClearFlag(RTC_FLAG_SEC);
//           while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);   /* Wait till RTC Second event occurs */
    RTC_SetAlarm( RTC_GetCounter()+ cSleepTime ); /* Alarm after  ms, interrupt every   s */
    RTC_WaitForLastTask();/* Wait until last write operation on RTC registers has finished */
}
也实现了,是可以的,,就是功耗的还是有点高的,,我测量的是整体功耗的,还有20uA 的,,有些高。。。

使用特权

评论回复
16
comeon201208| | 2015-10-7 18:49 | 只看该作者
楼上这个参考源代码的我参考下

使用特权

评论回复
17
angerbird| | 2015-10-7 20:44 | 只看该作者
说了这么多的,,想问下一般采用哪种省电方式比较合适呢?

使用特权

评论回复
18
smilingangel| | 2015-10-7 21:27 | 只看该作者
我用到的也是stop省电模式的,,那么其他的standby的模式呢?有没有哪位实际的应用过的?

使用特权

评论回复
19
baimiaocun2015| | 2015-10-11 20:32 | 只看该作者
firstblood 发表于 2015-10-7 18:23
补充下: 我采用的是闹钟唤醒的————
void rtc_alarmtime_set(uint16_t cSleepTime)
{

这个方法很不错的,我参考下。

使用特权

评论回复
20
tongbu2015| | 2015-10-15 21:34 | 只看该作者
这个非常好,省电模式是很多设计中都需要用到的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

181

帖子

0

粉丝