找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[已解决]关于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#
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 | 只看该作者
感谢分享,关闭了额外耗电
回复

使用道具 举报

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

使用道具 举报

6#
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测试的 应该是没有外围电路,单独芯片的功耗,有外围电路,那多余的功耗不能算在芯片头上
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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