nRF52832 低功耗调试经验

本文详细介绍了如何在nRF52832芯片上实现低功耗电源管理,包括初始化、休眠模式进入及唤醒引脚配置。在休眠模式中,通过关闭不必要的外设和定时器来降低电流消耗,但实际应用中仍存在327uA的电流泄漏,需要进一步排查原因。
摘要由CSDN通过智能技术生成

nrf52832的电源管理有两种模式: System OFF 、System ON。

芯片上电后默认是System ON 模式,此模式下可以关闭CPU而让外设继续保持工作。

产品需要利用按键进行开关机,功能实现比较简单,在开机界面按下按键关机休眠,休眠状态下,按下按键开机(可以重启),因此未对程序进行现场保护等操作。

1、上电初始化:

 在初始化程序中加入电源控制初始化函数         power_management_init();          // 初始化电源控制

static void power_management_init(void)
{
    ret_code_t err_code;
    err_code = nrf_pwr_mgmt_init();            //该函数位于nrf_pwr_mgmt.c
    APP_ERROR_CHECK(err_code);
}

2、进入休眠(关机)函数:

void Power_OFF(void)
{
    BUZZER_ON;                          //开蜂鸣器  
    McuWaitMs(600);
    BUZZER_OFF;                        //关蜂鸣器
    LCD_shutdown();                    //关LCD

    //需要根据实际情况关闭一些影响功耗的外设

    nrf_gpio_pin_set(LED_1);       //灭LED
    nrf_gpio_pin_set(LED_2);    
    Close_GPIO_Pin ();                //根据实际情况调整IO口电平,控制功耗  
    app_timer_stop_all();              //关闭所有定时器  
    sleep_flag = true;                    //置休眠标志
    sleep_mode_enter();
}


static void sleep_mode_enter(void)
{
    ret_code_t err_code;

    err_code = bsp_indication_set(BSP_INDICATE_IDLE);
    APP_ERROR_CHECK(err_code);

    // Prepare wakeup buttons.
    err_code = bsp_btn_ble_sleep_mode_prepare();   //按键唤醒设置
    APP_ERROR_CHECK(err_code);
    
    // Go to system-off mode (this function will not return; wakeup will cause a reset).        
      err_code = sd_power_system_off();
    
#if ((NRF_LOG_ENABLED ==0) && (NRF_LOG_BACKEND_SERIAL_USES_RTT == 0))
      //避开Debug的时候进行check err
    APP_ERROR_CHECK(err_code);
#endif 
}

这里有一个细节,如果系统在Debug(RTT打开)模式下,调用sd_power_system_off()将会返回NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN。这往往会导致check_err_code报错导致系统复位无法进入低功耗状态。

在实际使用时也可以根据使能标志规避报错。参考 https://zhuanlan.zhihu.com/p/111188942

3、唤醒引脚配置

uint32_t bsp_btn_ble_sleep_mode_prepare(void)
{
    uint32_t err_code;

    err_code = bsp_wakeup_button_enable(BTN_ID_WAKEUP);  // BTN_ID_WAKEUP = 5 ,BUTTON_6引脚设置为唤醒引脚
    RETURN_ON_ERROR_NOT_NOT_SUPPORTED(err_code);

//    err_code = bsp_wakeup_button_enable(BTN_ID_WAKEUP_BOND_DELETE);
//    RETURN_ON_ERROR_NOT_NOT_SUPPORTED(err_code);

    return NRF_SUCCESS;
}

以上做完,休眠后居然还有327uA电流,得空继续查找原因。

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值