找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于STC8H单片机掉电模式电流问题

  [复制链接]
跳转到指定楼层
楼主


数据手册上说,单片机掉电模式电流0.4ua,但是我测试掉电模式电流有1.5ma
网上有人说有漏电流,或者其他功能打开了。
电路用的是LQFP32转DIP32的转接板,代码也很简单。就只是测掉电模式电流。
有高手指点下吗?谢谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2021-10-11 10:06 | 只看该作者
掉电模式电流是指关闭芯片所有输出和内置外设的电流。
回复

使用道具 举报

板凳
ID:161164 发表于 2021-10-11 10:21 | 只看该作者
本帖最后由 lkc8210 于 2021-10-11 10:23 编辑

我试过把STC15的IO 设为高阻然后进入掉电
也发现还有几毫安
然后把IO设为准双向再进入掉电
就能实现几微安
你可以从这方向试一下


回复

使用道具 举报

地板
ID:624769 发表于 2021-10-11 12:22 | 只看该作者
首先, 掉电模式的 0.4uA,只是指这么模式,消耗的电流是0.4uA(还是3.3V的前提),而不是说在这个模式下,整个单片机的电流只有0.4uA,换个说法,你要达到1uA以下这个电流,需要满足很多条件:

首先,供电电压3.3V, 其次所有的IO都切换到高阻模式(包括P3.0,3.1),然后关闭所有中断,关闭所有定时器,关闭所有比较器,以及其他各种检测用模块,等等。而比如低压检测模块会消耗10uA电流,找遍整本手册你都找不到任何可以关闭他的地方,即使不开低压中断,LVDF标志始终会动作。所以,看过就看过了,别觉得可以达到就好了。

回复

使用道具 举报

5#
ID:554500 发表于 2021-10-11 12:49 | 只看该作者


IO口默认高阻,其他功能我也没打开啊。
回复

使用道具 举报

6#
ID:624769 发表于 2021-10-11 13:41 | 只看该作者
18701931930 发表于 2021-10-11 12:49
IO口默认高阻,其他功能我也没打开啊。

大多数IO默认高阻,但是,不包括P3.0 P3.1, 所以要手动高阻。其他功能很多是默认开,需要你手动关闭,在所有IO悬空,设为高阻,关闭各种可以关闭的模块后,电流<50uA 是没什么问题的,但是要达到他说的0.4uA是不可能的,只有他们实验室才能出来这个结果。

LVD就很可笑了,能够关闭的只是ELVD中断, 但是 LVD低压检测根本没有办法关,ISP烧录器可以选择LVD检测阀值就是没有关闭LVD检测的选项。所以关闭LVD只是在STC内部实验室才存在。
STC的手册,前后矛盾的地方有很多,你也不用尽信。
回复

使用道具 举报

7#
ID:554500 发表于 2021-10-11 21:39 | 只看该作者
void LOW_Mode()
{
        P0M1=0xFF;  //高阻态
        P0M0=0x00;
        P1M1=0xFF;
        P1M0=0x00;
        P2M1=0xFF;
        P2M0=0x00;
        P3M1=0xFF;
        P3M0=0x00;
        P5M1=0xFF;
        P5M0=0x00;
       
        P0NCS=0xFF; //禁止施密特触发器
        P1NCS=0xFF;
        P2NCS=0xFF;
        P3NCS=0xFF;
        P5NCS=0xFF;
       
        P0IE=0x00; //禁止数字输入
        P1IE=0x00;
        P3IE=0x00;
       
       
        _nop_();
        _nop_();
        PCON=0x02; //进入掉电模式
        _nop_();
        _nop_();
        _nop_();
        _nop_();
}




正常测电流为690ua,用手触摸芯片电流变成438ua.
不知道还有什么模块没关的。

回复

使用道具 举报

8#
ID:377210 发表于 2021-10-11 21:43 | 只看该作者
8H的没有测过,8G系列的测过,掉电模式下电流用万用表测确实只有0.4uA。你要关闭所有外设,内部定时器、AD电源、IO设置为高阻等,最简单的就只焊接芯片,这样一下就可以测出来是哪里问题了
回复

使用道具 举报

