stm8s低功耗
本人想用stm8s103做一款低功耗产品,外部中断唤醒来解红外编码,有谁能提供我一个思路或给个进入stm8s低功耗设置的例子,我刚学stm8s,非常感谢RE:stm8s低功耗
给你一个建议:红外模块开启中断功能,连接MCU的外部中断,通过外部中断来唤醒去读取数据。休眠功能,我稍后上传一个例程给你。
回复: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; //初始化
}
}
}
另外,安老大,您上传的例程我没看到啊,还请帮忙看看,急啊
RE:stm8s低功耗
我现在郁闷的就是不加halt功能,程序运行很正常啊,为什么一加这个halt,功能就不正常呢,而且时钟切换还正常,因为我设置断点的时候,显示切换正常RE:stm8s低功耗
CLK_SWR = 0xD2; /* Select HSE */注释错误,应该是LSI
RE:stm8s低功耗
if (CLK_CMSR != 0xE1) //等待切换完毕while(1); //等待切换完毕
CLK_PCKENR1|=0X20; //只打开TIM2 clock
TIM2_CR1|=0X01; //起用TIM2计数
Ir_Flag=0;
上段有个错误,Ir_Flag=0;应该去掉,但是还是不正常,在线等各位指教
RE:stm8s低功耗
已解决,谢谢安老大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正常吗
RE:stm8s低功耗
怎么发不了图片?电路是NRST =>0.01UF电容到地
PD3=>接红外接收头,由于外部没上拉电阻,我只能将PD3设为内部输入上拉
PB5=>LED+电阻接到vdd
其他的什么都没接,用的HSI.当然vdd与vss之间是有电容的.
回复:stm8s低功耗
我也遇到IO端口功耗大的问题,不知道怎么解决!
页:
[1]
2