OpenEdv-开源电子网

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

无线模块24L01资料

[复制链接]

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
发表于 2013-5-11 17:32:33 | 显示全部楼层 |阅读模式
原子忘了将一句话,我来补充:无线模块内部有寄存器地址,读取寄存器的时候,地址就是手册的地址。写寄存器的时候,地址第6位要或1也就是(地址值或0x20)原子的程序写的很清晰,我没接触过这模块,也没看手册,现在明白了。我说AAAAA和1AAAAA是怎么回事呢。<br />
http://www.openedv.com/posts/list/6363.htm<br />
http://www.openedv.com/posts/list/6369.htm<br />
http://www.openedv.com/posts/list/6391.htm

NRF24L01+程序.rar

10.58 MB, 下载次数: 26862

KEIL4中文完美版.zip

32.14 MB, 下载次数: 5264

QQ750273008有好的资料记得发给我哦。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2013-5-11 17:33:40 | 显示全部楼层
keil是51版本的。这个无线模块文件是原子的

无线模块.zip

3.1 MB, 下载次数: 2223

QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2013-5-11 20:26:44 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2013-5-13 12:15:10 | 显示全部楼层
无线模块的地址从0x00开始往后排,大部分寄存器8位。(76543210)用spi方式读取。比如读取0x00寄存器:先spi写寄存器地址0x00,后写0xff(0xff对无线模块是空命令,利用的是sck时钟的电平跳变读出0x00地址的数据)如果要写寄存器,地址的二进制的第6位要为1(无线为了区分读地址还是写地址)0010&nbsp;0000是0x20这就是为何原子的程序(设置无线寄存器地址要加上0x20的原因)
<br>例如:无线模块24L01寄存器0x05,是设置nRF24L01的工作频率(bit7不用,bit6~0工作频率值)。就要写(0x05加0x20等于0x25)后设置(例:NRF24L01_Write_Reg((0x05+0x20),0x7f)//工作频率设置0111&nbsp;1111
<br>基础很重要,当时没看手册,光看原子的程序,看得很纠结,看了手册后,就很快明白程序为何这样写了。
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2013-5-13 16:01:08 | 显示全部楼层
<div>const u8 &nbsp;ip[6]={'0','F','U','C','K',0x00};//发射地址 &nbsp;那个0x00用于LCD函数结束显示</div>
<div>const u8 ip0[6]={'0','F','U','C','K',0x00};//接收地址0 我调了2天</div>
<div>const u8 ip1[6]={'1','F','U','C','K',0x00};//接收地址1 才发现低位在前,高位在后。</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//(低位优先,写的时候低位写到高位,读的时候低位先被读出)</div>
<div>const u8 ip2[6]={'2','F','U','C','K',0x00};//接收地址2 地址char5,char4,char3,char2,char1.</div>
<div>const u8 ip3[6]={'3','F','U','C','K',0x00};//接收地址3<span class="Apple-tab-span" style="white-space:pre;">        </span>通道2345只能设置char1</div>
<div>const u8 ip4[6]={'4','F','U','C','K',0x00};//接收地址4<span class="Apple-tab-span" style="white-space:pre;">        </span>写的时候顺序是char1,char2,char3,char4,char5</div>
<div>const u8 ip5[6]={'5','F','U','C','K',0x00};//接收地址5<span class="Apple-tab-span" style="white-space:pre;">        <br />
<br />
<div>void RX_Mode(void)//接收</div>
<div>{</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_CE=0; <span class="Apple-tab-span">        </span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //设置24L01+关闭,用于修改无线配置<span class="Apple-tab-span">        </span></div>
<div>&nbsp; &nbsp; NRF24L01_Write_Reg(0x20+0x00,0x0f);//配置接收模式的基本参数WR_UP,EN_CRC,16BIT_CRC,</div>
<div>&nbsp; &nbsp; NRF24L01_Write_Reg(0x20+0x01,0x3f);//应答设置0x3f代表543210应答</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Read_Buf(0x01,careg,1); &nbsp; //该函数检查无线寄存器0x01的内容</div>
<div>&nbsp; &nbsp; NRF24L01_Write_Reg(0x20+0x02,0x3f);//接收通道使能0x3f代表543210通道接收</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x05,50); &nbsp;//设置RF通信频率2.4G+设置值Mhz。范围0x00到0x7f</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x06,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启 &nbsp;</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x06,0xa7);//24L01+模块设置TX发射参数,0db增益,250kbps,低噪声增益开启</div>
<div><br />
</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0X20+0X0a,(u8*)ip0,5);//写RX0接收地址</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Read_Buf(0x0a,caip0,5);<span class="Apple-tab-span">        </span> //查地址确定已写入</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0X20+0X0b,(u8*)ip1,5);//写RX1接收地址</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Read_Buf(0x0b,caip1,5);</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0X20+0X0c,(u8*)ip2,1);//写RX2接收地址(只写1次,原因高位都被锁了)</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Read_Buf(0x0c,caip2,5);</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0X20+0X0d,(u8*)ip3,1);//写RX3接收地址&nbsp;</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Read_Buf(0x0d,caip3,5);</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0X20+0X0e,(u8*)ip4,1);//写RX4接收地址</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Read_Buf(0x0e,caip4,5);</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0X20+0X0f,(u8*)ip5,1);//写RX5接收地址</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Read_Buf(0x0f,caip5,5);</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0X20+0X10,(u8*)ip1,5);//写TX的地址</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Read_Buf(0x10,caout,5);</div>
<div><br />
</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x11,32);//选择通道0的有效数据宽度32字节&nbsp;</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x12,32);//选择通道1的有效数据宽度32字节&nbsp;</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x13,32);//选择通道2的有效数据宽度32字节&nbsp;</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x14,32);//选择通道3的有效数据宽度32字节&nbsp;</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x15,32);//选择通道4的有效数据宽度32字节&nbsp;</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x16,32);//选择通道5的有效数据宽度32字节&nbsp;</div>
<div><br />
</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_CE = 1; //CE为高,进入接收模式</div>
<div><br />
</div>
<div><br />
</div>
<div>}<span class="Apple-tab-span">                                                </span>&nbsp;</div>
<div><br />
</div>
<div>//该函数初始化NRF24L01到TX模式</div>
<div>//设置TX地址,写TX数据宽度,设置RX自动应答的地址,填充TX发送数据,选择RF频道,波特率和LNA HCURR</div>
<div>//PWR_UP,CRC使能</div>
<div>//当CE变高后,即进入RX模式,并可以接收数据了<span class="Apple-tab-span">                </span> &nbsp;&nbsp;</div>
<div>//CE为高大于10us,则启动发送.<span class="Apple-tab-span">        </span>&nbsp;</div>
<div>void TX_Mode(void)//发射</div>
<div>{<span class="Apple-tab-span">                                                                                                                </span>&nbsp;</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_CE=0;//无线待机<span class="Apple-tab-span">        </span> &nbsp; &nbsp;</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0x20+0x10,(u8*)ip,5);//写TX节点地址&nbsp;</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Buf(0x20+0x0a,(u8*)ip0,5); //设置TX节点地址,主要为了使能ACK<span class="Apple-tab-span">        </span> &nbsp;</div>
<div><br />
</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x01,0x3f); &nbsp; &nbsp; //使能通道543210的自动应答 &nbsp; &nbsp;</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x02,0x3f); &nbsp; &nbsp; //使能通道543210的接收地址 &nbsp;</div>
<div><br />
</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x04,0xff);//设置自动重发间隔时间:4000us + 86us;最大自动重发次数:15次</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x05,50); &nbsp; &nbsp; &nbsp; //设置RF通道。最大为(111 1111)Mhz +2.4Ghz</div>
<div>&nbsp; <span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x06,0x0f); &nbsp;//设置TX发射参数,0db增益,2Mbps,低噪声增益开启 &nbsp;&nbsp;</div>
<div>//<span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x06,0xa7);//24L01+模块设置TX发射参数,0db增益,250kbps,低噪声增益开启</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_Write_Reg(0x20+0x00,0x0e); &nbsp; &nbsp;//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断</div>
<div><span class="Apple-tab-span">        </span>NRF24L01_CE=1;//CE为高,10us后启动发送</div>
<div>}<span class="Apple-tab-span">                </span> &nbsp;</div>
<div><br />
</div>
<br />
</span></div>
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2013-5-13 16:31:32 | 显示全部楼层
回复【3楼】正点原子:<br />
---------------------------------<br />
发射地址const&nbsp;u8&nbsp;TX_ADDRESS&nbsp;&nbsp;[TX_ADR_WIDTH]={<span style="color:#ffffff;background-color:#e53333;">0x00,0xc2,0xc2,0xc2,0xc2</span>};&nbsp;//发送地址(地址要和接收通道地址一致)<br />
<br />
接收地址const&nbsp;u8&nbsp;RX_ADDRESS0[RX_ADR_WIDTH]={<span style="color:#ffffff;background-color:#e53333;">0x00,0xc2,0xc2,0xc2,0xc2</span>};&nbsp;//接收0通道地址(地址随便改,但必须和发射地址一致)<br />
<br />
const&nbsp;u8&nbsp;RX_ADDRESS1[RX_ADR_WIDTH]={<span style="color:#ffffff;background-color:#e53333;">0x01</span><span style="background-color:#e53333;">,</span><span style="color:#ffffff;background-color:#000000;">0xc2,0xc2,0xc2,0xc2</span>};&nbsp;//接收1通道地址<span style="background-color:#ffe500;">0xc2是被锁死的,只能改0x01</span> <br />
const&nbsp;u8&nbsp;RX_ADDRESS2[RX_ADR_WIDTH]={<span style="color:#ffffff;background-color:#e53333;">0x02</span><span style="background-color:#e53333;">,</span><span style="background-color:#000000;color:#ffffff;">0xc2,0xc2,0xc2,0xc2</span>,};&nbsp;//接收2通道地址 &nbsp; <span style="background-color:#e53333;color:#ffe500;">写的时候是低位先写,所以只要写1次</span>&nbsp;<br />
const&nbsp;u8&nbsp;RX_ADDRESS3[RX_ADR_WIDTH]={<span style="color:#ffffff;background-color:#e53333;">0x03</span><span style="background-color:#e53333;">,</span><span style="color:#ffffff;background-color:#000000;">0xc2,0xc2,0xc2,0xc2</span>,};&nbsp;//接收3通道地址&nbsp;&nbsp;&nbsp;&nbsp;<br />
const&nbsp;u8&nbsp;RX_ADDRESS4[RX_ADR_WIDTH]={<span style="color:#ffffff;background-color:#e53333;">0x04</span><span style="background-color:#e53333;">,</span><span style="background-color:#000000;color:#ffffff;">0xc2,0xc2,0xc2,0xc2</span>,};&nbsp;//接收4通道地址&nbsp;&nbsp;&nbsp;&nbsp;<br />
const&nbsp;u8&nbsp;RX_ADDRESS5[RX_ADR_WIDTH]={<span style="color:#ffffff;background-color:#e53333;">0x05</span><span style="background-color:#e53333;">,</span><span style="background-color:#000000;color:#ffffff;">0xc2,0xc2,0xc2,0xc2</span>};&nbsp;//接收5通道地址<br />
<br />
<b><span style="font-size:24px;">注:<span style="color:#e53333;">红底字</span>的值可以随意改,<span style="color:#ffffff;background-color:#000000;">黑底字<span style="color:#000000;background-color:#ffffff;">&nbsp;的值被锁死了。<br />
要想通讯:条件:1 接收地址和发射地址必须一致<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 无线模块0x05寄存器的值必须一致(发射/接收这2模块)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 无线模块从0x00寄存器往后的(各个bit位的功能)去看下手册<br />
</span></span></span></b><br />
<br />
<br />
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-8-13
在线时间
0 小时
发表于 2013-8-28 22:01:47 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2013-9-2 14:25:32 | 显示全部楼层
24L01和24L01+差不多,写地址的时候要注意,并不是高位写到低位,而是低位先写出,通道2345的高位被锁成和0通道一样,所以2345写地址只能写一次,这个就是写的低位的地址。
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2013-12-15 14:42:43 | 显示全部楼层
楼主正解,很有心!
回复 支持 反对