9#
ID:624769 发表于 2021-10-11 23:16 | 只看该作者
18701931930 发表于 2021-10-11 21:39
void LOW_Mode()
{
        P0M1=0xFF;  //高阻态

嗯,至少比你一开始1.5mA小了很多了,

需要关的还有很多,太久了,也记不清了。
好像比较器有个滤波要关,比较器正负极都要切换到内部, 然后有几个和时钟相关的分频器要关,ADC通道要切换到空,
你可以打开寄存器列表,对照着关看看。
回复

使用道具 举报

10#
ID:401564 发表于 2021-10-12 00:13 | 只看该作者
进入掉电模式之后,所有的端口会保持进入掉电模式前一刻的状态,这一点很重要,也就是说,进入掉电模式之前,端口的电平不会改变,而且片上所有的端口寄存器也都不会改变
解决这个问题实际上是很简单的
单片机只留下电源的滤波电容,其实所有的外围元件都不要,然后进入掉电模式,电流如果是在正常待机电流范围内,说明你的掉电模式代码是没有问题的,剩下就是外围元件的问题了
外围电路不同,进入掉电模式之前的端口处理也会不同,有的要高电平,有的要低电平
至于ADC和比较器什么,并不是电流达到1.5mA的原因
回复

使用道具 举报

11#
ID:554500 发表于 2021-10-12 20:38 | 只看该作者
lkc8210 发表于 2021-10-11 10:21
我试过把STC15的IO 设为高阻然后进入掉电
也发现还有几毫安
然后把IO设为准双向再进入掉电

谢谢!
按照你的方法,把所有IO设为准双向,然后设置掉电唤醒定时器并进入掉电模式。
电流变成2.5ua  。那这样的话,每次唤醒后要重新配置IO模式了。

void main()
{
        P_SW2 = 0x80;
       
        Delay2000ms();
       
        P0M0 = 0x00;
        P0M1 = 0x00;
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        P3M0 = 0x00;
        P3M1 = 0x00;
        P4M0 = 0x00;
        P4M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;

       
        WKTCL=0x10;  //掉电唤醒定时器 5S
        WKTCH=0xA7;
       

        while(1)
        {
                        _nop_();
                        _nop_();
                        PCON=0x02; //进入掉电模式
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();

                        P0=~P0;
        }
}


评分

参与人数 1黑币 +5 收起 理由
ax6808 + 5

查看全部评分

回复

使用道具 举报

12#
ID:554500 发表于 2021-10-12 20:40 | 只看该作者
188610329 发表于 2021-10-11 23:16
嗯,至少比你一开始1.5mA小了很多了,

需要关的还有很多,太久了,也记不清了。

谢谢指导!
减小了将近一半,但不是很满意 啊。
回复

使用道具 举报

13#
ID:155507 发表于 2021-10-12 20:44 | 只看该作者
定时唤醒定时器功耗大约是1.8uA
回复

使用道具 举报

14#
ID:959346 发表于 2021-10-12 22:18 | 只看该作者
18701931930 发表于 2021-10-11 21:39
void LOW_Mode()
{
        P0M1=0xFF;  //高阻态

悬空的IO,要设置为输出模式,使IO口的电平固定。如果设置为输入模式,IO口悬空时电平会有很微小的变化,会导致uA级微小的电流,电流大小跟具体使用芯片的输入电路有关。
回复

使用道具 举报

15#
ID:624769 发表于 2021-10-12 22:32 | 只看该作者
18701931930 发表于 2021-10-12 20:38
谢谢!
按照你的方法,把所有IO设为准双向,然后设置掉电唤醒定时器并进入掉电模式。
电流变成2.5ua   ...

配置 P0~P5 的IO模式,总共花不了 2us 的时间,既然目的是省电,仅仅切换IO模式就能达到目的,已经算工作量很小的了,知足吧。

给你一个快速更改IO模式的头文件,你好轻松点。
http://www.51hei.com/bbs/dpj-211950-1.html
回复

使用道具 举报

16#
ID:975054 发表于 2022-3-26 18:37 | 只看该作者
本帖最后由 ax6808 于 2022-3-27 22:39 编辑

最后实践证明:
省电主要靠低压MCU+掉电唤醒模式;掉电前关闭所有不必要的功能如ADC等等等等,所有I/O设置为准双向并写1,唤醒后恢复原I/O口设置及有关功能,这样最省电!!!!!!

刚测试了一下STC8H1K08核心板无外围电路,掉电唤醒前后电流变化:
记录:1.裸板只有P12 led;PD前 VDD=5V,3.2mA, VDD=3.7V,2.6mA;
       2. PD前全设双向置1(只P12=0排除LED影响),PD后设回:VDD=5V,0.37mA降为0.3mA;VDD=3.7V时效果明显!!!,30μA降为2μA(2mA档);
          5V不知道为什么多那么多,暂未经过进一步的测试考究。

另外,手册描述注意:
当有I/O口被选择为ADC输入通道时,必须设置PxM0/PxM1寄存器将I/O口模式设置为输入模式。(这个好理解,必须的);
另外如果MCU进入掉电模式/时钟停振模式后,仍需要使能ADC通道,则需要设置PxIE寄存器关闭数字输入,才能保证不会有额外的耗电;(如何关闭数字输入????我只是PD前关闭了ADC功能也一样省电吧?)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

17#
ID:975054 发表于 2022-3-26 18:40 | 只看该作者
Jiang_YY 发表于 2021-10-12 22:18
悬空的IO,要设置为输出模式,使IO口的电平固定。如果设置为输入模式,IO口悬空时电平会有很微小的变化, ...

不是的!

5. 特别注意:由于 STC8H 系列的所有 I/O(除了 ISP 下载口 P3.0/P3.1 外)在上电后都是高
阻输入模式, I/O 外部电平不固定,此时如果 MCU 直接进入掉电模式/停机模式,会导致
I/O 有额外的耗电,所有在 MCU 进入掉电模式/停机模式前,必须将所有 I/O 口都根据实
际情况设置好 I/O 口的模式,对于所有没有使用的外部悬空的 I/O 都需要设置为准双向口,
并固定输出高电平。特别是部分管脚的芯片,由于芯片内部有部分 I/O 口并没有打线到外
部管脚,所以这些 I/O 也是处于悬空状态的,这部分 I/O 也需要设置为准双向口,并固定
输出高电平。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

18#
ID:975054 发表于 2022-3-26 18:47 | 只看该作者
最后实际3.3V时2μA左右就对了:掉电模式本身0.4μA,掉电唤醒定时器1.5μA,总共约2μA就对了!!!
VDD为5V时大很多!
我前面用的USB转串口的3.7V电压脚(本来有3.3V脚的,我把它跟VCC脚焊在一起了没分开,而VCC脚只是5V串了2个二极管后约3.7V出来的)。
回复

使用道具 举报

19#
ID:975054 发表于 2022-3-27 22:53 | 只看该作者
今天又测试了一下我的实际模块STC8+硬件I2C电路板。VCC3.7V锂电池供电,VDD LDO3.3V,TSSOP20封装,3个脚为ADC高阻输入,6个脚接I2C或控制脚及2个脚串口准双向,其余空脚设准双向写1,4秒掉电唤醒一次...最终掉电后的电流也只做到29μA就再也下不来了(掉电前已关闭ADC、串口中断,I/O口设为全高阻等等电流都不会更小了).理论上还可以降低掉电后的电流的???LDO有几μA,I2C传感器2脚本身极省电模式最多几μ安有10K上拉电阻查询模式。。。。
也不知道掉电期间还有什么内部功能可以关闭进一步省电。
回复

使用道具 举报

20#
ID:975054 发表于 2022-3-27 23:04 | 只看该作者
关于STC8等单片机I/O口的准双向模式有关问题讨论
1、准双向一般只能用于数字输入输出,输入时为弱上拉状态,端口只有两种状态:高或低:很好理解!


2、准双向口读外部状态前,要先锁存为1,才能读到外部正确的状态:不太理解!
(1) 什么叫锁存为1?? 就是通俗的写1吧?
我的开关直接接端口和地,之所以端口设为准双向并写1(跟悬空脚的正确处理方法完全相同!!),判断开关状态(查询非中断)只用到“if某端口=0/1”就好,没搞其他代码,也没有"等待两个时钟_nop_()",。是因为这样既简单可靠又省电,而且还省掉了外接上/下拉电阻。   若设置为“高阻输入”去判断按键状态,还得额外增加合适阻值的上拉、下拉或分压电阻,STC内部已有好几种上拉电阻可用,不是自找麻烦么。
(2) 什么叫“读取外部正确的状态”??
只用于没外接上/下拉电阻的按键或开关状态之列的识别么?

如I2C外设的2脚连接及其读写,我感觉只设双向就好,无需也不用写1,实际我也没写1,也没有"等待两个时钟_nop_()",读写都没有发现问题,是因为I2C等外设的数据线上已经有上拉电阻了么?

那么;下面例程中的“双向口读写操作”中的读部分,不知道究竟该怎么准确应用?P00 = 1读取端口前先使能内部弱上拉电阻还等待两个时钟?
P00 = 1; //读取端口前先使能内部弱上拉电阻
_nop_(); //等待两个时钟
_nop_(); //
CY = P00; //读取端口状态
...

(3)解释的比较完整的(也只说了基本原理还是没说到具体使用方面的点子上):

准双向口向端口写1:就是向锁存器写1,也就是让其口输出FF。

为什么,是这样的,给锁存器写1,那么锁存器的反向端就输出0,那么和它相接的MOS管也就在截止状态,也就是呈高阻态,这样口上数据就会从读引脚的三态缓冲器上正确的输入,如果不写1,那么锁存器上次锁存的可能为0,那么反向端有可能出现1,这样和反向端相接的MOS管就倒通,也就是直接拉到地,那么不管你口上输入什么信号都会拉成低电平,输入就错了。

双向口与准双向口的区别主要是:

准双向口I/O口操作时做数据输入时需要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来导致出错。而双向口则不需要做此动作,因为双向口有悬浮态。
准双向口只能有效的读取0,而对1则是采用读取非零的方式,就是读入的时候要先向接口上写1,然后再读。真正的双向口正如其名,就是真正的双向io不需要任何预操作可直接读入读出。
回复

使用道具 举报

21#
ID:975054 发表于 2022-3-30 01:48 | 只看该作者
本帖最后由 ax6808 于 2022-3-30 21:55 编辑
ax6808 发表于 2022-3-26 18:37
最后实践证明:
省电主要靠低压MCU+掉电唤醒模式;掉电前关闭所有不必要的功能如ADC等等等等,所有I/O设置 ...

查到怎么"关闭数字输入"了,有空实测一下究竟还有没油水??  

STC8H的最新手册(20211221版)说的较详细(之前版本还漏了P4IE到P7IE等):
6.5.1电源控制寄存器( PCON)
PD:时钟停振模式/掉电模式/停电模式控制位
0:无影响
1:单片机进入时钟停振模式/掉电模式/停电模式, CPU 以及全部外设均停止工作。唤醒后硬件自动
清零。( 注:时钟停振模式下, CPU 和全部的外设均停止工作,但 SRAM 和 XRAM 中的数据是一直维持不变的)
9.1.2端口模式配置寄存器( PxM0, PxM1)
注意:当有I/O口被选择为ADC输入通道时,必须设置PxM0/PxM1寄存器将I/O口模式设置为输入模式。
另外如果MCU进入掉电模式/时钟停振模式后,仍需要使能ADC通道,则需要设置PxIE寄存器关闭数字输入,才能保证不会有额外的耗电。
( 进入掉电模式CPU以及全部外设均停止工作了,“仍需要使能ADC通道...“是什么意思???我还干脆ADC完就直接将ADC_POWER都关掉了!)

9.1.7 端口数字信号输入使能控制寄存器( PxIE)
数字信号输入使能控制
0:禁止数字信号输入。若 I/O 被当作比较器输入口、 ADC 输入口、 触摸按键输入口或者为外部晶振接入脚等模拟口时,进入时钟停振模式前,必须设置为 0,否则会有额外的耗电。
1:使能数字信号输入。若 I/O 被当作数字口时,必须设置为 1,否 MCU 无法读取外部端口的电平。
特别注意(新版手册才有加注): 对于具有 RTC 功能的 MCU,当 RTC 的时钟源选择外部 32.768K 的晶振时,需要将晶振接入脚 P1.6 和 P1.7 的数字通道关闭,否则进入 STOP 模式后会有额外的漏电。(将寄存器 P1IE的 bit6 和 bit7 都设置为 0 即可关闭 P1.6 和 P1.7 的数字通道)。
17.1.1 ADC控制寄存器( ADC_CONTR)
ADC_POWER: ADC 电源控制位
0:关闭 ADC 电源
1:打开 ADC 电源。
建议进入空闲模式和掉电模式前将 ADC 电源关闭,以降低功耗 。

ADC_CHS[3:0]: ADC 模拟通道选择位
(注意:被选择为 ADC 输入通道的 I/O 口,必须设置 PxM0/PxM1 寄存器将 I/O 口模式设置为高阻输入模式。另外如果 MCU 进入掉电模式/时钟停振模式后,仍需要使能 ADC 通道,则需要设置PxIE 寄存器关闭数字输入通道,以防止外部模拟输入信号忽高忽低而产生额外的功耗)。


回复

使用道具 举报

22#
ID:975054 发表于 2022-3-31 00:40 | 只看该作者
ax6808 发表于 2022-3-27 22:53
今天又测试了一下我的实际模块STC8+硬件I2C电路板。VCC3.7V锂电池供电,VDD LDO3.3V,TSSOP20封装,3个脚为A ...

刚才最后测试验证了:我的STC8G模块,掉电前设置PxIE寄存器,每关闭一路ADC数字输入通道,掉电后流还可进一步减少15~17μA!  对于超低功耗产品设计,意义很大。
原来实测掉电后总约29.8μA,现在已降到16.2μA!(还不知道有没有其他油水,呵呵! 学无止境!)
回复

使用道具 举报

23#
ID:401564 发表于 2022-3-31 16:14 | 只看该作者
ax6808 发表于 2022-3-31 00:40
刚才最后测试验证了:我的STC8G模块,掉电前设置PxIE寄存器,每关闭一路ADC数字输入通道,掉电后流还可进 ...

还在整这个???
STC8G压根就不需要设置PxIE,我从来不管这个寄存器
我一直在用这个单片机,最小系统掉电模式下.4.2V供电的待机电流就是3.5uA,可能是万用表测量有误差,但大概就是这个值左右
跟设置不设置PxIE没有关系,从来都是默认值
如果你的电路超过这个值了,那就是外围其它电路在耗电,我几个月就回复过这个帖子了
我从来不设置PxIE,掉电模式电流一直是在5uA以下的
ADC引脚也不需要重新设置,只要关闭ADC电源就行了
所有STC8G的端口设置只在程序初始化的时候设置一次而已,待机电流一样的能在5uA以下
回复

使用道具 举报

24#
ID:975054 发表于 2022-4-1 01:07 | 只看该作者
Y_G_G 发表于 2022-3-31 16:14
还在整这个???
STC8G压根就不需要设置PxIE,我从来不管这个寄存器
我一直在用这个单片机,最小系统掉电模 ...

感谢回复!!!
未见你有过回复,或许删除了;
反正我就2个ADC、1个I2C、2个开关、4个控制脚、其他空脚:
目前做到:总16.2μA-LDO7μA-ADC分压电阻6μA-I2C传感器待机0.2μA≈3μA(STC8掉电时电流,万用表校准过)。
目前我的比较精确的实测数据事实就如此,都反复归零验证过的;

之前ADC转换完就已经关了ADC电源的(不然电流就更大了),反正目前掉电前若不不关闭数字输入,就一定会每一路多16μA。

后来没啥事,反正俺近期有的是时间,能省的电必须省!反正目前的STC5最低约3μA(±0.5μA精度)我是做到了。待机时间延长3倍!!非常可观!原来总约48μA,现在16.2μA(少2路ADC影响约2*16μA).其实还可省零点几μA但没什么实际意义了.呵呵!不如结案也罢!

回复

使用道具 举报

25#
ID:975054 发表于 2022-4-1 01:18 | 只看该作者
Y_G_G 发表于 2022-3-31 16:14
还在整这个???
STC8G压根就不需要设置PxIE,我从来不管这个寄存器
我一直在用这个单片机,最小系统掉电模 ...

最后回复一下:
你从来不设置PxIE,掉电模式电流一直是在5uA以下的?: 我之前有1路ADC平时低电平时就测不出来影响,但碰到高电平时就会多出16μA,后来仔细对比检查2路才发现这个问题(另1路一上电就是高电平)。
ADC引脚也不需要重新设置,只要关闭ADC电源就行了:看到手册有写我才会去验证,果然如此!
所有STC8G的端口设置只在程序初始化的时候设置一次而已:真不是这样子的,STC手册不断更新中...呵呵,你懂的。
回复

使用道具 举报

26#
ID:401564 发表于 2022-4-1 11:32 | 只看该作者
是的,在我代码中,不设置PxIE,但掉电电流一直都是可以在5uA以下的,如果你的做不到,要么是代码有问题,要么是外围电路的问题
你ADC分压电阻还耗电????你不会是直接就串联两个电阻来采样吧?在电池供电中怎么可能用这种采样方法呢?
端口只要初始化一次是我自己的操作,跟STC数据手册更不更新是没有没有关系的,设定好之后就不想动了,也没有必要动了
看好外围电路,掉电操作之前把电平固定,就不会有耗电的了
比如,IIC,掉电之前,SCL和SDA全部高电平,这不就得了?
回复

使用道具 举报

27#
ID:975054 发表于 2022-4-1 22:52 | 只看该作者
外围电路的问题:已严格审查;

ADC分压电阻还耗电????你不会是直接就串联两个电阻来采样吧?在电池供电中怎么可能用这种采样方法呢?
答:锂电池电压ADC检测,满电是4.2V,超过MCU的VDD3.3V,必须串联电阻降压到VDD以下检测,我用2个330KΩ以上电阻串联,静态电流<6.4μA,电阻大些还可降低。

端口只要初始化一次是我自己的操作,跟STC数据手册更不更新是没有没有关系的,设定好之后就不想动了,也没有必要动了;看好外围电路,掉电操作之前把电平固定,就不会有耗电的了;
答:掉电操作之前把电平固定,就不会有耗电的了,这个确实对的!ADC、外接晶振等高阻模拟脚除外!

比如,IIC,掉电之前,SCL和SDA全部高电平,这不就得了?
答:对的!!!
回复

使用道具 举报

28#
ID:401564 发表于 2022-4-1 23:14 | 只看该作者
ax6808 发表于 2022-4-1 22:52
外围电路的问题:已严格审查;

ADC分压电阻还耗电????你不会是直接就串联两个电阻来采样吧?在电池供电中 ...

参考这个电路,要进行电池电压的ADC时,把ADC_GND电平拉低
进行ADC完了之后,把ADC_GND电平拉高
ADC这一块就是基本不耗电了,而且,这个电路不会影响ADC的精度


评分

参与人数 1黑币 +12 收起 理由
ax6808 + 12 精益求精!

查看全部评分

回复

使用道具 举报

29#
ID:975054 发表于 2022-4-5 02:23 | 只看该作者
Y_G_G 发表于 2022-4-1 23:14
参考这个电路,要进行电池电压的ADC时,把ADC_GND电平拉低
进行ADC完了之后,把ADC_GND电平拉高
ADC这一块 ...

感谢哥们回复!!!
确实ADC外围电路耗电还可优化,只需多一个引脚资源,一路ADC就又可总体省下好多μA!!
对于极低功耗设计至关重要。
前期主要研究验证MCU本身耗电问题去了!
再次感谢!再次感谢!
回复

使用道具 举报

30#
ID:186901 发表于 2022-8-6 10:29 | 只看该作者
刚才测了一下,io默认高阻进掉电,15uA左右。然后io口全部设置准双向,进入掉电模式,只有0.625uA
回复

使用道具 举报

31#
ID:1034262 发表于 2022-8-6 17:04 | 只看该作者
睡眠时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(如果已经允许的话),禁止模拟比较器(如果已经允许的话)。

评分

参与人数 1黑币 +5 收起 理由
ax6808 + 5

查看全部评分

回复

使用道具 举报

32#
ID:1116534 发表于 2024-8-29 09:07 | 只看该作者
ax6808 发表于 2022-3-26 18:47
最后实际3.3V时2μA左右就对了:掉电模式本身0.4μA,掉电唤醒定时器1.5μA,总共约2μA就对了!!!
VDD为5 ...

回复

使用道具 举报

33#
ID:1116534 发表于 2024-8-29 09:16 | 只看该作者
Y_G_G 发表于 2022-3-31 16:14
还在整这个???
STC8G压根就不需要设置PxIE,我从来不管这个寄存器
我一直在用这个单片机,最小系统掉电模 ...

请问有没有遇到过加了外部设备后电流变大的,我有NMOS关了外部设备电源0V
回复

使用道具 举报

34#
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_();

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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