打印
[技术问答]

关于HC32L130F8UA低功耗的疑问

[复制链接]
2769|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tangweichen|  楼主 | 2019-12-5 17:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tangweichen 于 2019-12-6 16:08 编辑

公司开发低功耗项目时看中了华大这款HC32L130F8UA产品,向供应商拿了些样品,写了一个简单程序测试,测试过程中发现了一个奇怪的现象,当进入深度休眠模式,功耗会降到2个uA,维持个几秒的样子马上就会反弹到1个mA,不知道问题出在哪里,请知道详情的人给个指点,在此感谢了!
下面为简单的测试代码
//*****************************************************************************
int32_t main(void)
{
    delay1ms(5*1000);

    while (1) GotoLpmMode();
}
/*******************************************************************************
* 进入休眠模式
******************************************************************************/
void GotoLpmMode(void)
{
    //Lpm Cfg
    stc_lpm_config_t          stcLpmCfg;
    stcLpmCfg.enSEVONPEND   = Se***dDisable;
    stcLpmCfg.enSLEEPDEEP   = SlpDpEnable;   //使能:执行WFI进入深度休眠;
    stcLpmCfg.enSLEEPONEXIT = SlpExtDisable; //不使能使能:退出异常处理并返回时,处理器自动进入休眠模式的特性禁止.
    Lpm_Config(&stcLpmCfg);
   
    Lpm_GotoLpmMode();
}
解决方案:
//*****************************************************************************
static void _LowPowerModeGpioSet(void)
{
    //Demo板所有低功耗模式不使用的IO配置为输出
    M0P_GPIO->PAADS = 0x0000;
    M0P_GPIO->PBADS = 0x0000;
    M0P_GPIO->PCADS = 0x0000;
    M0P_GPIO->PDADS = 0x00;

    M0P_GPIO->PADIR = 0x0000;
    M0P_GPIO->PBDIR = 0x0000;
    M0P_GPIO->PCDIR = 0x0000;
    M0P_GPIO->PDDIR = 0x00;

    //Demo所有低功耗模式下不使用的IO输出低电平
    M0P_GPIO->PAOUT = 0x0000;
    M0P_GPIO->PBOUT = 0x0000;
    M0P_GPIO->PCOUT = 0x0000;
    M0P_GPIO->PDOUT = 0x00;
        
}

感谢 martinhu 的帮忙,问题已经解决!
在进入休眠模式之前,需要把未使用到的IO口置为输出低电平,此时功耗会稳定在2uA,不会存在反弹的情况。
不然会出现我描述的那种情况,低功耗只能维持个几秒就会反弹到mA级别。上述为我测试这款HC32L130F8UA产品的情况。希望对遇到这种情况的坛友有所帮助,最后还是要感谢下martinhu 的帮助。

使用特权

评论回复
沙发
hayden0| | 2019-12-5 17:44 | 只看该作者
GotoLpmMode();
while (1) ;//这样写试试!

使用特权

评论回复
板凳
tangweichen|  楼主 | 2019-12-5 17:54 | 只看该作者
hayden0 发表于 2019-12-5 17:44
GotoLpmMode();
while (1) ;//这样写试试!

测试效果一样。
GotoLpmMode(); // 此时已经进入睡眠模式了,没有中断去唤醒,所以是一样的

使用特权

评论回复
地板
smartpower| | 2019-12-5 21:31 | 只看该作者
软件示例里有低功耗代码。

使用特权

评论回复
5
为爱续电| | 2019-12-5 21:52 | 只看该作者
楼主解决了吗

使用特权

评论回复
6
martinhu| | 2019-12-6 10:06 | 只看该作者
本帖最后由 martinhu 于 2019-12-6 10:07 编辑

130驱动库样例里面,example-->>gpio里面有超低功耗的例程,IO中断唤醒,大概0.5uA楼主这个可能是因为没有处理不使用的IO,导致增加了MCU的功耗

使用特权

评论回复
评论
tangweichen 2019-12-6 15:05 回复TA
是的,现在没有处理没有使用的IO口,我等会试试是不是这个原因 
7
捷佳科技| | 2019-12-6 15:27 | 只看该作者
华大130的我们支持得比较多方便加1017142325qq吗?

使用特权

评论回复
8
tangweichen|  楼主 | 2019-12-6 16:00 | 只看该作者
martinhu 发表于 2019-12-6 10:06
130驱动库样例里面,example-->>gpio里面有超低功耗的例程,IO中断唤醒,大概0.5uA楼主这个可能是因为没有 ...

感谢感谢,我这边测试还真如你所说,帮了我大忙

使用特权

评论回复
9
tangweichen|  楼主 | 2019-12-6 16:09 | 只看该作者

解决了,需要把未使用的IO设置成输出低电平

使用特权

评论回复
10
martinhu| | 2019-12-6 19:39 | 只看该作者
本帖最后由 martinhu 于 2019-12-6 19:41 编辑
tangweichen 发表于 2019-12-6 16:09
解决了,需要把未使用的IO设置成输出低电平

在进入deepsleep或者sleep之前,没有使用的IO(包括小于64PIN的封装,没有引出来的引脚),可以配置为上拉或者下拉输入,或者输出低电平;已经使用的输出的引脚,保持输出电平和外部电路等电势,或者改为输入;已经使用的输入引脚,外部电路有确定的电平,可以保持输入状态(外部有上拉或者下拉的,内部可以不设上下拉);ADC的引脚,还是保持ADC的属性(GPIO的ADS使能,init函数不需要(init函数可能会把ADS清零))。

使用特权

评论回复
11
wjiujiu| | 2019-12-6 19:42 | 只看该作者
楼主 方便加q吗 1733215976  我们帮你看看

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