使用道具 举报

1

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-2-19
在线时间
1 小时
发表于 2013-12-15 22:16:19 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

1

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-2-19
在线时间
1 小时
发表于 2013-12-15 22:16:51 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2013-12-28 10:17:13 | 显示全部楼层
回复【6楼】750273008:
<br>---------------------------------
<br>我想两个模块通信,51接收,stm32发射,
<br>我已经把它都设置成一样的配置了,stm32总是进入:MAX_TX&nbsp;最大重发次数。
<br>我的package是4不是32,两边都改了。
<br>给你看下配置:
<br>51:
<br>unchar&nbsp;code&nbsp;TxAddr[]={0x34,0x43,0x10,0x10,0x01};//发送地址
<br>void&nbsp;NRFSetRXMode()
<br>{
<br>        CE=0;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);&nbsp;&nbsp;//&nbsp;接收设备接收通道0使用和发送设备相同的发送地址
<br>&nbsp;&nbsp;        NRFWriteReg(W_REGISTER+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能接收通道0自动应答
<br>&nbsp;&nbsp;        NRFWriteReg(W_REGISTER+EN_RXADDR,0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能接收通道0
<br>&nbsp;&nbsp;        NRFWriteReg(W_REGISTER+RF_CH,0x40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;选择射频通道0x40
<br>&nbsp;&nbsp;        NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH);&nbsp;&nbsp;//&nbsp;接收通道0选择和发送通道相同有效数据宽度
<br>&nbsp;&nbsp;        NRFWriteReg(W_REGISTER+RF_SETUP,0x07);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;数据传输率1Mbps,发射功率0dBm,低噪声放大器增益*/
<br>&nbsp;&nbsp;        NRFWriteReg(W_REGISTER+CONFIG,0x0f);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;CRC使能,16位CRC校验,上电,接收模式
<br>&nbsp;&nbsp;        CE&nbsp;=&nbsp;1;
<br>        Delay(5);//保持10us秒以上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>}
<br>
<br>
<br>STM32:
<br>const&nbsp;u8&nbsp;TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};&nbsp;//发送地址
<br>const&nbsp;u8&nbsp;RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};&nbsp;//发送地址
<br>void&nbsp;NRF24L01_TX_Mode(void)
<br>{                                                                                                                &nbsp;
<br>        NRF24L01_CE_L;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);&nbsp;//设置TX节点地址,主要为了使能ACK        &nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能通道0的自动应答&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x01);&nbsp;//使能通道0的接收地址&nbsp;&nbsp;
<br>//&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us&nbsp;+&nbsp;86us;最大自动重发次数:10次
<br>&nbsp;&nbsp;        &nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+SETUP_RETR,0x0a);
<br>        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置RF通道为40
<br>//&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x0f);&nbsp;&nbsp;//设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp;&nbsp;
<br>        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x07);
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG,0x0e);&nbsp;&nbsp;&nbsp;&nbsp;//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
<br>        NRF24L01_CE_H;//CE为高,10us后启动发送
<br>}
<br>
<br>
<br>帮忙看下吧,谢了,调了几天没调出来,收发设置函数,与读写都没问题,32和32板子可以正常通信,51和51板子可以正常通信。
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2013-12-29 08:49:03 | 显示全部楼层
回复【12楼】wwjdwy:
<br>---------------------------------
<br>我看了你的程序,我想说的是,你发射机加个10秒的延时试试。(因为发射机发射后必须收到接受机应答,才能确定发射成功。)发射机发射,如果接收机运行慢,又开始下一轮发射,这样发射永远失败。
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2013-12-29 16:00:08 | 显示全部楼层
回复【13楼】750273008:
<br>---------------------------------
<br>哥们实验了还是不行。
<br>int&nbsp;main(void)&nbsp;
<br>{&nbsp;       
<br>        u8&nbsp;tmp_buf[4]={0x31,0x32,0x33,0x34};
<br>//        u8&nbsp;tmp_buf[33];
<br>        u8&nbsp;key,mode;
<br>        u16&nbsp;t=0;
<br>        System_Initialize();
<br>
<br>        if(!NRF24L01_Check())
<br>        {
<br>        &nbsp;&nbsp;&nbsp;printf("NRF24L01_Check&nbsp;OK");
<br>        &nbsp;&nbsp;&nbsp;delay_ms(200);
<br>        &nbsp;&nbsp;&nbsp;NRF24L01_TX_Mode();
<br>        &nbsp;&nbsp;&nbsp;mode='&nbsp;';//从空格键开始&nbsp;&nbsp;
<br>        &nbsp;&nbsp;&nbsp;while(1)
<br>        &nbsp;&nbsp;&nbsp;{        if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
<br>                        {                                        &nbsp;&nbsp;
<br>                                printf("Send&nbsp;Complete");                &nbsp;&nbsp;&nbsp;
<br>                        }else        &nbsp;&nbsp;
<br>                        {                       
<br>                                printf("Send&nbsp;Failed");                &nbsp;&nbsp;&nbsp;
<br>                        };
<br>                        delay_ms(10000);
<br>        &nbsp;&nbsp;&nbsp;}
<br>        }
<br>        else
<br>        &nbsp;&nbsp;&nbsp;printf("NRF24L01_Check&nbsp;Failed");
<br>       
<br>}
<br>
<br>这是main函数。
<br>
<br>
<br>发送还是原封不动用的战舰板子的:
<br>unsigned&nbsp;char&nbsp;NRF24L01_TxPacket(unsigned&nbsp;char&nbsp;*txbuf)
<br>{
<br>        u8&nbsp;sta;
<br>&nbsp;        SPI2_SetSpeed(SPI_BaudRatePrescaler_8);//spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)&nbsp;&nbsp;&nbsp;
<br>        NRF24L01_CE_L;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX&nbsp;BUF&nbsp;&nbsp;32个字节
<br>&nbsp;        NRF24L01_CE_H;//启动发送        &nbsp;&nbsp;&nbsp;
<br>        while(NRF24L01_IRQ_In!=0);//等待发送完成
<br>        sta=NRF24L01_Read_Reg(STATUS);&nbsp;&nbsp;//读取状态寄存器的值        &nbsp;&nbsp;&nbsp;
<br>        NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,sta);&nbsp;//清除TX_DS或MAX_RT中断标志
<br>        if(sta&MAX_TX)//达到最大重发次数
<br>        {
<br>                NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX&nbsp;FIFO寄存器&nbsp;
<br>                return&nbsp;MAX_TX;&nbsp;
<br>        }
<br>        if(sta&TX_OK)//发送完成
<br>        {
<br>                return&nbsp;TX_OK;
<br>        }
<br>        return&nbsp;0xff;//其他原因发送失败
<br>}
<br>
<br>单步调试发现每次运行结果都是:MAX_TX&nbsp;达到了最大重发次数。
<br>你说的延时我在main中那样写对么
<br>
<br>
<br>另51中的读取数据:
<br>unchar&nbsp;NRFRevDate(unchar&nbsp;*RevDate)
<br>{
<br>&nbsp;&nbsp;&nbsp;        &nbsp;unchar&nbsp;RevFlags=0;
<br>        &nbsp;sta=NRFReadReg(R_REGISTER+STATUS);//发送数据后读取状态寄存器
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(RX_DR)                                //&nbsp;判断是否接收到数据
<br>        &nbsp;{
<br>        &nbsp;&nbsp;&nbsp;&nbsp;CE=0;&nbsp;                        //SPI使能
<br>                NRFReadRxDate(R_RX_PAYLOAD,RevDate,RX_DATA_WITDH);//&nbsp;从RXFIFO读取数据
<br>                RevFlags=1;        &nbsp;&nbsp;&nbsp;//读取数据完成标志
<br>        &nbsp;&nbsp;}
<br>        &nbsp;NRFWriteReg(W_REGISTER+STATUS,0xff);&nbsp;//接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标
<br>        &nbsp;return(RevFlags);
<br>}
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-1-2 10:03:44 | 显示全部楼层
楼主帮忙一起想想办法吧
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2014-1-2 17:13:23 | 显示全部楼层
<table width="100%" style="color:#000000;font-family:Simsun;text-align:start;"><tbody><tr><td align="left" valign="middle"><span class="maintitle"><a href="http://www.openedv.com/posts/list/0/12520.htm" name="top" class="maintitle" id="top" style="font-family:'trebuchet ms', verdana, arial, helvetica, sans-serif;font-size:14px;font-weight:bold;line-height:16px;color:#dd6900;">STM32与51的NRF24L01无线双向通信友情共享</a><span style="font-family:'trebuchet ms, verdana, arial, helvetica, sans-serif';"><span style="font-size:14px;line-height:16px;"><b>&nbsp;</b></span></span><br />
<br />
<br />
<span style="font-family:'trebuchet ms, verdana, arial, helvetica, sans-serif';"><span style="font-size:14px;line-height:16px;"><b><a href="http://www.openedv.com/posts/list/12520.htm" target="_blank">http://www.openedv.com/posts/list/12520.htm</a></b></span></span></span></td>
</tr>
</tbody>
</table>
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2014-1-2 17:13:53 | 显示全部楼层
回复【15楼】wwjdwy:
<br>---------------------------------
<br>给你了
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-1-2 21:56:21 | 显示全部楼层
回复【17楼】750273008:
<br>---------------------------------
<br>对了,51和STM32是用一个keil么?我之前的编译不了51的,只能STM32
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2014-1-2 22:35:39 | 显示全部楼层
回复【18楼】wwjdwy:
<br>
<br>                                                                        回复【17楼】750273008:
<br>---------------------------------
<br>对了,51和STM32是用一个keil么?我之前的编译不了51的,只能STM32
<br>                                                       
<br>---------------------------------
<br>不一样,keil版本不一样的,一个用于51&nbsp;&nbsp;&nbsp;&nbsp;另一个用于arm
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

