搜索
bottom↓
回复: 6

华大的HC32L196-qfp64低功耗模式求助,深度休眠电流39.6ua。

[复制链接]

出0入36汤圆

发表于 2022-4-18 13:04:52 | 显示全部楼层 |阅读模式
1、华大的HC32L196,用的官方的gpio_deepsleep_wakeup例程,把LED功能屏蔽,只留一个按键唤醒,按键是10K上拉电阻到io。

2、直流电源直接给单片机供电3.3V,深度休眠电流39.6ua,但是官方例程里面写的是0.6ua,找不出原因。



/******************************************************************************
* Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved.
*
* This software is owned and published by:
* Huada Semiconductor Co.,Ltd ("HDSC").
*
* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
*
* This software contains source code for use with HDSC
* components. This software is licensed by HDSC to be adapted only
* for use in systems utilizing HDSC components. HDSC shall not be
* responsible for misuse or illegal use of this software for devices not
* supported herein. HDSC is providing this software "AS IS" and will
* not be responsible for issues arising from incorrect user implementation
* of the software.
*
* Disclaimer:
* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
* WARRANTY OF NONINFRINGEMENT.
* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
* SAVINGS OR PROFITS,
* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
* FROM, THE SOFTWARE.
*
* This software may be replicated in part or whole for the licensed use,
* with the restriction that this Disclaimer and Copyright notice must be
* included with each copy of this software, whether used in part or whole,
* at all times.
*/
/******************************************************************************/
/** \file main.c
**
** A detailed description is available at
** @link Sample Group Some description @endlink
**
**   - 2018-05-08  1.0  Lux First version for Device Driver Library of Module.
**
******************************************************************************/

/******************************************************************************
* Include files
******************************************************************************/
#include "gpio.h"
#include "lpm.h"
/******************************************************************************
* Local pre-processor symbols/macros ('#define')
******************************************************************************/

/******************************************************************************
* Global variable definitions (declared in header file with 'extern')
******************************************************************************/

/******************************************************************************
* Local type definitions ('typedef')
******************************************************************************/

/******************************************************************************
* Local function prototypes ('static')
******************************************************************************/


/******************************************************************************
* Local variable definitions ('static')                                      *
******************************************************************************/

/******************************************************************************
* Local pre-processor symbols/macros ('#define')
******************************************************************************/

/*****************************************************************************
* Function implementation - global ('extern') and local ('static')
******************************************************************************/
static void App_LedInit(void);
static void App_UserKeyInit(void);
static void App_LowPowerModeGpioSet(void);
static void _UserKeyWait(void);

/**
******************************************************************************
** \brief  Main function of project
**
** \return uint32_t return value, if needed
**
** This sample
**
******************************************************************************/
int32_t main(void)
{
   
    ///< LED 端口初始化
    //App_LedInit();
   
    ///< KEY 端口初始化
    App_UserKeyInit();
   
    ///< ===============================================
    ///< ============ 警告,警告,警告!!!=============
    ///< ===============================================
    ///< 本样例程序会进入深度休眠模式,因此以下两行代码起防护作用(防止进入深度
    ///< 休眠后芯片调试功能不能再次使用),
    ///< 在使用本样例时,禁止在没有唤醒机制的情况下删除以下两行代码。
    delay1ms(2000);
    _UserKeyWait();     ///< 等待按键按下后进入休眠模式
   
    ///< 配置Demo板上所有不使用的IO为高阻输入,避免端口漏电
    App_LowPowerModeGpioSet();
     
    ///< 打开并配置按键端口为下降沿中断
    Gpio_EnableIrq(STK_USER_PORT, STK_USER_PIN, GpioIrqFalling);
    EnableNvic(PORTA_IRQn, IrqLevel3, TRUE);
   
    ///< 进入低功耗模式——深度休眠(使能唤醒后退出中断自动休眠特性)
    Lpm_GotoDeepSleep(TRUE);
   
    while(1)
    {
        ;
    }
}



///< PortA 中断服务函数
void PortA_IRQHandler(void)
{
    if(TRUE == Gpio_GetIrqStatus(STK_USER_PORT, STK_USER_PIN))
    {            
        ///< LED点亮
        //Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);
        
        delay1ms(2000);
        
        ///< LED关闭
        //Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);  

        Gpio_ClearIrq(STK_USER_PORT, STK_USER_PIN);   
    }

}   


static void _UserKeyWait(void)
{   
    while(1)
    {
        ///< 检测电平(USER按键是否按下(低电平))
        if(FALSE == Gpio_GetInputIO(STK_USER_PORT, STK_USER_PIN))
        {
            break;
        }
        else
        {
            continue;
        }
    }
}


