OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12048|回复: 24

ARM学习笔记 NRF24L01的应用 第三季

[复制链接]

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2012-7-3 00:52:18 | 显示全部楼层 |阅读模式
&nbsp;<span style="widows:2;text-transform:none;text-indent:0px;display:inline !important;font:18px 微软雅黑;white-space:normal;orphans:2;float:none;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">好,还有发一个包和收一个包数据的代码,给大家帖出来.</span> <div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"><br />
</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">
<div>//启动NRF24L01发送一次数据</div>
<div>//txbuf:待发送数据首地址</div>
<div>//返回值:发送完成状况</div>
<div>u8 NRF24L01_TxPacket(u8 *txbuf)</div>
<div>{</div>
<div>u8 sta;</div>
<div><br />
</div>
<div><span style="color:#ff0000;">NRF24L01_CE=0;</span></div>
<div><br />
</div>
<div>&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="white-space:pre;" class="Apple-tab-span"> </span>NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF &nbsp;32个字节</div>
<div><br />
</div>
<div>&nbsp;<span style="white-space:pre;" class="Apple-tab-span"> </span><span style="color:#ff0000;">NRF24L01_CE=1;//启动发送</span></div>
<div><span class="Apple-converted-space">&nbsp;</span>&nbsp;&nbsp;</div>
<div><span style="color:#ffa500;">while(NRF24L01_IRQ!=0);//等待发送完成</span></div>
<div><br />
</div>
<div>sta=NRF24L01_Read_Reg(STATUS); &nbsp;//读取状态寄存器的值</div>
<div><br />
</div>
<div>&nbsp; &nbsp;</div>
<div>NRF24L01_Write_Reg(WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志</div>
<div><br />
</div>
<div>if(sta&amp;MAX_TX)//达到最大重发次数</div>
<div>{</div>
<div>NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器&nbsp;</div>
<div>return MAX_TX;&nbsp;</div>
<div>}</div>
<div>if(sta&amp;TX_OK)//发送完成</div>
<div>{</div>
<div>return TX_OK;</div>
<div>}</div>
<div>return 0xff;//其他原因发送失败</div>
<div>}</div>
<div><br />
</div>
</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">记住要记住<span style="color:#ff0000;">有颜色</span>的这几行.</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">然后是收一包数据.</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"><br />
</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">
<div>u8 NRF24L01_RxPacket(u8 *rxbuf)</div>
<div>{</div>
<div>u8 sta,sta1;</div>
<div><span class="Apple-converted-space">&nbsp;</span>&nbsp; &nbsp;<span style="white-space:pre;" class="Apple-tab-span"> </span><span class="Apple-converted-space">&nbsp;</span>&nbsp;&nbsp;</div>
<div>sta=NRF24L01_Read_Reg(STATUS); &nbsp;//读取状态寄存器的值</div>
<div><br />
</div>
<div><span class="Apple-converted-space">&nbsp;</span>&nbsp; &nbsp;<span style="white-space:pre;" class="Apple-tab-span"> </span>&nbsp;</div>
<div><span style="color:#ff0000;">NRF24L01_Write_Reg(WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志</span></div>
<div><br />
</div>
<div>Clear_line(18,0,30);</div>
<div>sta1=NRF24L01_Read_Reg(STATUS);</div>
<div>Bit_show(18,11,sta1);</div>
<div><br />
</div>
<div><br />
</div>
<div>if(sta&amp;RX_OK)//接收到数据</div>
<div>{</div>
<div>NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据</div>
<div>NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器&nbsp;</div>
<div>return 0;&nbsp;</div>
<div>}<span style="white-space:pre;" class="Apple-tab-span"> </span><span class="Apple-converted-space">&nbsp;</span>&nbsp;&nbsp;</div>
<div>return 1;//没收到任何数据</div>
<div>}<span style="white-space:pre;" class="Apple-tab-span"> </span></div>
</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"><br />
</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"><br />
</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">看到没有,和发数据不同,这里不用&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color:#ff0000;">NRF24L01_CE=0</span>和<span style="color:#ff0000;">NRF24L01_CE=1.</span></div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"><span style="color:#ff0000;"><br />
</span></div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"><span style="color:#ff0000;"><br />
</span></div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"><span style="color:#ff0000;">如下几点在调试的时候总结出来的:</span></div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">
<ol>
<li><span style="color:#ff0000;">如果 TX FIFO 刚好够32个数时,状态寄存器都会显示 0 未满.如再丢进去就会说满了.</span></li>
<li><span style="color:#ff0000;">重启计算机时要记住重起一下NRF24 因为里边的数据还是之前的,除非重写一次.</span></li>
<li><span style="color:#ff0000;">中断位是要写1清0的.</span></li>
<li><span style="color:#ff0000;">如果地址都相同,读出来数据的是频道号数最大的那个频道.就是接收5通道. 大家可以做下实验,看对不对.</span></li>
<li><span style="color:#ff0000;">频道2~5只需写一个8位的地址就行.</span></li>
<li><span style="color:#ff0000;">有时中断产生了,但RX_FIFO会为0,要重读一次.</span></li>
</ol>
</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">好了.大家如还发现什么都发到帖上去吧.</div>
<div style="widows:2;text-transform:none;text-indent:0px;font:18px 微软雅黑;white-space:normal;orphans:2;letter-spacing:normal;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;">我丢上两个代码给大家试试.压缩的文件.</div>

TX_COM_NRF2401_TEXT.rar

634.36 KB, 下载次数: 1631

RX_COM_NRF2401_TEXT.rar

635.46 KB, 下载次数: 1469

我的工作就是天天在玩
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
 楼主| 发表于 2012-7-3 00:54:19 | 显示全部楼层
我的代码如大家只有一台机,可以玩玩读写里边的寄存器.玩这玩意要两台机的,要不也能用现成的51搞个.
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
 楼主| 发表于 2012-7-3 00:55:39 | 显示全部楼层
我在室内试过,十多米内没有墙是没有问题的.有墙就不行了,拐个弯都不行.
<br>
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
 楼主| 发表于 2012-7-3 00:56:22 | 显示全部楼层
要远点的就玩NRF905吧.有空我帖代码给大家玩玩.
<br>
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
 楼主| 发表于 2012-7-3 00:57:19 | 显示全部楼层
靠呀,升到两钻级了.祝贺一下.
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2012-7-3 08:48:45 | 显示全部楼层
呵呵,继续支持.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-7-26
在线时间
14 小时
发表于 2012-8-19 20:59:22 | 显示全部楼层
现在玩<span style="font-family:Simsun;line-height:normal;background-color:#d1d9e2;">nrf24l01,借鉴一下楼主的好东西<img src="/static/image/smiley/kindeditor/13.gif" border="0" alt="" /></span>
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2012-8-25 13:23:15 | 显示全部楼层
好文!
回复 支持 反对

使用道具 举报

46

主题

177

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
381
金钱
381
注册时间
2012-5-2
在线时间
0 小时
发表于 2012-10-12 13:45:24 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2013-1-12
在线时间
0 小时
发表于 2013-1-13 09:43:04 | 显示全部楼层
回复【楼主位】chinafox:
<br>---------------------------------
<br>楼主&nbsp;在接收函数里
<br>Clear_line(18,0,30);
<br>sta1=NRF24L01_Read_Reg(STATUS);
<br>Bit_show(18,11,sta1);
<br>
<br>这段是什么意思&nbsp;
<br>
<br>Clear_line(18,0,30);
<br>Bit_show(18,11,sta1);
<br>这两个是干什么的?
希望遇到更多有相同兴趣的盆友来一起交流
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2013-1-12
在线时间
0 小时
发表于 2013-1-13 10:18:41 | 显示全部楼层
还有
<br>程序一直卡在while(NRF24L01_IRQ!=0);//等待发送完成
<br>这里&nbsp;换了引脚后可以是可以运行了&nbsp;第二天又卡在这了
<br>是发射模块的问题还是什么问题&nbsp;
<br>请大神指教
希望遇到更多有相同兴趣的盆友来一起交流
回复 支持 反对

使用道具 举报

44

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
金钱
301
注册时间
2012-9-28
在线时间
0 小时
发表于 2013-1-28 12:58:43 | 显示全部楼层
支持支持,我获益良多
回复 支持 反对

使用道具 举报

15

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2012-11-5
在线时间
11 小时
发表于 2013-3-28 16:26:31 | 显示全部楼层
mark一个!顶一个!
学习之路漫长而修远......
回复 支持 反对

使用道具 举报

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2012-12-23
在线时间
18 小时
发表于 2013-3-28 16:59:45 | 显示全部楼层
好东西
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1633
金钱
1633
注册时间
2012-8-28
在线时间
71 小时
发表于 2013-10-21 14:22:40 | 显示全部楼层
楼主精神可嘉,还学不会的朋友看下我写的帖子:<a href="http://www.openedv.com/posts/list/22270.htm" target="_blank">http://www.openedv.com/posts/list/22270.htm
                                         
                                                                            </a>
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
发表于 2013-12-15 00:25:05 | 显示全部楼层
楼主调试时关注得比较细致
回复 支持 反对

使用道具 举报

1

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2014-8-11
在线时间
76 小时
发表于 2014-8-11 21:46:41 | 显示全部楼层
楼主好强大,定个
回复 支持 反对

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
 楼主| 发表于 2014-9-27 19:08:46 | 显示全部楼层
近来我在用这个二块多钱的东东写个小小的路由代码。又发现很多木有人知道的东东。
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2014-9-27 22:44:17 | 显示全部楼层
回复【18楼】chinafox:
<br>---------------------------------
<br>这么牛逼?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-4-1
在线时间
5 小时
发表于 2014-11-19 14:57:50 | 显示全部楼层
回复【18楼】chinafox:
<br>---------------------------------
<br>大神,请问一下有用过NRF24L01做过多机通信方面的应用吗,类似于这样的一个局域网中有几个发射端和接收端,现在要实现每个设备和其他设备交换信息,假入两个设备交换信息完成后,及时以后碰在一起也不会交换数据,这个设备可以自动切换发送和接收模式,大神有做过类似这方面的应用吗?求指导
回复 支持 反对

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
 楼主| 发表于 2014-12-8 22:46:59 | 显示全部楼层
回复【20楼】dragon:
<br>---------------------------------
<br>前两个月我在用NRF24L01做一个8K大的带路由功能的代码,后来有一个项目来了,中断刷钱钱去了。
<br>上个月做完项目,刚想做回来的时候老婆大人逼我装修房子了,我家的中央空调是我自己设计的,还有太阳能电池发电的向日挂架,现在正在忙这个,两个月后吧,我会重新做这个。到时好了发个能试的代码给大家吧。
<br>
<br>这个不难的,但要用点时间去调试。搞过ZIGBEE的话写这个不难的。我就是觉得ZIGBEE太大了,想做个简易的小小的,2元的芯片也装得进去。主要想用在我DIY的智能家居里。
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2014-12-12
在线时间
4 小时
发表于 2015-1-7 17:26:33 | 显示全部楼层
如果接收了也加上那两句会不会有影响呢?
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2015-3-18
在线时间
25 小时
发表于 2015-3-25 22:58:22 | 显示全部楼层
请问楼主,是不是可以设置接收端进入广播模式,发送端进行响应,这样就让这两个设备配对上了?有没有例程?
回复 支持 反对

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
发表于 2015-4-18 22:51:46 | 显示全部楼层
好东西,学习去了
回复 支持 反对

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-6-21
在线时间
2 小时
发表于 2015-8-4 13:27:34 | 显示全部楼层
想问下楼主,为什么我通道使能写0x3f后接收不到数据?
<br>写0x00却能接收到数据?
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>        SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;EN_AA,&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我做的是单对单
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-1 10:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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