OpenEdv-开源电子网

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

关于nrf24l01 收发模式切换问题,大家都进来看看啊,棘手的不得了

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2013-9-20
在线时间
0 小时
发表于 2013-9-20 21:42:14 | 显示全部楼层 |阅读模式
<span style="font-size:18px;">我</span><span style="font-size:18px;">最近在做一个</span><span style="font-size:18px;line-height:27px;">近距离</span><span style="font-size:medium;">监控装置 用nrf24l01 模块 &nbsp;一个2.4G模块需要在接受和发送消息之间相互切换。</span><br />
<span style="font-size:medium;">我的遇到的问题是 当我从接收模式<span style="line-height:27px;color:#e53333;">RX_Mode()</span>切换到发送模式<span style="line-height:27px;color:#e53333;">TX_Mode()<span style="color:#000000;">后,程序一直停在这个函数</span></span><span style="line-height:27px;color:#e53333;">NRF24L01_TxPacket(tmp_buf)</span>里面,主要是停在<span style="line-height:27px;color:#e53333;">while(NRF24L01_IRQ!=0)//等待发送完成</span>这个函数里面<br />
而我直接使用发送模式就没有这个问题,有人碰到过这样的问题吗??我用的是正点原子的代码<br />
这个是NRF24L01_TxPacket()函数<br />
<div><span style="font-size:14px;">u8 NRF24L01_TxPacket(u8 *txbuf)</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">{</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">u8 sta;</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">SPIx_SetSpeed(SPI_BaudRatePrescaler_8);</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">Clr_NRF24L01_CE;</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">NRF24L01_Write_Buf(NRF24L01_WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">Set_NRF24L01_CE;</span><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;"> &nbsp;&nbsp;</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">while(NRF24L01_IRQ!=0); &nbsp; &nbsp; &nbsp; &nbsp;//<span style="background-color:#ffffff;color:#e53333;font-size:24px;">程序就停在这里了!!!!</span></span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">sta=NRF24L01_Read_Reg(STATUS); &nbsp;</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">NRF24L01_Write_Reg(NRF24L01_WRITE_REG+STATUS,sta);&nbsp;</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">if(sta&amp;MAX_TX)</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">                </span><span style="font-size:14px;">{</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">                </span><span style="font-size:14px;">NRF24L01_Write_Reg(NRF24L01_FLUSH_TX,0xff);</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">                </span><span style="font-size:14px;">return MAX_TX;&nbsp;</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">                </span><span style="font-size:14px;">}</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">if(sta&amp;TX_OK)</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">                </span><span style="font-size:14px;">{</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">                </span><span style="font-size:14px;">return TX_OK;</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">                </span><span style="font-size:14px;">}</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">return 0xff;</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;font-size:14px;">        </span><span style="font-size:14px;">}</span></div>
</span>
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-11-16
在线时间
0 小时
发表于 2016-11-16 17:12:36 | 显示全部楼层
如果开了RX_DR中断,接收到数据后,IRQ引脚会变为低电平。配置为发射模式之前,得让IRQ引脚变为高电平:1. 掉电;2. 清空RX FIFO;3. 清除STATUS寄存器内的中断标志。

NRF24L01_Write_Reg(WRITE_nRF_REG + CONFIG, 0x00);        /* 掉电 */
NRF24L01_Write_Reg(FLUSH_RX,0xFF);        /* 清空RX FIFO */
status = NRF24L01_Read_Reg(NRFRegSTATUS);        /* 读取状态寄存器的值 */
NRF24L01_Write_Reg(WRITE_nRF_REG+NRFRegSTATUS, status);        /* 清除中断标志 */

执行以上代码后,IRQ会变为高电平,然后再配置为发射模式。
回复 支持 1 反对 0

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2013-9-20
在线时间
0 小时
 楼主| 发表于 2013-9-20 21:47:16 | 显示全部楼层
自己做沙发~~~~
回复 支持 反对

使用道具 举报

13

主题

63

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
326
金钱
326
注册时间
2013-3-15
在线时间
6 小时
发表于 2013-9-21 00:35:32 | 显示全部楼层
帮顶
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-9-21 21:42:19 | 显示全部楼层
我们的例程是要检测ACK的,开启自动ACK,请问你这个切换到TX以后,另外一个板子会同时切换到RX么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2013-9-20
在线时间
0 小时
 楼主| 发表于 2013-9-21 23:12:26 | 显示全部楼层
回复【4楼】正点原子:
<br>---------------------------
<br>不能立即切换&nbsp;另一块板子是51的,我让它在发和收之间切换。
<br>我如果关掉ACK自动检测&nbsp;会有什么问题呢?
回复 支持 反对

使用道具 举报

13

主题

63

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
326
金钱
326
注册时间
2013-3-15
在线时间
6 小时
发表于 2013-9-22 10:32:23 | 显示全部楼层
我用51控制NRF24L01固定发送,STM32可以切换发送和接收;当STM32从发送复位切换到接收后,就收不到。必须重新上电选择接收才可以
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-9-22 20:19:46 | 显示全部楼层
回复【5楼】季宇峰:
<br>---------------------------------
<br>关了ACK,就得自己加协议确保数据可靠传输。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2016-10-17
在线时间
26 小时
发表于 2016-10-22 20:57:13 | 显示全部楼层
楼主我来挖坟了,我遇到了和你一样的问题,请问你解决了吗
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2016-10-17
在线时间
26 小时
发表于 2016-10-22 20:58:20 | 显示全部楼层
。。。。。。。。。。
回复 支持 反对

使用道具 举报

11

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2015-10-9
在线时间
24 小时
发表于 2017-5-20 10:18:37 | 显示全部楼层
前尘逐梦 发表于 2016-11-16 17:12
**** 作者被禁止或删除 内容自动屏蔽 ****

发送模式切换为接受呢?  需要怎么修改
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 03:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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