OpenEdv-开源电子网

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

请教大家两个关于NRF2401的两个问题?实在是让人费解

[复制链接]

5

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-9-11
在线时间
38 小时
发表于 2014-4-29 10:26:32 | 显示全部楼层 |阅读模式
<p>
        这是发送机的TX_MODO配置
</p>
<p>
        void NRF24L01_TX_Mode(void)<br />
{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;NRF_CE=0;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址 <br />
&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK&nbsp;&nbsp; <br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp; //使能通道0的自动应答&nbsp;&nbsp;&nbsp; <br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x01); //使能通道0的接收地址&nbsp; <br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次<br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置RF通道为40<br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x0f);&nbsp; //设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp; <br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG,0x0e);&nbsp;&nbsp;&nbsp; //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断<br />
&nbsp;NRF_CE=1;//CE为高,10us后启动发送<br />
}
</p>
<p>
        <br />
</p>
<p>
        &nbsp;&nbsp;
</p>
<p>
        这是发送函数
</p>
<p>
        &nbsp; u8 NRF24L01_TxPacket(u8 *txbuf)<br />
{<br />
&nbsp;u8 sta;&nbsp;&nbsp; <br />
&nbsp;NRF_CE=0;<br />
&nbsp; NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF&nbsp; 32个字节<br />
&nbsp;&nbsp;NRF_CE=1;//启动发送&nbsp;&nbsp;&nbsp; <br />
&nbsp;while(NRF_IRQ!=0);//等待发送完成<br />
&nbsp;sta=NRF24L01_Read_Reg(STATUS);&nbsp; //读取状态寄存器的值<br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,sta); //清除TX_DS或MAX_RT中断标志<br />
&nbsp;if(sta&amp;MAX_TX)//达到最大重发次数<br />
&nbsp;{<br />
&nbsp;&nbsp;NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器 <br />
&nbsp;&nbsp;return MAX_TX; <br />
&nbsp;}<br />
&nbsp;if(sta&amp;TX_OK)//发送完成<br />
&nbsp;{<br />
&nbsp;&nbsp;return TX_OK;<br />
&nbsp;}<br />
&nbsp;return 0xff;//其他原因发送失败<br />
}
</p>
<p>
        <br />
</p>
<p>
        <span style="font-size:16px;">接收板用的是原子哥的战舰开发板。程序也是自带的。</span>
</p>
<p>
        <span style="color:#E53333;font-size:16px;">无论自动重发次数是多少都会出现以下两种情况。</span>
</p>
<p>
        <span style="color:#E53333;font-size:16px;">主机每次上电第一次发送总是收到不到数据,反回的值是达到最大发送次数。</span>
</p>
<p>
        <span style="color:#E53333;font-size:16px;">以后发送的时候就可以成功了,返回的值也是达到最大发送次数</span><span style="font-size:16px;">。</span>
</p>
<p>
        <span style="font-size:16px;">请各位大神帮忙分析下。</span>
</p>
<p>
        <span style="font-size:16px;"><br />
</span>
</p>
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-9-11
在线时间
38 小时
 楼主| 发表于 2014-4-29 10:29:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

5

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2013-9-11
在线时间
38 小时
 楼主| 发表于 2014-4-29 10:54:54 | 显示全部楼层
发送返回状态的问题已经解决了,将发送函数中的
<br>查询延时while(NRF_IRQ!=0);//等待发送完成
<br>改为软件延时Delay10us();可解决返回函数总是达到最大发送次数的问题。
<br>
<br>可是又引发了一个新的问题。上电第一次发送失败,返回值&nbsp;达到最大发送次数;第二次发送失败,返回值0xff&nbsp;,第三次开始就可以正常通信了,返回值0x20
回复 支持 反对

使用道具 举报

8

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
426
金钱
426
注册时间
2015-4-24
在线时间
85 小时
发表于 2015-5-1 15:17:33 | 显示全部楼层
回复【3楼】wfy9041:
<br>------------------------------你好&nbsp;问一下&nbsp;为什么2401检测总是失败&nbsp;谢谢
回复 支持 反对

使用道具 举报

9

主题

80

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2015-4-29
在线时间
17 小时
发表于 2015-12-30 19:16:57 | 显示全部楼层
wfy9041 发表于 2014-4-29 10:54
发送返回状态的问题已经解决了,将发送函数中的
查询延时while(NRF_IRQ!=0);//等待发送完成
改为软件延时De ...

用正点原子的代码跟你遇上同一个问题。。。
不能改成延时10us的
回复 支持 反对

使用道具 举报

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
发表于 2016-11-16 12:37:17 | 显示全部楼层
q1092840790 发表于 2015-12-30 19:16
用正点原子的代码跟你遇上同一个问题。。。
不能改成延时10us的

那这个怎么解决呢?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-30 19:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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