低功耗休眠模式:
1 转自:https://blog.csdn.net/sinat_23338865/article/details/83790023
睡眠代码:app_default_sleep_mode = ARCH_EXT_SLEEP_ON;arch_set_sleep_mode(app_default_sleep_mode);user_s
睡眠代码: app_default_sleep_mode = ARCH_EXT_SLEEP_ON; arch_set_sleep_mode(app_default_sleep_mode); user_scheduler_reinit(); 1、DA14580在睡眠之前需要将app_default_sleep_mode定义为相应的睡眠模式; 2、调用arch_set_sleep_mode()使设备进入睡眠模式;
唤醒代码: if (GetBits16(SYS_STAT_REG, PER_IS_DOWN)) { periph_init(); } app_default_sleep_mode = ARCH_SLEEP_OFF; arch_set_sleep_mode(app_default_sleep_mode); arch_ble_force_wakeup(); app_easy_wakeup();
a、唤醒外设 b、关闭睡眠模式 c、唤醒ble
DA14580唤醒方式一般有两种: 1、外部按键唤醒 外部按键唤醒经过测试,只能在广播关闭状态下进行唤醒;由于不满足项目要求,此处不做说明。 2、ke_timer内核定时器唤醒 内核定时器的最小唤醒单位为10ms,详细的内核定时器调用方式之前以有说明,本文简单说明下方案。 使用内核定时器进行按键的扫描操作,若扫描到按键按下,则进行唤醒,缺点是按键的扫描时间定100-200ms,100-200ms时间的扫描按键会增加板子的功耗;经测量,在睡眠状态下,项目的最小功耗可达15uA,而调用ke_timer后,功耗升至3mA,故在调用完后,需要及时关闭ke_timer,再次让设备处于低功耗下。
2 转自:https://blog.csdn.net/sinat_23338865/article/details/83790023
疑似,待验证:降低功耗可以将调试使能关闭
SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, 1); //使能能调试功能
用的SDK 5.0.4,sleep_mode demo程序,没有更改任何地方,开发板为官方Expert,进入deep sleep 之后,拔掉Jlink,仍有390ua的电流,不知道是为什么
谢谢大家的回复,功耗降下来了,主要原因是没有禁止debug,加上SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, 0);后,扩展功耗就降为1.49uA了
睡眠模式下使用jlink在线调试的方法
1、屏蔽main.文件中屏蔽如下代码:
// if ( (app_get_sleep_mode() == 2) || (app_get_sleep_mode() == 1) )
// {
// SetWord16(SET_FREEZE_REG, FRZ_WDOG); // Stop WDOG until debugger is removed
// while ((GetWord16(SYS_STAT_REG) & DBG_IS_UP) == DBG_IS_UP) {};
// SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, 0); // close debugger
// }
2、在rwble.c文件中修改如下代码:
void BLE_SLP_Handler(void)
//void BLE_SLP_Handler_func(void)
{
ble_regs_pop();
// smpc_regs_pop();
SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, 1); //使能能调试功能
//SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, 0);
SetBits16(GP_CONTROL_REG, BLE_WAKEUP_REQ, 0); //just to be sure
}
来源:CSDN
作者:workervip
链接:https://blog.csdn.net/u013316124/article/details/103981246