天线|RF射频
直播中

陈科生

7年用户 165经验值
私信 关注
[问答]

有人需要nRF51822低功耗CPU睡眠软件应用的代码吗

下面是本人调试通过的nRF51822低功耗睡眠的软件应用,当执行NRF_POWER->SYSTEMOFF = 1;CPU将停止运行,保留外设参数,本人实测睡眠模式下电路电流消耗10微安,当被GPIO的DETECT信号唤醒后,复位,软件从main函数开始执行。whilie(1)下CPU消耗18毫安电流。不废话了,上实例代码,若有不明,欢迎加企鹅2749746043讨论。



/*****************************************************/

#include

#include

#include "nrf.h"

#include "nrf_gpio.h"

#include "boards.h"



#define KeyPressFlag 0



int main(void)

{

   

    nrf_gpio_cfg_input(key_0, NRF_GPIO_PIN_NOPULL);// 配置按键BUTTON_0为输入

   

    // 配置BUTTON_1管脚为DETECT信号输出,该句很重要,是CPU被GPIO唤醒的必要条件

    nrf_gpio_cfg_sense_input(key_1, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW);



    nrf_gpio_range_cfg_output(LED_START, LED_STOP);//配置LED指示灯管脚为输出



    nrf_gpio_pin_set(LED_0); //点亮LED灯



    // 睡眠保留RAM的参数

    NRF_POWER->RAMON = POWER_RAMON_ONRAM0_RAM0On   << POWER_RAMON_ONRAM0_Pos

                     | POWER_RAMON_ONRAM1_RAM1On   << POWER_RAMON_ONRAM1_Pos

                     | POWER_RAMON_OFFRAM0_RAM0Off << POWER_RAMON_OFFRAM0_Pos

                     | POWER_RAMON_OFFRAM1_RAM1Off << POWER_RAMON_OFFRAM1_Pos;

   

    while(1)

    {     

        // 如果BUTTON0 被按下,则熄灭LED灯让CPU进入睡眠

        if(nrf_gpio_pin_read(key_0) == KeyPressFlag)

        {

            nrf_gpio_pin_clear(LED_0);



            //CPU进入睡眠模式,若有GPIO的DETECT信号唤,则CPU被唤醒而后复位从main函数开始执行。

            NRF_POWER->SYSTEMOFF = 1;

        }

    }

}

回帖(18)

王伟鹏

2020-6-15 11:28:15
帮顶....
举报

李欣

2020-6-15 11:44:05
写的不错。楼主有试过和nrf24l01应答通讯没?
举报

周颂焱

2020-6-15 12:01:45
没有呢,感觉这种通信在产品开发上没啥实际有效的意义吧。
举报

张蕾

2020-6-15 12:11:05
请问系统的电源供电是什么方案?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分