新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2014-12-29
- 在线时间
- 0 小时
|
下面是本人调试通过的nRF51822低功耗睡眠的软件应用,当执行NRF_POWER->SYSTEMOFF = 1;CPU将停止运行,保留外设参数,本人实测睡眠模式下电路电流消耗10微安,当被GPIO的DETECT信号唤醒后,复位,软件从main函数开始执行。whilie(1)下CPU消耗18毫安电流。不废话了,上实例代码,若有不明,欢迎加企鹅2749746043讨论。<br />
<br />
/*****************************************************/<br />
#include <stdbool.h><br />
#include <stdint.h><br />
#include "nrf.h"<br />
#include "nrf_gpio.h"<br />
#include "boards.h"<br />
<br />
#define KeyPressFlag 0<br />
<br />
int main(void)<br />
{<br />
<br />
nrf_gpio_cfg_input(key_0, NRF_GPIO_PIN_NOPULL);// 配置按键BUTTON_0为输入<br />
<br />
// 配置BUTTON_1管脚为DETECT信号输出,该句很重要,是CPU被GPIO唤醒的必要条件<br />
nrf_gpio_cfg_sense_input(key_1, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); <br />
<br />
nrf_gpio_range_cfg_output(LED_START, LED_STOP);//配置LED指示灯管脚为输出<br />
<br />
nrf_gpio_pin_set(LED_0); //点亮LED灯<br />
<br />
// 睡眠保留RAM的参数<br />
NRF_POWER->RAMON = POWER_RAMON_ONRAM0_RAM0On << POWER_RAMON_ONRAM0_Pos<br />
| POWER_RAMON_ONRAM1_RAM1On << POWER_RAMON_ONRAM1_Pos<br />
| POWER_RAMON_OFFRAM0_RAM0Off << POWER_RAMON_OFFRAM0_Pos<br />
| POWER_RAMON_OFFRAM1_RAM1Off << POWER_RAMON_OFFRAM1_Pos;<br />
<br />
while(1)<br />
{ <br />
// 如果BUTTON0 被按下,则熄灭LED灯让CPU进入睡眠<br />
if(nrf_gpio_pin_read(key_0) == KeyPressFlag)<br />
{<br />
nrf_gpio_pin_clear(LED_0);<br />
<br />
//CPU进入睡眠模式,若有GPIO的DETECT信号唤,则CPU被唤醒而后复位从main函数开始执行。<br />
NRF_POWER->SYSTEMOFF = 1;<br />
}<br />
}<br />
}<br /> |
|