OpenEdv-开源电子网

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

NRF24l01无线模块通信问题

[复制链接]

44

主题

260

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2012-3-8
在线时间
29 小时
发表于 2012-12-18 21:25:53 | 显示全部楼层 |阅读模式
两个模块,一个发送一个接收,修改原子哥的代码经测试单片机与模块SPI通信没有问题,但无法通信<br />
<div>uchar NRF24L01_TxPacket(uchar *txbuf)</div>
<div>{</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>uchar sta; &nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>CE=0;</div>
<div>&nbsp; <span class="Apple-tab-span" style="white-space:pre;">        </span>SPI_W_DBuffer(W_TX_PLOAD,txbuf,TX_DATA_WITDH);//写数据到TX BUF &nbsp;32个字节</div>
<div>&nbsp;<span class="Apple-tab-span" style="white-space:pre;">        </span>CE=1;//启动发送<span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp;&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>while(IRQ!=0);//等待发送完成</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>sta=SPI_R_byte(STATUS); &nbsp;//读取状态寄存器的值<span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp;&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI_W_Reg(W_REGISTER+STATUS,sta); //清除TX_DS或MAX_RT中断标志</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>if(sta&amp;0x10)//达到最大重发次数</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>SPI_W_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>return 2;&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>if(sta&amp;0x20)//发送完成</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>return 1;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>return 3;//其他原因发送失败</div>
<div>}<br />
这个函数的返回值是2,就是达到最大重发次数,这说明发送成功了没?</div>
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-12-18 22:58:17 | 显示全部楼层
说明发送失败。
<br>你的测试平台是?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

44

主题

260

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2012-3-8
在线时间
29 小时
 楼主| 发表于 2012-12-19 12:01:13 | 显示全部楼层
测试平台是两块51,去掉自动应答和重发,通信成功了一次,现在又不行了,发送端提示发送成功买但接收端没反应
回复 支持 反对

使用道具 举报

44

主题

260

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2012-3-8
在线时间
29 小时
 楼主| 发表于 2012-12-19 12:01:42 | 显示全部楼层
发送:
<br>while(1)
<br>        {
<br>                for(i=0;i&lt;TX_DATA_WITDH-1;i++)//发送7次数据
<br>                {
<br>                        if(NRF24L01_TxPacket(&TX_Buffer)==1)//发送数据
<br>                        {
<br>                                P3=0x55;
<br>                                _delay_ms(500);
<br>                        }
<br>                        else&nbsp;
<br>                        {
<br>                                P3=0x0f;
<br>                                _delay_ms(500);
<br>                        }                       
<br>                }
<br>        }
<br>3电平是0x55,说明发送成功&gt;
回复 支持 反对

使用道具 举报

44

主题

260

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2012-3-8
在线时间
29 小时
 楼主| 发表于 2012-12-19 12:02:59 | 显示全部楼层
接收:
<br>while(1)
<br>        {       
<br>                nRF24L01_Set_RX_Mode();
<br>&nbsp;&nbsp;                if(NRF24L01_RxPacket(RX_Buffer))
<br>                {
<br>                        comm(RX_Buffer[0]);
<br>                        _delay_ms(1000);
<br>                }
<br>                else&nbsp;
<br>                {
<br>                        comm(SPI_R_byte(0));
<br>                        _delay_ms(1000);
<br>                }                &nbsp;&nbsp;&nbsp;
<br>        }
<br>一直串口打印0x0f,就是读出寄存器0的值,和写入的相同,通信成功应该答应0xfe,就是发送的数据,原子哥帮忙看看
回复 支持 反对

使用道具 举报

44

主题

260

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2012-3-8
在线时间
29 小时
 楼主| 发表于 2012-12-19 12:21:56 | 显示全部楼层
搞定了,原来是接收代码有个局部变量和全局变量名字相同,可能导致RX标志位错误,KEIL连个警号都没有,自己改代码粗心了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 18:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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