HS6621低功耗调试(HS6621CG)

HS6621CG低功耗调试

低功耗蓝牙产品HS6621 ,本人项目中实际调试结果在5-7个uA左右

  • 低功耗外设控制标志位请添加图片描述

一、低功耗的模式选择、区别、运行顺序

1.低功耗模式选择
static void ble_stack_config(void)
{
    // Disable WDT
    wdt_enable(0);

    // Enable DCDC
    pmu_dcdc_enable(true);

    // Power down xtal32k in deep sleep mode
    pmu_32k_enable_in_deep_sleep(true);

    // Select 32k clock for stack
    //pmu_xtal32k_change_param(15, 1);
    pmu_select_32k(PMU_32K_SEL_RC);

    // xtal32m param
    pmu_xtal32m_change_param(15);

    // ultra sleep mode enable						//低功耗模式选择
    co_power_fast_sleep_mode_enable(true);			//快速休眠
    //co_power_ultra_sleep_mode_enable(true);		//深度休眠

    // Enable sleep, SWD will be closed.
    co_power_sleep_enable(true);
}
2.区别与运行流程(这里主要介绍快速休眠的运行流程)
1.进入低功耗唤醒后的启动方式不同
    |-->快速休眠唤醒后执行 power_sleep_event_handler();
	    再去执行唤醒对应的函数,能够快速进行唤醒后的工作,执行对应的中断响应
    |-->深度睡眠唤醒后,相当于重启芯片,会去重新从 mian() 主函数开始重新配置全片

2.运行顺序
    |-->进入低功耗后会进入 power_sleep_event_handler();进入 POWER_SLEEP_ENTRY
    |-->唤醒过程
        1. 进入 power_sleep_event_handler() 中的 POWER_SLEEP_LEAVE_TOP_HALF,这里可以进行一些需要的功能恢复,如UART串口
        2. 进入 power_sleep_event_handler() 中的 POWER_SLEEP_LEAVE_BOTTOM_HALF
        3. 如果是按键唤醒,又是双沿中断按键的话,程序先进入 wakeup_gpio_handler(); 再进入 gpio_handler();
            
static void power_sleep_event_handler(co_power_sleep_state_t sleep_state, co_power_status_t power_status)
{
    switch(sleep_state) {
        case POWER_SLEEP_ENTRY:
			log_debug("s\n");
            break;

        case POWER_SLEEP_LEAVE_TOP_HALF:
            peripheral_restore();		//用于唤醒后的一些基础服务恢复,但是不建议在里面进行过多的操作
			//log_debug("m\n");
            break;

        case POWER_SLEEP_LEAVE_BOTTOM_HALF:
			log_debug("l\n");
            break;
    }
}

二、进入低功耗

  • 芯片进入低功耗需要 IO 与配置状态保持一致,IO2、3、9在低功耗项目中最好不要使用,避免出现漏电
1.需要进入低功耗

调用以下函数进入低功耗

//按键进入低功耗
static void gpio_handler(uint32_t pin_mask)
{
    if(pin_mask & BIT_MASK(PIN_LOWPOWER)){
		pmu_lowpower_allow(PMU_LP_USER);	  //允许低功耗
		sysdump();							//打印系统状态,IO状态
        
        /*
         * 这里进行一些IO状态的改变,需要符合配置的 IO 状态
         */
	}
}
2.通过sysdump()函数的串口打印信息进行调试

观察芯片状态,当输出信息中的当前状态与要求状态显示一致时,表示成功进入低功耗模式

///例程进入低功耗模式
[PMU] prevent_status=00000000
[PMU] wakeup_pin=01000400(cur_level=01000400 sleep_level=01000400)
[PMU] pull_up=01000C50(cur_level=01000C50) pull_down=0000000C(cur_level=00000000) all_cur_level=0140FCF2
[PMU] clocking: CPU(32MHz) SRAM(FF) RTC(WDT) SF0 SF1 UART0 GPIO ANA

///HS6621CG工程未进入低功耗模式
//V1.1
[PMU] prevent_status=00000001			//PMU_LP_TIM0阻止,对应的位置就在第一部分介绍的标志位
[PMU] wakeup_pin=00081C00(cur_level=00081C00 sleep_level=00081C00)
[PMU] pull_up=363FFE17(cur_level=363FFE13) pull_down=00800140(cur_level=00000000) all_cur_level=377FFEB3
[PMU] clocking: CPU(32MHz) SRAM(FF) RTC(WDT) SF0 SF1 TIMER0 UART0 UART1 GPIO
[LL] ADV interval=25ms txpwr=0dBm phy1=1Mbps phy2=1Mbps		//[LL]属于广播开启

//V1.2(上拉引脚有问题 )
[PMU] prevent_status=00000000
[PMU] wakeup_pin=00081C00(cur_level=00081C00 sleep_level=00081C00)
[PMU] pull_up=363FFE17(cur_level=363FFE13) pull_down=00800140(cur_level=00000000) all_cur_level=377FFEB3
[PMU] clocking: CPU(32MHz) SRAM(FF) RTC(WDT) SF0 SF1 TIMER0 UART0 UART1 GPIO
[LL] ADV interval=25ms txpwr=0dBm phy1=1Mbps phy2=1Mbps		//[LL]属于广播开启

//V1.3(未进入低功耗,低功耗回调函数未调用)
[PMU] prevent_status=00000000
[PMU] wakeup_pin=00081C00(cur_level=00081C00 sleep_level=00081C00)
[PMU] pull_up=363FFE13(cur_level=363FFE13) pull_down=00800144(cur_level=00000000) all_cur_level=377FFEB3
[PMU] clocking: CPU(32MHz) SRAM(FF) RTC(WDT) SF0 SF1 TIMER0 UART0 UART1 GPIO
[LL] ADV interval=25ms txpwr=0dBm phy1=1Mbps phy2=1Mbps		//[LL]属于广播开启
    
//V1.4
[PMU] prevent_status=00000000
[PMU] wakeup_pin=00081C40(cur_level=00081C00 sleep_level=00081C40)   //Wake_Up_Pin 一直处于唤醒电平
[PMU] pull_up=363FFE13(cur_level=363FFE13) pull_down=00800144(cur_level=00000000) all_cur_level=377FFE93
[PMU] clocking: CPU(32MHz) SRAM(FF) RTC(WDT) SF0 SF1 TIMER0 UART0 UART1 GPIO ANA

/* 解决分析 */
1.关闭广播
2.项目中用到的定时器Timer0要关闭
3.唤醒引脚配置为高电平唤醒时,IO引脚要配置为内部下拉,可以通过系统信息打印获取当前IO口状态
  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值