OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 10851|回复: 18

nRF51822低功耗CPU睡眠软件应用

[复制链接]

  离线 

3

主题

11

帖子

0

精华

新手上路

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

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133851
金钱
133851
注册时间
2010-12-1
在线时间
1288 小时
发表于 2015-1-9 23:37:58 | 显示全部楼层
帮顶....
回复 支持 反对

使用道具 举报

  离线 

57

主题

392

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1333
金钱
1333
注册时间
2012-8-28
在线时间
28 小时
发表于 2015-1-11 14:22:18 | 显示全部楼层
写的不错。楼主有试过和nrf24l01应答通讯没?
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

  离线 

3

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-12-29
在线时间
0 小时
 楼主| 发表于 2015-1-13 11:14:19 | 显示全部楼层
没有呢,感觉这种通信在产品开发上没啥实际有效的意义吧。
回复 支持 反对

使用道具 举报

  离线 

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-2-17
在线时间
4 小时
发表于 2015-1-17 16:09:34 | 显示全部楼层
请问系统的电源供电是什么方案?
回复 支持 反对

使用道具 举报

  离线 

3

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-12-29
在线时间
0 小时
 楼主| 发表于 2015-1-19 17:44:49 | 显示全部楼层
我是用1.5V干电池升压供电,片子是TI的TPS61097,电源转换效率95%,静态电流5uA,关断电流5nA。
回复 支持 反对

使用道具 举报

  离线 

13

主题

489

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1123
金钱
1123
注册时间
2012-8-4
在线时间
222 小时
发表于 2015-1-19 18:02:58 | 显示全部楼层
回复【6楼】bc_xunlian:
<br>---------------------------------
<br>用3V的电池&nbsp;外型也大不了多小,干嘛用1.5V的?
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复 支持 反对

使用道具 举报

  离线 

3

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-12-29
在线时间
0 小时
 楼主| 发表于 2015-1-21 10:12:48 | 显示全部楼层
1.5V的电池比较普及嘛。。。用户使用的时候,即便是在小卖部都可以买得到呀,一句话,方便。
回复 支持 反对

使用道具 举报

  离线 

13

主题

489

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1123
金钱
1123
注册时间
2012-8-4
在线时间
222 小时
发表于 2015-1-21 10:38:02 | 显示全部楼层
容量差不多的,ag和cr大小也差不多了
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复 支持 反对

使用道具 举报

  离线 

13

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2013-11-18
在线时间
0 小时
发表于 2015-3-26 17:28:26 | 显示全部楼层
楼主,我用了上面你的配置,但是功耗却是4mA...
回复 支持 反对

使用道具 举报

  离线 

13

主题

489

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1123
金钱
1123
注册时间
2012-8-4
在线时间
222 小时
发表于 2015-3-26 18:44:54 | 显示全部楼层
回复【10楼】fan123:
<br>---------------------------------
<br>你单位写错了吧&nbsp;4ua吧
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-5-6
在线时间
0 小时
发表于 2015-5-6 11:09:36 | 显示全部楼层
回复【11楼】muniao:
<br>---------------------------------回复【10楼】fan123:
<br>---------------------------------
<br>请问功耗却是4mA...是怎么测量出来的?
回复 支持 反对

使用道具 举报

  离线 

0

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-6-25
在线时间
0 小时
发表于 2015-6-25 17:20:35 | 显示全部楼层
代理NORDIC蓝牙4.0芯片NRF51822
<br>联系人:刘工
<br>QQ:1330504646
<br>手机:13714153746
<br>NRF51822是一款为超低功耗无线应用(ULP&nbsp;wirelesss&nbsp;applications)打造的多协议单芯片解决方案。
<br>它整合了Nordic一流的无线传送器,同时支持Bluetooth(R)&nbsp;low&nbsp;energy&nbsp;和专用的2.4GHz协议栈。
<br>基本情况是:
<br>2.4GHZ多协议无线射频
<br>32位ARM&nbsp;Cortex&nbsp;M0&nbsp;处理器
<br>128位AES硬件加密处理器
<br>256kB&nbsp;flash&nbsp;/&nbsp;16kB&nbsp;RAM
<br>可编程外设接口PPI
<br>全功能数字接口:&nbsp;SPI&nbsp;/&nbsp;I2C&nbsp;/&nbsp;UART
<br>10位ADC
<br>可编程的输出功率:&nbsp;+4dBm&nbsp;to&nbsp;-20dBm
<br>应用开发和协议堆栈完全独立
<br>与NRF24L系列完全兼容
<br>与NRF51xxx系列管脚兼容
<br>全局独立电源管理
<br>工作电压范围(1.8&nbsp;V&nbsp;~&nbsp;3.6&nbsp;V)
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-7-20
在线时间
0 小时
发表于 2015-7-20 13:53:33 | 显示全部楼层
回复【11楼】muniao:
<br>---------------------------------
<br>sd_power_system_off()之后,除了外部IO(含重新上电)唤醒外,可以由单片机自己定期唤醒么?
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-9-21
在线时间
0 小时
发表于 2015-9-23 21:44:34 | 显示全部楼层
楼主有没有用软件唤醒过啊
回复 支持 反对

使用道具 举报

  离线 

15

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
725
金钱
725
注册时间
2013-8-27
在线时间
318 小时
发表于 2017-4-14 13:15:26 | 显示全部楼层
fan123 发表于 2015-3-26 17:28
楼主,我用了上面你的配置,但是功耗却是4mA...

我也测出nrf51822的省电睡眠模式的功耗是4mA,请你后来解决了了吗?
回复 支持 反对

使用道具 举报

  离线 

34

主题

1198

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1529
金钱
1529
注册时间
2012-6-15
在线时间
10 小时
发表于 2017-6-19 10:23:04 | 显示全部楼层
潜龙探渊 发表于 2017-4-14 13:15
我也测出nrf51822的省电睡眠模式的功耗是4mA,请你后来解决了了吗?

4mA  的话 估计你是JTAG没拔下来

我现在有个问题, 按键按下去休眠了, 可是抬起来又唤醒了。 我延时之后再休眠,它就直接重启了。 这个难道不是边沿触发唤醒而是电平高低?
回复 支持 反对

使用道具 举报

  离线 

34

主题

1198

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1529
金钱
1529
注册时间
2012-6-15
在线时间
10 小时
发表于 2017-6-19 10:23:10 | 显示全部楼层
我现在有个问题, 按键按下去休眠了, 可是抬起来又唤醒了。 我延时之后再休眠,它就直接重启了。 这个难道不是边沿触发唤醒而是电平高低?
回复 支持 反对

使用道具 举报

  离线 

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2015-11-26
在线时间
27 小时
发表于 2017-12-22 22:52:10 | 显示全部楼层
不知道还有没有人看到,请问这个设置唤醒后ARM不丢失是怎么实现的还需要配置什么?我用楼主的代码实现了唤醒,但是ARM还是丢失的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-23 13:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */