打印
[技术问答]

HC32L110低功耗模式不稳定问题

[复制链接]
1040|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
卡文迪许怪|  楼主 | 2023-10-11 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 卡文迪许怪 于 2023-10-11 11:42 编辑

最近试了HC32L110低功耗。HC32L110C6PA-TSSOP20主时钟选择内部高速时钟。
启动使用了GPIO,lptime。
GPIO不使用的io都做了输入模式处理(除swd)。
lptime有中断。

一开始的时候5ua,正常运行,每1s唤醒一次。
但是运行了一天之后,我发现他功耗来到了60ua,这是为什么?
代码如下:
#include "main.h"

volatile int LptTest_L    = 0;
volatile int LptTest_falg = 0;

int SYS_Status = 0;

int main(void)
{
    Main_Init();
    while (1) {
        switch (SYS_Status) {
            case (0): {
                if (LptTest_L >= 1) {
                    Lpt_Stop();

                    if (User_do_check() == 0) {
                        SYS_Status++; //
                    } else {
                        SYS_Status = 2;
                    }
                }
                if (LptTest_falg == 1 && SYS_Status == 0)        // nothing
                {
                    LptTest_falg = 0;
                    Lpm_GotoLpmMode();
                }
            } break;
            case (1): {
                SYS_Status++;
                // do something
            } break;
            case (2): {
                SYS_Status++;
                LptTest_L = 0;
                                Lpt_ARRSet(0x00);
                Lpt_Run();
                // run time
            } break;
            case (3): {
                SYS_Status = 0;
                Lpm_GotoLpmMode();
                // low pow & clean Status
            } break;
            default:
                break;
        }
                Base_NOP_Delay(10, 10);
    }
}

int User_do_check(void)
{
    int retval = 0;
    User_GPIO_set(MOSB, 1);
    Base_NOP_Delay(6000, 100);
    User_GPIO_set(MOSB, 0);

    return retval;
}

void Main_Init(void)
{

    stc_clk_config_t stcClkCfg;
    stcClkCfg.enClkSrc  = ClkRCH;
    stcClkCfg.enHClkDiv = ClkDiv1;
    stcClkCfg.enPClkDiv = ClkDiv1;

    Clk_Init(&stcClkCfg);

    Clk_Enable(ClkRCL, TRUE); // 使能RCL


    User_GPIO_Init(TRUE);
    User_GPIO_set(GPO, 0);
    User_GPIO_set(MOSA, 0);
    User_GPIO_set(MOSB, 0); // 全关

    //        Uart_lp_Init (TRUE);
    TIME_lp_Init(TRUE);
    Base_NOP_Delay(6000, 100);
    do {
        Base_NOP_Delay(10, 10);
    } while (1 == KEY_R()); // 注意:此处用户不能屏蔽,否则进入深度休眠模式导致SWD连接不上 //


    Lpm_GotoLpmMode();

}

void LptInt(void)
{
    if (TRUE == Lpt_GetIntFlag()) {
        Lpt_ClearIntFlag();
        LptTest_falg = 1;
        LptTest_L++;
        if (LptTest_L > 1000) {
            LptTest_L = 0;
        }
    }
}

int TIME_lp_Init(int Set)
{
    stc_lpt_config_t stcConfig; // time
    stc_lpm_config_t stcLpmCfg; // Low Power Mode
    DDL_ZERO_STRUCT(stcLpmCfg);

    int retval          = Ok;
    uint16_t u16ArrData = 0;
    if (Set) {
        Clk_SetPeripheralGate(ClkPeripheralLpTim, TRUE);
        stcConfig.enGateP  = LptPositive;
        stcConfig.enGate   = LptGateDisable;
        stcConfig.enTckSel = LptIRC32K;
        stcConfig.enTog    = LptTogDisable;
        stcConfig.enCT     = LptTimer;
        stcConfig.enMD     = LptMode2;

        stcConfig.pfnLpTimCb = LptInt;

        if (Lpt_Init(&stcConfig) != Ok)
            retval = Error;
        if (retval == Ok) {
            // Low Power Mode Cfg
            stcLpmCfg.enSEVONPEND   = Se***dDisable;
            stcLpmCfg.enSLEEPDEEP   = SlpDpEnable;
            stcLpmCfg.enSLEEPONEXIT = SlpExtDisable;
            Lpm_Config(&stcLpmCfg);

            // Lpt 中断使能
            Lpt_ClearIntFlag();
            Lpt_EnableIrq();
            EnableNvic(LPTIM_IRQn, 2, TRUE);

            // 设置重载值,计数初值,启动计数
            Lpt_ARRSet(u16ArrData);
            Lpt_Run();
        }
    } else {
        Clk_SetPeripheralGate(ClkPeripheralLpTim, FALSE);
    }

    return retval;
}







使用特权

评论回复
沙发
q1ngt12| | 2023-10-25 11:32 | 只看该作者
小华的芯片低功耗挺稳定的啊,咋还不稳定了?

使用特权

评论回复
板凳
su1yirg| | 2023-10-25 12:37 | 只看该作者
你是不是硬件受到干扰了啊

使用特权

评论回复
地板
cen9ce| | 2023-10-25 13:52 | 只看该作者
一般情况是谁静电打到这电路板了或者受到其他干扰会这样,容易漏电

使用特权

评论回复
5
g0d5xs| | 2023-10-25 15:12 | 只看该作者
是不是电容漏电了?

使用特权

评论回复
6
tax2r6c| | 2023-10-25 16:45 | 只看该作者
你多测几个,看看都是功耗60微安吗?

使用特权

评论回复
7
lix1yr| | 2023-10-25 18:28 | 只看该作者
多测测,一般多测测才能判断是硬件问题,还是程序问题

使用特权

评论回复
8
lamanius| | 2023-10-26 08:25 | 只看该作者
SWD好像也要处理一下吧

使用特权

评论回复
9
y1n9an| | 2023-10-26 09:18 | 只看该作者
你就按照官方的低功耗配置IO状态就行

使用特权

评论回复
10
suw12q| | 2023-10-26 10:39 | 只看该作者
看代码好像没啥问题,但是你说一下增长60uA,不知道为啥

使用特权

评论回复
11
d1ng2x| | 2023-10-26 13:14 | 只看该作者
是不是有的外设没处理好啊?没关闭吧

使用特权

评论回复
12
wubangmi| | 2023-10-26 17:47 | 只看该作者
建议不使用的GPIO关闭上下拉并输出低,或者配置下拉使能输出低。
配置上拉输入不太好,我实测有些芯片会有60~70uA的功耗

使用特权

评论回复
13
tpgf| | 2023-11-2 10:10 | 只看该作者
如果重新断电 上电之后还能回到5ua的低功耗模式吗

使用特权

评论回复
14
aoyi| | 2023-11-2 10:42 | 只看该作者
内部的这个高速时钟应该不是问题 能确定程序没有跑飞吗

使用特权

评论回复
15
tfqi| | 2023-11-2 11:16 | 只看该作者
代码的运行环境怎么样 干扰厉害吗

使用特权

评论回复
16
gwsan| | 2023-11-2 20:49 | 只看该作者
看代码的话 并没有复杂的功能 这个电流可以进行实时监控吗

使用特权

评论回复
17
zljiu| | 2023-11-2 21:13 | 只看该作者
不同的芯片在低功耗的时候对引脚的处理有些不同

使用特权

评论回复
18
nawu| | 2023-11-2 21:48 | 只看该作者
这种现象是非常容易复现的还是偶尔一次的呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