找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3507|回復(fù): 20
打印 上一主題 下一主題
收起左側(cè)

[已解決]關(guān)于STC8H系列單片機(jī)掉電模式下IO口狀態(tài)和功耗的問題

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
我使用STC8H8K64U單片機(jī),電路是STC8H的最小系統(tǒng),供電3.3V ,通過如下程序令單片機(jī)處于掉電模式:
  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進(jìn)入掉電模式
  13.         _nop_();
  14.         _nop_();
  15.         _nop_();
  16.         _nop_();
  17.         _nop_();
  18.         _nop_();
  19.         _nop_();

  20.     }
  21. }
復(fù)制代碼

測得單片機(jī)電流為
數(shù)據(jù)手冊標(biāo)稱:

這差距太大了,繼續(xù)翻手冊
于是我把代碼改成:
  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進(jìn)入掉電模式
  21.         _nop_();
  22.         _nop_();
  23.         _nop_();
  24.         _nop_();
  25.         _nop_();
  26.         _nop_();
  27.         _nop_();

  28.     }
  29. }
復(fù)制代碼
結(jié)果仍然不對

直到我看到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;
復(fù)制代碼
十分不解的我將這些加入到代碼中:
  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進(jìn)入掉電模式
  27.         _nop_();
  28.         _nop_();
  29.         _nop_();
  30.         _nop_();
  31.         _nop_();
  32.         _nop_();
  33.         _nop_();

  34.     }
  35. }
復(fù)制代碼

這樣就正常了!

有沒有大佬解釋一下原因?謝謝!









分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

來自 6#
ID:192020 發(fā)表于 2024-2-18 13:55 | 只看該作者
睡眠時所有引腳都應(yīng)該有確定電平,如果是高阻輸入的話,那外圍應(yīng)該加上下拉

評分

參與人數(shù) 1黑幣 +5 收起 理由
gqzjl + 5 贊一個!

查看全部評分

回復(fù)

使用道具 舉報

沙發(fā)
ID:474386 發(fā)表于 2024-2-18 11:31 | 只看該作者
你萬用表測量的擋位前后都不一致的。你確定不是萬用表量程問題導(dǎo)致?
回復(fù)

使用道具 舉報

板凳
ID:1064915 發(fā)表于 2024-2-18 11:40 | 只看該作者
感謝分享,關(guān)閉了額外耗電
回復(fù)

使用道具 舉報

地板
ID:807591 發(fā)表于 2024-2-18 11:54 | 只看該作者
所有IO改成高阻 再看看 2.1ua 和0.4ua差好多
回復(fù)

使用道具 舉報

5#
ID:639106 發(fā)表于 2024-2-18 13:46 | 只看該作者
zycman 發(fā)表于 2024-2-18 11:31
你萬用表測量的擋位前后都不一致的。你確定不是萬用表量程問題導(dǎo)致?

最開始電流太大,超出萬用表200uA檔的量程了,只能用200mA檔
回復(fù)

使用道具 舉報

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

STC8H8K64U上電默認(rèn)除了3.2、3.3兩IO口之外,所有IO都是高阻剛試了下全改高阻,電流反而更大了
回復(fù)

使用道具 舉報

8#
ID:639106 發(fā)表于 2024-2-18 14:37 | 只看該作者
qq475878026 發(fā)表于 2024-2-18 13:55
睡眠時所有引腳都應(yīng)該有確定電平,如果是高阻輸入的話,那外圍應(yīng)該加上下拉

謝謝!這個在數(shù)據(jù)手冊的那里找到的?
回復(fù)

使用道具 舉報

9#
ID:1110945 發(fā)表于 2024-2-18 20:46 | 只看該作者
掉電定時器沒有打開,電流應(yīng)該是0.4微安,我測過,
掉電定時器打開了以后電流是1.8微安,測試電壓3.0V。
回復(fù)

使用道具 舉報

10#
ID:192020 發(fā)表于 2024-2-19 09:07 | 只看該作者
gqzjl 發(fā)表于 2024-2-18 14:37
謝謝!這個在數(shù)據(jù)手冊的那里找到的?

在附錄T,應(yīng)用注意事項(xiàng)里。不止STC,我用過的國產(chǎn)芯片睡眠時都是要這樣配置的,不懂STM的是不是這樣
回復(fù)

使用道具 舉報

11#
ID:807591 發(fā)表于 2024-2-19 10:48 | 只看該作者
gqzjl 發(fā)表于 2024-2-18 13:56
STC8H8K64U上電默認(rèn)除了3.2、3.3兩IO口之外,所有IO都是高阻剛試了下全改高阻,電流反而更大了

STC測試的 應(yīng)該是沒有外圍電路,單獨(dú)芯片的功耗,有外圍電路,那多余的功耗不能算在芯片頭上
回復(fù)

使用道具 舉報

12#
ID:1116534 發(fā)表于 2024-8-29 08:25 | 只看該作者
gqzjl 發(fā)表于 2024-2-18 13:56
STC8H8K64U上電默認(rèn)除了3.2、3.3兩IO口之外,所有IO都是高阻剛試了下全改高阻,電流反而更大了

我也是,請問你解決沒有
回復(fù)

使用道具 舉報