86

主题

980

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1840
金钱
1840
注册时间
2013-4-15
在线时间
162 小时
发表于 2014-3-31 10:51:35 | 显示全部楼层
回复【6楼】750273008:
<br>---------------------------------
<br>楼主牛逼&nbsp;&nbsp;赞
合肥-文盲
回复 支持 反对

使用道具 举报

13

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2013-11-12
在线时间
29 小时
发表于 2014-8-2 10:48:43 | 显示全部楼层
回复【6楼】750273008:
<br>---------------------------------
<br>楼主大神,多通道的时候txmode写节点地址就只写通道零吗?还有就是主函数发送应该怎么发送啊
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2014-8-9
在线时间
0 小时
发表于 2014-8-9 09:18:47 | 显示全部楼层
回复【2楼】750273008:你好!我是刚接触单片机,现在需要用单片机完成无线传输,我准备用51单片机不知道你那有没有程序啊!能不能让我参考一下啊
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-8-14
在线时间
0 小时
发表于 2014-8-24 15:49:06 | 显示全部楼层
mark&nbsp;&nbsp;好贴。。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

18

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2014-4-18
在线时间
13 小时
发表于 2014-10-11 17:08:04 | 显示全部楼层
回复【6楼】750273008:
<br>---------------------------------
<br>楼主,我想问一下,发射地址必需要和哪个接收地址一致?还有接收通道0地址的0xc2能自己改么?
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2014-10-12 23:41:24 | 显示全部楼层
回复【24楼】lyf:
<br>---------------------------------
<br>0xc2可以改,发射和接收是2台设备,他们地址一样,可以决定是哪2个硬件模块通讯。
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-10-13
在线时间
0 小时
发表于 2014-10-13 15:44:27 | 显示全部楼层
回复【25楼】750273008:
<br>---------------------------------
<br>我看了你发的关于24L01的资料,上面写道模块支持最大32字节数据收发,我是C语言方面的小白,请问怎么才能一次发送32字节的数据呢?我现在能做到的发送最长的数据就是long型了,怎么把多个long型组成一个32字节的包发送出去呢?望大神指点迷津!
回复 支持 反对

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1632
金钱
1632
注册时间
2012-8-28
在线时间
71 小时
 楼主| 发表于 2014-10-14 10:34:11 | 显示全部楼层
