打开nrf_pwr_mgmt_run() 函数,BLE 状态下,如果 CPU 处于空闲状态就会进入 sd_app_evt_wait() 函数,这个函数是进入低功耗的关键,是协议栈提供的一个等待事件函数。 void nrf_pwr_mgmt_run(void) { PWR_MGMT_FPU_SLEEP_PREPARE(); // 清除FDU异常,避免FDU中断被挂起 PWR_MGMT_SLEEP_LOCK_ACQUIRE(); //...
APP_ERROR_CHECK(err_code);//Signal that DFU mode is to be enter to the power management module nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_DFU); } 加入如上的代码后,我们就可以编译生成app了,并起名为app_soft作为原始app,然后在修改广播名为soft_Nordic_UART作为升级app。然后我们开始利用原...
打开nrf_pwr_mgmt_run() 函数,BLE 状态下,如果 CPU 处于空闲状态就会进入 sd_app_evt_wait() 函数,这个函数是进入低功耗的关键,是协议栈提供的一个等待事件函数。 voidnrf_pwr_mgmt_run(void){ PWR_MGMT_FPU_SLEEP_PREPARE();// 清除FDU异常,避免FDU中断被挂起PWR_MGMT_SLEEP_LOCK_ACQUIRE();// 锁定临...
* @retval True if shutdown is allowed by this power manager handler, otherwise false. */staticboolapp_shutdown_handler(nrf_pwr_mgmt_evt_t event){switch(event){caseNRF_PWR_MGMT_EVT_PREPARE_DFU:NRF_LOG_INFO("Power management wants to reset to DFU mode.");// YOUR_JOB: Get ready to re...
PWR_MGMT_CPU_USAGE_MONITOR_INIT();//CPU使用率跟踪初始化 returnPWR_MGMT_TIMER_CREATE(); } 3、协议栈初始化 3.1、ble_stack_init()协议初始化 协议栈初始化工作主要做下面几点: 1:协议栈回复使能应答,主要工作就是协议栈时钟初始化配置。 2:初始化协议栈,设置协议栈相关处理函数,使能协议栈。
已经有很多的文件告诉我们怎么去做到低功耗,我只描述下我做的nrf52810的低功耗SystemOFF,调用函数nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_SYSOFF);或sleep_mode_enter()可以做到0.3--0.5uA,SystemON时,也就是在idle_state_handle();函数时,系统功耗 ...
void nrf_pwr_mgmt_run(void) { PWR_MGMT_FPU_SLEEP_PREPARE(); PWR_MGMT_SLEEP_LOCK_ACQUIRE(); PWR_MGMT_CPU_USAGE_MONITOR_SECTION_ENTER(); PWR_MGMT_DEBUG_PIN_SET(); // Wait for an event. #ifdef SOFTDEVICE_PRESENT if (nrf_sdh_is_enabled()) ...
可以直接控制 POWER 相关寄存器使系统进入 System OFF 模式(NRF_POWER->SYSTEMOFF = 1; ),也可以通过API函数(sleep_mode_enter() 或 nrf_pwr_mgmt_run() 此函数执行 __WFE() 指令进入睡眠前清除所有事件),可以参考 SDK 中的 nrf_pwr_mgt 例子,系统进入 System OFF 模式会保留 GPIO 之前的状态,包括 GPIO...
// -NRF_PWR_MGMT_EVT_PREPARE_RESET return true; } NRF_LOG_INFO("Power management allowed to reset to DFU mode."); return true; } 4.3.4 主函数的修改和宏的声明 1、主函数中,添加上peer_manager_init()配对初始化函数,代码如下所示: ...
打开idle_state_handle()函数,该函数是处理空闲状态的函数。通过 if 语句,判断调试缓冲区没有更多日志的时候,就进入nrf_pwr_mgmt_run()函数,这个函数就会进入到低功耗模式,直到下一个事件发生。 static void idle_state_handle(void){ if(NRF_LOG_PROCESS() == false) // 如果调试缓冲区没有更多日志 ...