我是靠谱客的博主 调皮棒球,最近开发中收集的这篇文章主要介绍nRF52832 低功耗调试经验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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电流,得空继续查找原因。

 

 

 

最后

以上就是调皮棒球为你收集整理的nRF52832 低功耗调试经验的全部内容,希望文章能够帮你解决nRF52832 低功耗调试经验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部