回复【26楼】Leighton:
<br>---------------------------------
<br>你这问题有点弱智,写信用A4纸你换A3纸就不会写了?24l01好比一架客机,一次最多运32位乘客。你用数组去接这些乘客吧。
QQ750273008有好的资料记得发给我哦。。。
回复 支持 反对

使用道具 举报

4

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2015-3-17
在线时间
0 小时
发表于 2015-5-3 16:07:20 | 显示全部楼层
回复【6楼】750273008:
<br>---------------------------------
<br>关于那个地址到底高位在前还是低位在前啊,http://www.openedv.com/posts/list/0/6363.htm#293180,这个怎么这样设置
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-6-2
在线时间
0 小时
发表于 2015-6-16 19:42:17 | 显示全部楼层
回复【6楼】750273008:
<br>---------------------------------
<br>条件:1&nbsp;接收地址和发射地址必须一致,这个到底是怎么回事?
<br>const&nbsp;u8&nbsp;RX_ADDRESS1[RX_ADR_WIDTH]={0x01,0xc2,0xc2,0xc2,0xc2};&nbsp;//接收1通道地址&nbsp;&nbsp;和&nbsp;&nbsp;发射地址const&nbsp;u8&nbsp;TX_ADDRESS&nbsp;&nbsp;[TX_ADR_WIDTH]={0x00,0xc2,0xc2,0xc2,0xc2};&nbsp;//发送地址
<br>并不一样啊
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-6-26
在线时间
1 小时
发表于 2015-6-26 21:50:47 | 显示全部楼层
我最近也在用STM32F0调试NRF24L01,但是往任何一个寄存器中发出数据,返回的数据老是0X1C,求大神指教。

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-29 16:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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