你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8s低功耗

[复制链接]
leaf198310 提问时间:2011-2-21 22:43 /
本人想用stm8s103做一款低功耗产品,外部中断唤醒来解红外编码,有谁能提供我一个思路或给个进入stm8s低功耗设置的例子,我刚学stm8s,非常感谢
收藏 评论11 发布时间:2011-2-21 22:43

举报

11个回答
废鱼 回答时间: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端口功耗大的问题,不知道怎么解决!
llll2013 回答时间:2015-8-6 17:18:38
求教,我也遇到这个问题了
pandyele 回答时间:2015-10-28 23:24:03
学习了 顶起

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版