打印
[STM8]

stm8s halt模式功耗问题

[复制链接]
9093|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
执行_asm("halt");语句测得电流为 600ua左右

看如下帖子,感觉进入的是Active—Halt模式,而不是Halt模式?

STM8L 如何进入Active—Halt模式?
https://bbs.21ic.com/viewthread.php?tid=227310


请问该如何进入Halt模式?
沙发
liang7143|  楼主 | 2012-5-10 10:03 | 只看该作者
本帖最后由 liang7143 于 2012-5-10 10:04 编辑
其中的 halt()       #define halt()      {_asm("halt\n");}
jgphu 发表于 2010-8-12 18:10


帖子地址
stm8l  请问如何进入HALT MODE
https://bbs.21ic.com/viewthread.php?tid=189611

这个_asm("halt"); 和_asm("halt\n");我糊涂了,难道一个是进入Active—Halt模式,一个是Halt模式?
应该不是这样的吧
求高人赐教啊,本人新手,看手册没多久,有点犯晕

使用特权

评论回复
板凳
liang7143|  楼主 | 2012-5-10 16:03 | 只看该作者
没人回答啊!!
自己顶

使用特权

评论回复
地板
wuguoyan| | 2012-5-10 19:46 | 只看该作者
1# liang7143 是你自己没搞懂halt和active-halt的区别,进入都是用halt语句,但是如果awu开启就是active-halt,否则就是halt模式 ~~~

使用特权

评论回复
5
liang7143|  楼主 | 2012-5-10 22:07 | 只看该作者
1# liang7143 是你自己没搞懂halt和active-halt的区别,进入都是用halt语句,但是如果awu开启就是active-halt,否则就是halt模式 ~~~
wuguoyan 发表于 2012-5-10 19:46

谢谢指点,立马细看手册

使用特权

评论回复
6
liang7143|  楼主 | 2012-5-11 09:25 | 只看该作者
如下图,AWU几个寄存器复位以后都是0啊,也就是我程序没有操作这几个寄存器AWU功能就不会打开啊

awu.jpg (49.45 KB )

awu.jpg

使用特权

评论回复
7
liang7143|  楼主 | 2012-5-11 09:27 | 只看该作者
软件的初始化

void MCUInit(void)
{
        //LED IO初始化
        PC_DDR |= (LED_G);        //输出模式
        //PC_CR1 |=        (LED1|LED2|LED3|LED4);        //推挽输出
        PC_CR1 |= (LED_G);
        LED_OUT&= (~LED_G);         //输出高

        PC_DDR |= 0x10;  //PC4 out
        PC_CR1 |= 0x10;  //shangla
        PC_ODR |= 0x10;  //输出高
       
        //KEY_IO PB5改为下降沿中断
        PB_DDR &= (~KEY_IO);                                                        //输入模式
        PB_CR1 |= (KEY_IO);                                                        //上拉输入
        PB_CR2 |= KEY_IO;                                                                        //关闭中断
        EXTI_CR1 &= (~(0X03<<PORT_B));                //PORT B下降沿中断
        //EXTI_CR1 |= (FallingEdgeOnly<<PORT_B);                                                                       
       
       
       
        //POWER_IN PC7shang下降沿中断       
       
       
        //DC_POW
        PA_DDR |= DC_POW;                                                                        //输出模式
        PA_CR1 |=        DC_POW;                                                                        //推挽输出
        PA_ODR &= (~DC_POW);                                                         //输出低       
        //PA_ODR |= DC_POW;        
       
        //OUT_POW COM_POW
        PD_DDR |= (OUT_POW|COM_POW);                        //输出模式
        PD_CR1 |=        (OUT_POW|COM_POW);                        //推挽输出
        PD_ODR = (~(OUT_POW|COM_POW));         //输出低               
        //PD_ODR = ((OUT_POW|COM_POW));
       
        //LOW PWR DETECT PD4
        PD_DDR &= 0xEF;                   //PD4 input
        PD_CR1 |= 0x10;                   //PD4 PULL up
        //ADC_LEVEL PD2 AIN3
        //ADC_SHORT  PD3 AIN4
        CLK_PCKENR2 |=0x08;                                                                //打开ADC时钟
        PD_DDR &= 0xF3;
                                                                                                                                                //输入模式
        PD_CR1 |= ((LEVEL_BIT|TEST_BIT));
                                                                                                                                                //lghshangla输入
        ADC_TDRL |= ((1<<ADC_LEVEL)|(1<<ADC_SHORT));       
                                                                                                                                                //禁止施密特触发
        //ADC_CSR |= 0x20;                                                                        //所能转换结束中断
        ADC_CR1 |= 0x00;                                                                        //单次转换模式
        ADC_CR3 |= 0x00;                                                                        //数据缓存取消
       
        //TIM2 设置 100ms定时器中断
        CLK_PCKENR1 |= 0x20;                                                        //打开TIM时钟
                                                                                                                                                //默认系统主频 16Mhz 8分频 = 2Mhz
        TIM2_PSCR = 4;                                                                                //16分频 2Mhz / 16 = 125Khz
        TIM2_CR1  = 0x09;                                                                 //使能计时器  更新中断以后自动停止
       
        TIM2_CNTRH = 0xcf;                                                                //计数12500次
        TIM2_CNTRL = 0x2c;                                                                //65536-12500=53036=0xcf2c
        TIM2_IER   = 0x01;                                                                //使能中断 使能更新中断
       
}

使用特权

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

本版积分规则

个人签名:世间奇景,昙花一现,过眼云烟,余香留世。

33

主题

1868

帖子

0

粉丝