[STM8] STM8L怎么低功耗

[复制链接]
11853|14
 楼主| denvice 发表于 2013-1-31 12:04 | 显示全部楼层 |阅读模式
我的程序如下,程序运行以后电流有1.5mA,如果使用halt指令程序就在那停机不运行,因为刚使用stm8,对于低功耗不太了解。想问问大家具体怎么实现呢?最好是给个demo。谢谢
static void CLK_Config(void)
{
  
  /* Select HSE as system clock source */
  CLK_SYSCLKSourceSwitchCmd(ENABLE);//使能时钟切换
  CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);//选择外部低速时钟作为时钟源
  /* system clock prescaler: 1*/
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//设置系统时钟分频
  while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_LSI)//等待时钟稳定
  {}
}
void main(void)
{
  CLK_Config();
   CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
  /*
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE);
  TIM1_DeInit();
  
  
  
  TIM1_TimeBaseInit(100,TIM1_CounterMode_Up,1000,0);
  TIM1_ARRPreloadConfig(ENABLE);
  TIM1_ITConfig(TIM1_IT_Update,ENABLE);
  TIM1_Cmd(ENABLE);
  */
   
  TIM2_DeInit();
  
  
  
  TIM2_TimeBaseInit(TIM2_Prescaler_32,TIM2_CounterMode_Up,1024);
  TIM2_ARRPreloadConfig(ENABLE);
  TIM2_ITConfig(TIM2_IT_Update,ENABLE);
  TIM2_Cmd(ENABLE);
  GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);
  GPIO_ResetBits(GPIOC , GPIO_Pin_3);
  enableInterrupts();
  
  while (1)
  {
    if(measure_count%2)
    {
       GPIO_ResetBits(GPIOC , GPIO_Pin_3);
       wfi();
    }
    else
    {
       GPIO_SetBits(GPIOC , GPIO_Pin_3);
     wfi();
    }
   
  }
}
uet_cache 发表于 2013-1-31 12:28 | 显示全部楼层
如果定时器没用到,可以把它关了。1.5MA也不算多吧。楼主要求功耗有多少。。
 楼主| denvice 发表于 2013-1-31 13:28 | 显示全部楼层
这个MCU是STM8L152K起码要到ua级别吧,我不知道如何设置让他进入停机模式
IJK 发表于 2013-1-31 14:28 | 显示全部楼层
denvice 发表于 2013-1-31 13:28
这个MCU是STM8L152K起码要到ua级别吧,我不知道如何设置让他进入停机模式

STM8L运行在32k时,记得约15uA左右,具体可以看它的datasheet。

另外STM8L官方有不少例子,包括低功耗的例子。
uet_cache 发表于 2013-1-31 14:31 | 显示全部楼层
是不是你外围电路耗的电
21ID 发表于 2013-1-31 15:03 | 显示全部楼层
uet_cache 发表于 2013-1-31 12:28
如果定时器没用到,可以把它关了。1.5MA也不算多吧。楼主要求功耗有多少。。 ...

低功耗1.5MA已经很大很大了
 楼主| denvice 发表于 2013-1-31 15:12 | 显示全部楼层
我没外围我就知专门给了一个io口来输出高低电平,啥都没有就是一个芯片一个电容一个电阻,就这样的电路
qianguiyi 发表于 2013-1-31 15:15 | 显示全部楼层
要注意不用的引脚设置为输入上拉,
sy_lixiang 发表于 2013-1-31 17:16 | 显示全部楼层
1.不用的引脚固配置为固定输出低电平。
2.把没用到的资源全部关掉。
3.做到上边两步,一句hatl();就能进入。
4.进入低功耗模式后,待机电源大约3uA。

以上本人实测过。
sy_lixiang 发表于 2013-1-31 17:21 | 显示全部楼层
看你程序的意思是想通过外部中断唤醒是吗?
sy_lixiang 发表于 2013-1-31 17:29 | 显示全部楼层
  1. void CLK_Config(void)
  2. {
  3.   
  4.   /* Select HSE as system clock source */
  5.   CLK_SYSCLKSourceSwitchCmd(ENABLE);//使能时钟切换
  6.   CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);//选择外部低速时钟作为时钟源
  7.   /* system clock prescaler: 1*/
  8.   CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//设置系统时钟分频
  9.   while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_LSI)//等待时钟稳定
  10.   {}
  11. }

  12. void IO_Init()
  13. {
  14.         GPIO_DeInit(GPIOA);
  15.         GPIO_DeInit(GPIOB);
  16.         GPIO_DeInit(GPIOC);
  17.        
  18.         //以下依你的硬件使用情况来做
  19.         GPIO_Init(GPIOA,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Fast);
  20.         GPIO_Init(GPIOB,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Fast);
  21.         GPIO_Init(GPIOC,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Fast);
  22. }

  23. void somemeasuer()
  24. {
  25.         //看你的了,你要用中断吧?
  26. }

  27. void main(void)
  28. {
  29.         int measure_count=0;
  30.        
  31.         CLK_Config();
  32.         enableInterrupts();
  33.        
  34.         measure_count=somemeasuer();
  35.        
  36.         while (1)
  37.         {
  38.                 if(measure_count%2)
  39.                 {
  40.                         GPIO_ResetBits(GPIOC , GPIO_Pin_3);
  41.                         //wfi();
  42.                         halt();
  43.                 }
  44.                 else
  45.                 {
  46.                         GPIO_SetBits(GPIOC , GPIO_Pin_3);
  47.                         //wfi();
  48.                         halt();
  49.                 }
  50.         }
  51. }
 楼主| denvice 发表于 2013-1-31 23:07 | 显示全部楼层
sy_lixiang 发表于 2013-1-31 17:29

明天测试一下,非常感谢,不过我试过定时器唤不醒halt
 楼主| denvice 发表于 2013-1-31 23:08 | 显示全部楼层
sy_lixiang 发表于 2013-1-31 17:21
看你程序的意思是想通过外部中断唤醒是吗?

不是通过外部中断,我是想定时唤醒
IJK 发表于 2013-2-1 09:42 | 显示全部楼层
denvice 发表于 2013-1-31 23:08
不是通过外部中断,我是想定时唤醒

定时唤醒可以用RTC,功耗也挺低的
rocwill 发表于 2014-3-27 13:59 | 显示全部楼层
楼主你好,我最近也在使用STM8L的一款片子,做低功耗也遇到与你相似的问题,电流维持在1.5mA左右.不知后来是怎么解决的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

162

帖子

2

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