static void App_LowPowerModeGpioSet(void)
{
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
   
    //swd as gpio
    Sysctrl_SetFunc(SysctrlSWDUseIOEn, TRUE);
   
    ///< 配置为数字端口
    M0P_GPIO->PAADS = 0;
    M0P_GPIO->PBADS = 0;
    M0P_GPIO->PCADS = 0;
    M0P_GPIO->PDADS = 0;
    M0P_GPIO->PEADS = 0;
    M0P_GPIO->PFADS = 0;
   
    ///< 配置为端口输入(除LED端口外)
    M0P_GPIO->PADIR = 0XFFFF;
    M0P_GPIO->PBDIR = 0XFFFF;
    M0P_GPIO->PCDIR = 0XFFFF;
    M0P_GPIO->PDDIR = 0XBFFF;
    M0P_GPIO->PEDIR = 0XFFFF;
    M0P_GPIO->PFDIR = 0XFFFF;
   
    ///< 输入下拉(除KEY端口以外)

    M0P_GPIO->PAPD = 0xFF7F;
    M0P_GPIO->PBPD = 0xFFFF;
    M0P_GPIO->PCPD = 0xFFFF;
    M0P_GPIO->PDPD = 0xFFFF;
    M0P_GPIO->PEPD = 0xFFFF;
    M0P_GPIO->PFPD = 0xFFFF;

   
    ///< 输入上拉(除KEY端口以外)
/*
    M0P_GPIO->PAPU = 0xFF7F;//M0P_GPIO->PAPD = 0xFF7F;
    M0P_GPIO->PBPU = 0xFFFF;
    M0P_GPIO->PCPU = 0xFFFF;
    M0P_GPIO->PDPU = 0xFFFF;
    M0P_GPIO->PEPU = 0xFFFF;
    M0P_GPIO->PFPU = 0xFFFF;   
*/
}

static void App_UserKeyInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
   
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
   
    ///< 端口方向配置->输入
    stcGpioCfg.enDir = GpioDirIn;
    ///< 端口驱动能力配置->高驱动能力
    stcGpioCfg.enDrv = GpioDrvL;
    ///< 端口上下拉配置->无
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdDisable;
    ///< 端口开漏输出配置->开漏输出关闭
    stcGpioCfg.enOD = GpioOdDisable;
    ///< 端口输入/输出值寄存器总线控制模式配置->AHB
    stcGpioCfg.enCtrlMode = GpioAHB;
    ///< GPIO IO USER KEY初始化
    Gpio_Init(STK_USER_PORT, STK_USER_PIN, &stcGpioCfg);   
   

}

static void App_LedInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
   
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
   
    ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
    stcGpioCfg.enDir = GpioDirOut;
    ////< 端口上下拉配置->无
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdDisable;
    ///< GPIO IO LED端口初始化
    Gpio_Init(STK_LED_PORT, STK_LED_PIN, &stcGpioCfg);
    ///< LED关闭
    Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);
}

/******************************************************************************
* EOF (not truncated)
******************************************************************************/





出20入186汤圆

发表于 2022-4-18 13:23:05 | 显示全部楼层
测试电流的时候注意把SWD下载器断开,否则电流测试不准,

出20入186汤圆

发表于 2022-4-18 13:23:19 | 显示全部楼层
全程不要调试,还是比较准的

出0入36汤圆

 楼主| 发表于 2022-4-18 13:26:47 | 显示全部楼层
yuyu87 发表于 2022-4-18 13:23
测试电流的时候注意把SWD下载器断开,否则电流测试不准,
(引用自2楼)

下载完我就把swd给拔掉了,我不调试,直接烧进去跑。

出90入372汤圆

发表于 2022-4-18 16:13:33 | 显示全部楼层
redworlf007 发表于 2022-4-18 13:26
下载完我就把swd给拔掉了,我不调试,直接烧进去跑。
(引用自4楼)

///< 配置为端口输入(除LED端口外)
    M0P_GPIO->PADIR = 0XFFFF;
    M0P_GPIO->PBDIR = 0XFFFF;
    M0P_GPIO->PCDIR = 0XFFFF;
    M0P_GPIO->PDDIR = 0XBFFF;   这个是什么引脚?用到了吗
    M0P_GPIO->PEDIR = 0XFFFF;
    M0P_GPIO->PFDIR = 0XFFFF;
   

出0入36汤圆

 楼主| 发表于 2022-4-18 16:25:52 | 显示全部楼层
keshipt 发表于 2022-4-18 16:13
///< 配置为端口输入(除LED端口外)
    M0P_GPIO->PADIR = 0XFFFF;
    M0P_GPIO->PBDIR = 0XFFFF;
(引用自5楼)

这个是LED口,我后面程序把这个屏蔽了,不用,设置为FFFF了

出0入36汤圆

 楼主| 发表于 2022-4-18 16:49:25 | 显示全部楼层
本帖最后由 redworlf007 于 2022-4-18 16:50 编辑

搞定了,淘宝买的开发板,mmp,沙雕把几个io口接到vcc和gnd上了。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 13:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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