[STM8] stm8s halt模式功耗问题

[复制链接]
9744|6
 楼主| liang7143 发表于 2012-5-10 09:59 | 显示全部楼层 |阅读模式
执行_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模式 ~~~
 楼主| liang7143 发表于 2012-5-10 22:07 | 显示全部楼层
1# liang7143 是你自己没搞懂halt和active-halt的区别,进入都是用halt语句,但是如果awu开启就是active-halt,否则就是halt模式 ~~~
wuguoyan 发表于 2012-5-10 19:46

谢谢指点,立马细看手册
 楼主| liang7143 发表于 2012-5-11 09:25 | 显示全部楼层
如下图,AWU几个寄存器复位以后都是0啊,也就是我程序没有操作这几个寄存器AWU功能就不会打开啊
awu.jpg
 楼主| liang7143 发表于 2012-5-11 09:27 | 显示全部楼层
软件的初始化

  1. void MCUInit(void)
  2. {
  3.         //LED IO初始化
  4.         PC_DDR |= (LED_G);        //输出模式
  5.         //PC_CR1 |=        (LED1|LED2|LED3|LED4);        //推挽输出
  6.         PC_CR1 |= (LED_G);
  7.         LED_OUT&= (~LED_G);         //输出高

  8.         PC_DDR |= 0x10;  //PC4 out
  9.         PC_CR1 |= 0x10;  //shangla
  10.         PC_ODR |= 0x10;  //输出高
  11.        
  12.         //KEY_IO PB5改为下降沿中断
  13.         PB_DDR &= (~KEY_IO);                                                        //输入模式
  14.         PB_CR1 |= (KEY_IO);                                                        //上拉输入
  15.         PB_CR2 |= KEY_IO;                                                                        //关闭中断
  16.         EXTI_CR1 &= (~(0X03<<PORT_B));                //PORT B下降沿中断
  17.         //EXTI_CR1 |= (FallingEdgeOnly<<PORT_B);                                                                       
  18.        
  19.        
  20.        
  21.         //POWER_IN PC7shang下降沿中断       
  22.        
  23.        
  24.         //DC_POW
  25.         PA_DDR |= DC_POW;                                                                        //输出模式
  26.         PA_CR1 |=        DC_POW;                                                                        //推挽输出
  27.         PA_ODR &= (~DC_POW);                                                         //输出低       
  28.         //PA_ODR |= DC_POW;        
  29.        
  30.         //OUT_POW COM_POW
  31.         PD_DDR |= (OUT_POW|COM_POW);                        //输出模式
  32.         PD_CR1 |=        (OUT_POW|COM_POW);                        //推挽输出
  33.         PD_ODR = (~(OUT_POW|COM_POW));         //输出低               
  34.         //PD_ODR = ((OUT_POW|COM_POW));
  35.        
  36.         //LOW PWR DETECT PD4
  37.         PD_DDR &= 0xEF;                   //PD4 input
  38.         PD_CR1 |= 0x10;                   //PD4 PULL up
  39.         //ADC_LEVEL PD2 AIN3
  40.         //ADC_SHORT  PD3 AIN4
  41.         CLK_PCKENR2 |=0x08;                                                                //打开ADC时钟
  42.         PD_DDR &= 0xF3;
  43.                                                                                                                                                 //输入模式
  44.         PD_CR1 |= ((LEVEL_BIT|TEST_BIT));
  45.                                                                                                                                                 //lghshangla输入
  46.         ADC_TDRL |= ((1<<ADC_LEVEL)|(1<<ADC_SHORT));       
  47.                                                                                                                                                 //禁止施密特触发
  48.         //ADC_CSR |= 0x20;                                                                        //所能转换结束中断
  49.         ADC_CR1 |= 0x00;                                                                        //单次转换模式
  50.         ADC_CR3 |= 0x00;                                                                        //数据缓存取消
  51.        
  52.         //TIM2 设置 100ms定时器中断
  53.         CLK_PCKENR1 |= 0x20;                                                        //打开TIM时钟
  54.                                                                                                                                                 //默认系统主频 16Mhz 8分频 = 2Mhz
  55.         TIM2_PSCR = 4;                                                                                //16分频 2Mhz / 16 = 125Khz
  56.         TIM2_CR1  = 0x09;                                                                 //使能计时器  更新中断以后自动停止
  57.        
  58.         TIM2_CNTRH = 0xcf;                                                                //计数12500次
  59.         TIM2_CNTRL = 0x2c;                                                                //65536-12500=53036=0xcf2c
  60.         TIM2_IER   = 0x01;                                                                //使能中断 使能更新中断
  61.        
  62. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

33

主题

1868

帖子

0

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