找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3388|回复: 20
打印 上一主题 下一主题
收起左侧

[已解决]关于STC8H系列单片机掉电模式下IO口状态和功耗的问题

  [复制链接]
跳转到指定楼层
楼主
我使用STC8H8K64U单片机,电路是STC8H的最小系统,供电3.3V ,通过如下程序令单片机处于掉电模式:
  1. #include "stc8h.h"
  2. #include "intrins.h"


  3. void main()
  4. {
  5. //  WKTCL = 0xfe;                           
  6. //   WKTCH = 0x7f;
  7. //   WKTCH |= 0xff;

  8.     while (1)
  9.     {
  10.         _nop_();
  11.         _nop_();
  12.         PCON = 0x02;                            //MCU进入掉电模式
  13.         _nop_();
  14.         _nop_();
  15.         _nop_();
  16.         _nop_();
  17.         _nop_();
  18.         _nop_();
  19.         _nop_();

  20.     }
  21. }
复制代码

测得单片机电流为
数据手册标称:

这差距太大了,继续翻手册
于是我把代码改成:
  1. #include "stc8h.h"
  2. #include "intrins.h"


  3. void main()
  4. {

  5.         P0IE=0x00;
  6.         P1IE=0x00;
  7.         P2IE=0x00;
  8.         P3IE=0x00;
  9.         P4IE=0x00;
  10.         P5IE=0x00;
  11.         P6IE=0x00;
  12.         P7IE=0x00;

  13.   //  WKTCL = 0xfe;                           
  14. //   WKTCH = 0x7f;
  15. //   WKTCH |= 0xff;

  16.     while (1)
  17.     {
  18.         _nop_();
  19.         _nop_();
  20.         PCON = 0x02;                            //MCU进入掉电模式
  21.         _nop_();
  22.         _nop_();
  23.         _nop_();
  24.         _nop_();
  25.         _nop_();
  26.         _nop_();
  27.         _nop_();

  28.     }
  29. }
复制代码
结果仍然不对

直到我看到stc-isp上的范例程序中加了几条语句:
  1.     P0M0 = 0x00;
  2.     P0M1 = 0x00;
  3.     P1M0 = 0x00;
  4.     P1M1 = 0x00;
  5.     P2M0 = 0x00;
  6.     P2M1 = 0x00;
  7.     P3M0 = 0x00;
  8.     P3M1 = 0x00;
  9.     P4M0 = 0x00;
  10.     P4M1 = 0x00;
  11.     P5M0 = 0x00;
  12.     P5M1 = 0x00;
复制代码
十分不解的我将这些加入到代码中:
  1. #include "stc8h.h"
  2. #include "intrins.h"


  3. void main()
  4. {
  5.         
  6.     P0M0 = 0x00;
  7.     P0M1 = 0x00;
  8.     P1M0 = 0x00;
  9.     P1M1 = 0x00;
  10.     P2M0 = 0x00;
  11.     P2M1 = 0x00;
  12.     P3M0 = 0x00;
  13.     P3M1 = 0x00;
  14.     P4M0 = 0x00;
  15.     P4M1 = 0x00;
  16.     P5M0 = 0x00;
  17.     P5M1 = 0x00;
  18.         

  19.   //  WKTCL = 0xfe;                           
  20. //   WKTCH = 0x7f;
  21. //   WKTCH |= 0xff;

  22.     while (1)
  23.     {
  24.         _nop_();
  25.         _nop_();
  26.         PCON = 0x02;                            //MCU进入掉电模式
  27.         _nop_();
  28.         _nop_();
  29.         _nop_();
  30.         _nop_();
  31.         _nop_();
  32.         _nop_();
  33.         _nop_();

  34.     }
  35. }
复制代码

这样就正常了!

有没有大佬解释一下原因?谢谢!









分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

来自 6#
ID:192020 发表于 2024-2-18 13:55 | 只看该作者
睡眠时所有引脚都应该有确定电平,如果是高阻输入的话,那外围应该加上下拉

评分

参与人数 1黑币 +5 收起 理由
gqzjl + 5 赞一个!

查看全部评分

回复

使用道具 举报

沙发
ID:474386 发表于 2024-2-18 11:31 | 只看该作者
你万用表测量的挡位前后都不一致的。你确定不是万用表量程问题导致?
回复

使用道具 举报

板凳
ID:1064915 发表于 2024-2-18 11:40 | 只看该作者
感谢分享,关闭了额外耗电
回复

使用道具 举报

地板
ID:807591 发表于 2024-2-18 11:54 | 只看该作者
所有IO改成高阻 再看看 2.1ua 和0.4ua差好多
回复

使用道具 举报

5#
ID:639106 发表于 2024-2-18 13:46 | 只看该作者
zycman 发表于 2024-2-18 11:31
你万用表测量的挡位前后都不一致的。你确定不是万用表量程问题导致?

最开始电流太大,超出万用表200uA档的量程了,只能用200mA档
回复

使用道具 举报

7#
ID:639106 发表于 2024-2-18 13:56 | 只看该作者
szb314 发表于 2024-2-18 11:54
所有IO改成高阻 再看看 2.1ua 和0.4ua差好多

STC8H8K64U上电默认除了3.2、3.3两IO口之外,所有IO都是高阻刚试了下全改高阻,电流反而更大了
回复

使用道具 举报

8#
ID:639106 发表于 2024-2-18 14:37 | 只看该作者
qq475878026 发表于 2024-2-18 13:55
睡眠时所有引脚都应该有确定电平,如果是高阻输入的话,那外围应该加上下拉

谢谢!这个在数据手册的那里找到的?
回复

使用道具 举报

