leaf198310 发表于 2011-2-21 22:43:06

stm8s低功耗

本人想用stm8s103做一款低功耗产品,外部中断唤醒来解红外编码,有谁能提供我一个思路或给个进入stm8s低功耗设置的例子,我刚学stm8s,非常感谢

发表于 2011-2-22 09:37:50

RE:stm8s低功耗

给你一个建议:
红外模块开启中断功能,连接MCU的外部中断,通过外部中断来唤醒去读取数据。休眠功能,我稍后上传一个例程给你。

leaf198310 发表于 2011-2-26 01:54:22

回复:stm8s低功耗

回复第 2 楼 安 于2011-02-22 01:37:50发表:
给你一个建议:
红外模块开启中断功能,连接MCU的外部中断,通过外部中断来唤醒去读取数据。休眠功能,我稍后上传一个例程给你。 

托大家指点,程序已经完成,中断加定时做的,去掉程序注释部分,运行很正常,但是一进入Halt模式(加入注释部分程序),运行就不正常了,请求各位给指教下,非常感谢!型号stm8s103f2,起用Hsi,复位电路用的是内部,nrst脚就加了个电容. 


    while ( 1 )
    {
      if(!(Ir_Flag&0x08))
        {          
        if(Ir_Flag&0x10){Ir_fenxi();}
        if(Ir_Flag&0x01){Power_manage();}  }
      else{
              TIM2_CR1&=~(0x01);  // 停止TIM2计数  
              CLK_PCKENR1=0x00;   //关闭外设时钟
              CLK_PCKENR2=0X00; //关闭外设时钟 
               _asm("halt");   //停机模式
             CLK_PCKENR1|=0X20; //打开TIM2时钟 
             TIM2_CR1|=0X01;  //启动TIM2计时
              Ir_Flag=0;     //初始化 
              }
   
         }
    }  
另外,安老大,您上传的例程我没看到啊,还请帮忙看看,急啊 

leaf198310 发表于 2011-2-27 11:51:42

RE:stm8s低功耗

我现在郁闷的就是不加halt功能,程序运行很正常啊,为什么一加这个halt,功能就不正常呢,而且时钟切换还正常,因为我设置断点的时候,显示切换正常

 

leaf198310 发表于 2011-2-27 11:53:37

RE:stm8s低功耗

CLK_SWR = 0xD2; /* Select HSE */
注释错误,应该是LSI

leaf198310 发表于 2011-2-27 12:38:04

RE:stm8s低功耗

if (CLK_CMSR != 0xE1)      //等待切换完毕   
   while(1);         //等待切换完毕
   CLK_PCKENR1|=0X20;      //只打开TIM2 clock
   TIM2_CR1|=0X01;      //起用TIM2计数   
   Ir_Flag=0;
上段有个错误,Ir_Flag=0;应该去掉,但是还是不正常,在线等各位指教

leaf198310 发表于 2011-2-27 13:33:52

RE:stm8s低功耗

已解决,谢谢安老大

leaf198310 发表于 2011-2-27 16:16:12

RE:stm8s低功耗

又有个问题是电流问题,目前有用到2个i/o口,一个做输入,外部中断有上拉电阻;一个输出接一个led灯和一个电阻到vdd,我在进入halt模式时,输出高电平的,应该是正确的;有用一个timer2,我也是在halt时将其关掉了,其他不用的时钟也都关了;即使这样也仍然有1.2mA的电流,以下是我的设置:
void GPIO_Init(void)
{
    PB_DDR |= 0x20;            /* PB5 Output 其他输入.                  */
    PB_CR1 |= 0x20;            /* PB5推挽输其他悬空输入                  */
    PB_CR2= 0x00;            /* Output speed up to 2MHz. */

  PB_ODR=0X20;
    PD_DDR=0X00;
    PD_CR1=0X08;
    PD_CR2=0x08; /* PD3允许中断 其他禁止中断   */
    EXTI_CR1= 0x80;            /*仅下降沿触发*/
    EXTI_CR2= 0x00;
}
void CLK_Init(void)
{
    /* Configure HSI prescaler*/
    CLK_CKDIVR &= ~0x10;          /*fMASTER频率 01: fHSI= fHSI RC output/2. */
    CLK_CKDIVR |= 0x01;         /* 001: fCPU=fMASTER/2. */
    CLK_PCKENR1=0x20;
    CLK_PCKENR2=0X00;
}
void TIM_Init(void)
{
    TIM2_PSCR =0x03; // 8分频 TIM2时基为1us
    TIM2_ARRH =0x00; //
    TIM2_ARRL =0x96; //
    TIM2_IER =0x01;//使能TIM2中断
    TIM2_CR1 =0x81;// 使能TIM2计数
}
进入halt时的设置:
TIM2_CR1&=~(0x01);// 停止TIM2计数
CLK_PCKENR1&=~(0x20);
CLK_SWCR |= 0x02;            /* Enable switch */
CLK_SWR   = 0xD2;            /* Select LSI */
while (!(CLK_SWCR & 0x08));/* Wait for switch done */
if (CLK_CMSR != 0xD2)      //等待切换完毕
while(1); //等待切换完毕
_asm("nop");
_asm("halt");
CLK_SWCR |= 0x02;            /* Enable switch */
CLK_SWR   = 0xE1; //切换到HSI
while (!(CLK_SWCR & 0x08));/* Wait for switch done */
if (CLK_CMSR != 0xE1)      //等待切换完毕   
while(1); //等待切换完毕
CLK_PCKENR1|=0X20;//只打开TIM2 clock
TIM2_CR1|=0X01; //起用TIM2计数
难道是中断上拉口消耗电流,还是在切到LSI时要把HSI关掉?这个1.2mA正常吗

leaf198310 发表于 2011-2-27 19:29:12

RE:stm8s低功耗

怎么发不了图片?
电路是NRST =>0.01UF电容到地
PD3=>接红外接收头,由于外部没上拉电阻,我只能将PD3设为内部输入上拉
PB5=>LED+电阻接到vdd
其他的什么都没接,用的HSI.当然vdd与vss之间是有电容的.

wxc806605298 发表于 2013-12-3 14:44:11

回复:stm8s低功耗

我也遇到IO端口功耗大的问题,不知道怎么解决!
页: [1] 2
查看完整版本: stm8s低功耗