糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > HS6621低功耗调试(HS6621CG)

HS6621低功耗调试(HS6621CG)

时间:2020-01-20 17:51:06

相关推荐

HS6621低功耗调试(HS6621CG)

文章目录

HS6621CG低功耗调试一、低功耗的模式选择、区别、运行顺序1.低功耗模式选择2.区别与运行流程(这里主要介绍快速休眠的运行流程) 二、进入低功耗1.需要进入低功耗2.通过sysdump()函数的串口打印信息进行调试

HS6621CG低功耗调试

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

低功耗外设控制标志位

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

1.低功耗模式选择

static void ble_stack_config(void){// Disable WDTwdt_enable(0);// Enable DCDCpmu_dcdc_enable(true);// Power down xtal32k in deep sleep modepmu_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 parampmu_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_HALF3. 如果是按键唤醒,又是双沿中断按键的话,程序先进入 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口状态

如果觉得《HS6621低功耗调试(HS6621CG)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。