13#
ID:161164 發(fā)表于 2024-8-29 10:11 | 只看該作者
qizhixu 發(fā)表于 2024-8-29 08:25
我也是,請問你解決沒有

全部引腳設(shè)為準(zhǔn)雙向
沒用的引腳設(shè)高電平
有用的引腳保持和外界電平一致
回復(fù)

使用道具 舉報

14#
ID:430492 發(fā)表于 2024-8-29 13:22 | 只看該作者
掉電模式,超級省電,特別是電池供電。
回復(fù)

使用道具 舉報

15#
ID:879348 發(fā)表于 2024-8-29 13:35 | 只看該作者
2uA已經(jīng)足夠了
回復(fù)

使用道具 舉報

16#
ID:1116534 發(fā)表于 2024-8-29 15:02 | 只看該作者
lkc8210 發(fā)表于 2024-8-29 10:11
全部引腳設(shè)為準(zhǔn)雙向
沒用的引腳設(shè)高電平
有用的引腳保持和外界電平一致

我設(shè)置了準(zhǔn)雙向口,電流1.6微安,但是鏈接24L01后,電流就變大了,用NMOS管控制電源0V,沒有用
回復(fù)

使用道具 舉報

17#
ID:1034262 發(fā)表于 2024-8-30 09:56 | 只看該作者
STC Mcu睡眠時IO不耗電的處理方法:

1、對于設(shè)置為準(zhǔn)雙向口、推挽輸出、開漏輸出低電平的IO,IO本身不耗電,輸出電平與外部電路配合成外部電路不耗電的方式即可。

2、設(shè)置為高阻或開漏輸出高電平的IO,如果懸空,則會因?yàn)檩斎霠顟B(tài)不確定導(dǎo)致有電流,以下兩種方式任選一種:
    A、IO口接一個確定的高電平(電壓高于VDD-0.3)或低電平(電壓低于0.3V),否則耗電。
    B、將IO口對應(yīng)的數(shù)字輸入功能關(guān)閉(對于STC8系列、STC32系列)。
       比如關(guān)閉P1.0、P1.1的數(shù)字輸入:
         P_SW2 |= 0x80;   //允許操作擴(kuò)展寄存器
         P1IE   = ~0x03;  //將P1.0 P1.1的數(shù)字輸入功能關(guān)閉

3、睡眠前,禁止ADC(如果已經(jīng)允許的話),禁止模擬比較器(如果已經(jīng)允許的話)。

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

回復(fù)

使用道具 舉報

18#
ID:161164 發(fā)表于 2024-8-30 10:03 | 只看該作者
qizhixu 發(fā)表于 2024-8-29 15:02
我設(shè)置了準(zhǔn)雙向口,電流1.6微安,但是鏈接24L01后,電流就變大了,用NMOS管控制電源0V,沒有用

24L01是3.3V的吧?
需要加開關(guān)管來斷開24L01的電源
回復(fù)

使用道具 舉報

19#
ID:1116534 發(fā)表于 2024-8-30 13:57 | 只看該作者
lkc8210 發(fā)表于 2024-8-30 10:03
24L01是3.3V的吧?
需要加開關(guān)管來斷開24L01的電源

電源是3.3V,加了MOS管,Nmos放負(fù)極,Pmos正極,還是不行,并且發(fā)送數(shù)據(jù)還出錯了
回復(fù)

使用道具 舉報

20#
ID:1116534 發(fā)表于 2024-10-29 13:53 | 只看該作者
qizhixu 發(fā)表于 2024-8-30 13:57
電源是3.3V,加了MOS管,Nmos放負(fù)極,Pmos正極,還是不行,并且發(fā)送數(shù)據(jù)還出錯了

我和你遇到同樣問題,你解決了嗎?
回復(fù)

使用道具 舉報

21#
ID:961114 發(fā)表于 2024-10-29 16:47 | 只看該作者
I/O口, 輸入/輸出, 用啥工作模式 ?
===STC32/STC8
答:如不考慮功耗
1,輸出請?jiān)O(shè)置成強(qiáng)推挽輸出,20mA以上的驅(qū)動能力 !
      你來個干擾看能拿他咋樣 ,他就不理你 �。�!
2,輸入請?jiān)O(shè)置成高阻輸入,默認(rèn)施密特觸發(fā)器輸入 !
     高阻輸入的阻抗是無窮大,至少 100兆歐以上,相當(dāng)于接到空氣,但有寄生電容的影響
     打開內(nèi)部4K上拉/或外部加10K上拉/或?qū)Ψ绞菑?qiáng)推挽輸出
     ====如對方是強(qiáng)推挽輸出,就沒必要打開內(nèi)部的4K上拉,也沒必要外部加上拉
     ====輸入口也可再并個小電容到地,一般沒必要,軟件反復(fù)多讀幾次也能解決
3,不用的I/O,最專業(yè)的做法:設(shè)置為【高阻輸入 + 關(guān)閉數(shù)字輸入】
      這樣浮空的I/O, 高阻輸入模式,在省電模式時也不會耗電;
      另外不小心短接到 MCU-VCC/GND 也不會燒掉,高阻輸入 | 電流流不進(jìn)來也流不出去
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表