9#
ID:1110945 发表于 2024-2-18 20:46 | 只看该作者
掉电定时器没有打开,电流应该是0.4微安,我测过,
掉电定时器打开了以后电流是1.8微安,测试电压3.0V。
回复

使用道具 举报

10#
ID:192020 发表于 2024-2-19 09:07 | 只看该作者
gqzjl 发表于 2024-2-18 14:37
谢谢!这个在数据手册的那里找到的?

在附录T,应用注意事项里。不止STC,我用过的国产芯片睡眠时都是要这样配置的,不懂STM的是不是这样
回复

使用道具 举报

11#
ID:807591 发表于 2024-2-19 10:48 | 只看该作者
gqzjl 发表于 2024-2-18 13:56
STC8H8K64U上电默认除了3.2、3.3两IO口之外,所有IO都是高阻刚试了下全改高阻,电流反而更大了

STC测试的 应该是没有外围电路,单独芯片的功耗,有外围电路,那多余的功耗不能算在芯片头上
回复

使用道具 举报

12#
ID:1116534 发表于 2024-8-29 08:25 | 只看该作者
gqzjl 发表于 2024-2-18 13:56
STC8H8K64U上电默认除了3.2、3.3两IO口之外,所有IO都是高阻刚试了下全改高阻,电流反而更大了

我也是,请问你解决没有
回复

使用道具 举报

13#
ID:161164 发表于 2024-8-29 10:11 | 只看该作者
qizhixu 发表于 2024-8-29 08:25
我也是,请问你解决没有

全部引脚设为准双向
没用的引脚设高电平
有用的引脚保持和外界电平一致
回复

使用道具 举报

14#
ID:430492 发表于 2024-8-29 13:22 | 只看该作者
掉电模式,超级省电,特别是电池供电。
回复

使用道具 举报

15#
ID:879348 发表于 2024-8-29 13:35 | 只看该作者
2uA已经足够了
回复

使用道具 举报

16#
ID:1116534 发表于 2024-8-29 15:02 | 只看该作者
lkc8210 发表于 2024-8-29 10:11
全部引脚设为准双向
没用的引脚设高电平
有用的引脚保持和外界电平一致

我设置了准双向口,电流1.6微安,但是链接24L01后,电流就变大了,用NMOS管控制电源0V,没有用
回复

使用道具 举报

17#
ID:1034262 发表于 2024-8-30 09:56 | 只看该作者
STC Mcu睡眠时IO不耗电的处理方法:

1、对于设置为准双向口、推挽输出、开漏输出低电平的IO,IO本身不耗电,输出电平与外部电路配合成外部电路不耗电的方式即可。

2、设置为高阻或开漏输出高电平的IO,如果悬空,则会因为输入状态不确定导致有电流,以下两种方式任选一种:
    A、IO口接一个确定的高电平(电压高于VDD-0.3)或低电平(电压低于0.3V),否则耗电。
    B、将IO口对应的数字输入功能关闭(对于STC8系列、STC32系列)。
       比如关闭P1.0、P1.1的数字输入:
         P_SW2 |= 0x80;   //允许操作扩展寄存器
         P1IE   = ~0x03;  //将P1.0 P1.1的数字输入功能关闭

3、睡眠前,禁止ADC(如果已经允许的话),禁止模拟比较器(如果已经允许的话)。

4、在主程序进入睡眠,睡眠后至少要加3个空操作(NOP)。
   PCON |= 0x02;
   _nop_();
   _nop_();
   _nop_();

回复

使用道具 举报

18#
ID:161164 发表于 2024-8-30 10:03 | 只看该作者
qizhixu 发表于 2024-8-29 15:02
我设置了准双向口,电流1.6微安,但是链接24L01后,电流就变大了,用NMOS管控制电源0V,没有用

24L01是3.3V的吧?
需要加开关管来断开24L01的电源
回复

使用道具 举报

19#
ID:1116534 发表于 2024-8-30 13:57 | 只看该作者
lkc8210 发表于 2024-8-30 10:03
24L01是3.3V的吧?
需要加开关管来断开24L01的电源

电源是3.3V,加了MOS管,Nmos放负极,Pmos正极,还是不行,并且发送数据还出错了
回复

使用道具 举报

20#
ID:1116534 发表于 2024-10-29 13:53 | 只看该作者
qizhixu 发表于 2024-8-30 13:57
电源是3.3V,加了MOS管,Nmos放负极,Pmos正极,还是不行,并且发送数据还出错了

我和你遇到同样问题,你解决了吗?
回复

使用道具 举报

21#
ID:961114 发表于 2024-10-29 16:47 | 只看该作者
I/O口, 输入/输出, 用啥工作模式 ?
===STC32/STC8
答:如不考虑功耗
1,输出请设置成强推挽输出,20mA以上的驱动能力 !
      你来个干扰看能拿他咋样 ,他就不理你 !!!
2,输入请设置成高阻输入,默认施密特触发器输入 !
     高阻输入的阻抗是无穷大,至少 100兆欧以上,相当于接到空气,但有寄生电容的影响
     打开内部4K上拉/或外部加10K上拉/或对方是强推挽输出
     ====如对方是强推挽输出,就没必要打开内部的4K上拉,也没必要外部加上拉
     ====输入口也可再并个小电容到地,一般没必要,软件反复多读几次也能解决
3,不用的I/O,最专业的做法:设置为【高阻输入 + 关闭数字输入】
      这样浮空的I/O, 高阻输入模式,在省电模式时也不会耗电;
      另外不小心短接到 MCU-VCC/GND 也不会烧掉,高阻输入 | 电流流不进来也流不出去
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表