OpenEdv-开源电子网

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

nrf24L01通信(M3和M0)

[复制链接]

10

主题

19

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2010-12-14
在线时间
0 小时
发表于 2011-1-20 15:19:43 | 显示全部楼层 |阅读模式
<center>

</center><br />
&nbsp;我用STM32和LPC1114无线通信,STM32下载的是“无线通信实验”源程序。<br />
LPC1114做为发射方,STM32做为接收方,加自动应答和16位CRC校验,可以正常通信。<br />
LPC1114做为接收方,STM32做为发射方,不能通信!后来我把STM32和LPC1114的自动应答和CRC校验取消,STM32显示可以发送出数据,但LPC1114就是接收不到!<br />
没有取消双方的自动应答和CRC校验时,STM32显示发送失败,取消了双方的自动应答和CRC校验后,STM32开始显示发送出去的数据,证明STM32发送是没问题的;<br />
所以我想应该是LPC1114接收不到数据!我的LPC1114和nrf24L01是用杜邦线连接的,连线大约有10CM,不过我想应该和连线没有关系吧,因为它只是SPI读写用的。我一直在监视接收时IRQ,不产生中断!<br />
<br />
请问:问题可能出在哪里?<br />
<br />
谢谢!<br />
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-1-20 18:49:53 | 显示全部楼层
回复【楼主位】richgood518:
<br>-------------------------------
<br>都是用我的代码么?
<br>我觉得你可以参考下我的代码,然后对照下.
<br>应该不会有问题的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

19

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2010-12-14
在线时间
0 小时
 楼主| 发表于 2011-1-21 10:10:36 | 显示全部楼层
回复【2楼】正点原子:
<br>-------------------------------
<br>LPC1114上的程序和你的几乎是一模一样的,当STM32做为接收方,LPC1114做为发送方时,演示效果和你用两个STM32开发板做的无线通信实验室一模一样的。换成STM32发送,LPC1114接收时,就不行了!头大呀!我在想想吧!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-1-21 10:45:42 | 显示全部楼层
试试无ack的条件先.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

19

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2010-12-14
在线时间
0 小时
 楼主| 发表于 2011-1-21 14:14:29 | 显示全部楼层
<p>&nbsp;我的问题搞定了,真是麻烦原子老师了!问题是怎么搞定的呢?说出来真是太可笑了!</p>
<p><br />
STM32的发送频道是40.<br />
我把LPC1114的发送频道写成0x40.<br />
<br />
频道不一样呀!<br />
<br />
真是细节决定成败!调试这个花了3天时间了!多么可惜的时间呀!<br />
</p>
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-1-21 14:15:50 | 显示全部楼层
回复【5楼】richgood518:
<br>-------------------------------
<br>恭喜.
<br>不知道可否把LPC1114的代码上传,给需要的朋友一个参考?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

19

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2010-12-14
在线时间
0 小时
 楼主| 发表于 2011-1-21 14:30:49 | 显示全部楼层
<p><strong><span style="font-size:small;">它哥M3终于和它弟M0通上话了(同父异母的)下面是LPC1114上的代码,都是照抄正点原子的,只是对应M0上的寄存器做了相应的修改!实验成功!放心使用!</span><br />
</strong><br />
const uint8 TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //发送地址<br />
const uint8 RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //发送地址</p>
<p>/*****************************************/<br />
/* 函数功能:SPI通信&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
/* 说明:&nbsp;&nbsp;&nbsp; 发送一个字节,接收一个字节&nbsp; */<br />
/*****************************************/<br />
uint8 SPI1_communication(uint8 TxData)<br />
{&nbsp;&nbsp;<br />
&nbsp;while(((SSP1-&gt;SR)&amp;(1&lt;&lt;4))==(1&lt;&lt;4));//忙时等待,SR状态寄存器bit4 BSY:忙时为1<br />
&nbsp;SSP1-&gt;DR = TxData;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把要发送的数写入TxFIFO<br />
&nbsp;while(((SSP1-&gt;SR)&amp;(1&lt;&lt;2))!=(1&lt;&lt;2));//等待接收完,SR状态寄存器bit2 RNE:接收FIFO非空为1<br />
&nbsp;return(SSP1-&gt;DR);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //返回收到的数据<br />
}<br />
/*****************************************/<br />
/* 函数功能:SPI1初始化&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
/* 说明:&nbsp;&nbsp;&nbsp; 没有用SSEL1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
/*****************************************/<br />
void SPI1_Init(void)<br />
{<br />
&nbsp;uint8 i,Clear=Clear;//Clear=Clear:用这种语句形式解决编译产生的Waring:never used!&nbsp;</p>
<p>&nbsp;SYSCON-&gtRESETCTRL |= (0x1&lt;&lt;2);&nbsp;&nbsp;&nbsp; //禁止SSP1复位<br />
&nbsp;SYSCON-&gt;SYSAHBCLKCTRL |= (0x1&lt;&lt;18);//允许SSP1时钟<br />
&nbsp;SYSCON-&gt;SSP1CLKDIV = 0x06;&nbsp;&nbsp;&nbsp;&nbsp; //6分频:48/6=8Mhz</p>
<p>&nbsp;IOCON-&gtIO2_1 &amp;= ~0x07;<br />
&nbsp;IOCON-&gtIO2_1 |= 0x02;&nbsp;&nbsp;//把PIO2_1选择为SSP CLK <br />
&nbsp;IOCON-&gtIO2_2 &amp;= ~0x07;&nbsp;<br />
&nbsp;IOCON-&gtIO2_2 |= 0x02;&nbsp;&nbsp;//把PIO2_2选择为SSP MISO <br />
&nbsp;IOCON-&gtIO2_3 &amp;= ~0x07;&nbsp;<br />
&nbsp;IOCON-&gtIO2_3 |= 0x02;&nbsp;&nbsp;//把PIO2_3选择为SSP MOSI <br />
&nbsp;// 8位数据传输,SPI模式, CPOL = 0, CPHA = 0,空闲时CLI为1,第一个上升沿采集数据,SCR = 0<br />
&nbsp;SSP1-&gt;CR0 = 0x0107;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;// 预分频值为254(注意:这里最小为2,而且必须为偶数 2~254) <br />
&nbsp;SSP1-&gt;CPSR = 0x02;<br />
&nbsp;SSP1-&gt;CR1 &amp;= ~(1&lt;&lt;0);//LBM=0:正常模式<br />
&nbsp;SSP1-&gt;CR1 &amp;= ~(1&lt;&lt;2);//MS=0:主机模式 <br />
&nbsp;SSP1-&gt;CR1 |=&nbsp; (1&lt;&lt;1);//SSE=1:使能SPI1<br />
&nbsp;//清空RxFIFO,LPC1114收发均有8帧FIFO,每帧可放置4~16位数据<br />
&nbsp;for ( i = 0; i &lt; 8; i++ )<br />
&nbsp;{<br />
&nbsp;&nbsp; &nbsp;Clear = SSP1-&gt;DR;//读数据寄存器DR将清空RxFIFO<br />
&nbsp;} &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
}</p>
<p>/*******************************************/<br />
/* 函数功能;NRF24L01初始化&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
/*******************************************/<br />
void NRF24L01_Init()<br />
{<br />
&nbsp;SPI1_Init();<br />
&nbsp;GPIO0-&gt;DIR |= (1&lt;&lt;3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //P0.3脚为输出,用做CSN<br />
&nbsp;GPIO0-&gt;DATA |= (1&lt;&lt;3);&nbsp;&nbsp;//CSN=1;<br />
&nbsp;GPIO3-&gt;DIR &amp;= ~(1&lt;&lt;4);&nbsp;&nbsp; //NRF24L01_IRQ连接P3.4脚,设置P3.4脚为输入引脚<br />
&nbsp;GPIO3-&gt;DIR |= (1&lt;&lt;5);&nbsp;//NRF24L01_CE连接P3.5脚,设置P3.5脚为输出引脚<br />
&nbsp;GPIO3-&gt;DATA &amp;= ~(1&lt;&lt;5);&nbsp;//CE置低,使能24L01</p>
<p>}</p>
<p>uint8 NRF24L01_Write_Reg(uint8 reg,uint8 value)<br />
{<br />
&nbsp;uint8 status;</p>
<p>&nbsp;GPIO0-&gt;DATA &amp;= ~(1&lt;&lt;3);&nbsp; //CSN=0;&nbsp;&nbsp; <br />
&nbsp; &nbsp;status = SPI1_communication(reg);//发送寄存器值(位置),并读取状态值<br />
&nbsp;SPI1_communication(value);<br />
&nbsp;GPIO0-&gt;DATA |= (1&lt;&lt;3); //CSN=1;</p>
<p>&nbsp;return status;<br />
}</p>
<p>uint8 NRF24L01_Read_Reg(uint8 reg)<br />
{<br />
&nbsp;&nbsp;uint8 value;</p>
<p>&nbsp;GPIO0-&gt;DATA &amp;= ~(1&lt;&lt;3);&nbsp; //CSN=0;&nbsp;&nbsp; <br />
&nbsp; &nbsp;SPI1_communication(reg);//发送寄存器值(位置),并读取状态值<br />
&nbsp;value = SPI1_communication(NOP);<br />
&nbsp;GPIO0-&gt;DATA |= (1&lt;&lt;3); //CSN=1;</p>
<p>&nbsp;return value;<br />
}<br />
&nbsp;<br />
uint8 NRF24L01_Read_Buf(uint8 reg,uint8 *pBuf,uint8 len)<br />
{<br />
&nbsp;uint8 status,u8_ctr;<br />
&nbsp;GPIO0-&gt;DATA &amp;= ~(1&lt;&lt;3);//CSN=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;status=SPI1_communication(reg);//发送寄存器值(位置),并读取状态值&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;for(u8_ctr=0;u8_ctr&lt;len;u8_ctr++)pBuf[u8_ctr]=SPI1_communication(0XFF);//读出数据<br />
&nbsp;GPIO0-&gt;DATA |= (1&lt;&lt;3); //CSN=1<br />
&nbsp; &nbsp;return status;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回读到的状态值<br />
}</p>
<p>uint8 NRF24L01_Write_Buf(uint8 reg, uint8 *pBuf, uint8 len)<br />
{<br />
&nbsp;uint8 status,u8_ctr;<br />
&nbsp;GPIO0-&gt;DATA &amp;= ~(1&lt;&lt;3);&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;status = SPI1_communication(reg);//发送寄存器值(位置),并读取状态值<br />
&nbsp; &nbsp;for(u8_ctr=0; u8_ctr&lt;len; u8_ctr++)SPI1_communication(*pBuf++); //写入数据<br />
&nbsp;GPIO0-&gt;DATA |= (1&lt;&lt;3);&nbsp; <br />
&nbsp; &nbsp;return status;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回读到的状态值<br />
}<br />
&nbsp;<br />
uint8 NRF24L01_Check(void)<br />
{<br />
&nbsp;uint8 check_in_buf[5]={0x11,0x22,0x33,0x44,0x55};<br />
&nbsp;uint8 check_out_buf[5]={0x00};</p>
<p>&nbsp;NRF24L01_Write_Buf(WRITE_REG+TX_ADDR, check_in_buf, 5);</p>
<p>&nbsp;NRF24L01_Read_Buf(READ_REG+TX_ADDR, check_out_buf, 5);</p>
<p>&nbsp;if((check_out_buf[0] == 0x11)&amp;&amp;\<br />
&nbsp;&nbsp;&nbsp; (check_out_buf[1] == 0x22)&amp;&amp;\<br />
&nbsp;&nbsp;&nbsp; (check_out_buf[2] == 0x33)&amp;&amp;\<br />
&nbsp;&nbsp;&nbsp; (check_out_buf[3] == 0x44)&amp;&amp;\<br />
&nbsp;&nbsp;&nbsp; (check_out_buf[4] == 0x55))return 0;<br />
&nbsp;else return 1;<br />
}</p>
<p>void NRF24L01_RX_Mode(void)<br />
{</p>
<p>&nbsp;GPIO3-&gt;DATA &amp;= ~(1&lt;&lt;5);&nbsp;//CE拉低,使能24L01配置<br />
&nbsp;<br />
&nbsp;NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0, (uint8*)RX_ADDRESS, RX_ADR_WIDTH);//写RX接收地址<br />
&nbsp;&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);&nbsp;&nbsp;&nbsp; //开启通道0自动应答&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//通道0接收允许&nbsp; &nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置RF工作通道频率 &nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度<br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式<br />
&nbsp;NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 <br />
&nbsp;GPIO3-&gt;DATA |=&nbsp; (1&lt;&lt;5);&nbsp;//CE置高,使能接收</p>
<p>}</p>
<p>void NRF24L01_TX_Mode(void)<br />
{<br />
&nbsp;GPIO3-&gt;DATA &amp;= ~(1&lt;&lt;5);&nbsp;//CE拉低,使能24L01配置&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(uint8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址 <br />
&nbsp; &nbsp;NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(uint8*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK&nbsp;&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp; //使能通道0的自动应答&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次<br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置RF通道为40<br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);&nbsp; //设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp; <br />
&nbsp; &nbsp;NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);&nbsp;&nbsp;&nbsp; //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断<br />
&nbsp;GPIO3-&gt;DATA |=&nbsp; (1&lt;&lt;5);&nbsp;//CE置高,使能发送<br />
}<br />
//接收数据<br />
uint8 NRF24L01_RxPacket(uint8 *rxbuf)<br />
{<br />
&nbsp;uint8 state;</p>
<p>&nbsp;state=NRF24L01_Read_Reg(STATUS);&nbsp; //读取状态寄存器的值&nbsp;&nbsp;&nbsp; &nbsp; <br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG+STATUS,state); //清除TX_DS或MAX_RT中断标志<br />
&nbsp;if(state&amp;RX_OK)//接收到数据<br />
&nbsp;{<br />
&nbsp;&nbsp;NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据<br />
&nbsp;&nbsp;NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 <br />
&nbsp;&nbsp;return 0; <br />
&nbsp;}&nbsp;&nbsp;&nbsp; <br />
&nbsp;return 1;//没收到任何数据<br />
}<br />
//发送数据<br />
uint8 NRF24L01_TxPacket(uint8 *txbuf)<br />
{<br />
&nbsp;uint8 state;<br />
&nbsp;&nbsp; <br />
&nbsp;GPIO3-&gt;DATA &amp;= ~(1&lt;&lt;5);&nbsp;//CE拉低,使能24L01配置<br />
&nbsp; &nbsp;NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF&nbsp; 32个字节<br />
&nbsp;&nbsp;GPIO3-&gt;DATA |=&nbsp; (1&lt;&lt;5);&nbsp;//CE置高,使能发送&nbsp;&nbsp;&nbsp; <br />
&nbsp;while((GPIO3-&gt;DATA&amp;(1&lt;&lt;4))==(1&lt;&lt;4));//等待发送完成<br />
&nbsp;state=NRF24L01_Read_Reg(STATUS);&nbsp; //读取状态寄存器的值&nbsp;&nbsp;&nbsp; <br />
&nbsp;NRF24L01_Write_Reg(WRITE_REG+STATUS,state); //清除TX_DS或MAX_RT中断标志<br />
&nbsp;if(state&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(state&amp;TX_OK)//发送完成<br />
&nbsp;{<br />
&nbsp;&nbsp;return TX_OK;<br />
&nbsp;}<br />
&nbsp;return 0xff;//其他原因发送失败<br />
}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;</p>
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-1-21 14:39:06 | 显示全部楼层
多谢共享.
回复 支持 反对

使用道具 举报

26

主题

279

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2010-12-15
在线时间
0 小时
发表于 2011-2-23 22:31:00 | 显示全部楼层
顶。工程师不是一般的辛苦。再接再厉
STM32芯片---上海银洋电子021-53086303
欢迎来电15900733302??采购找张经理
回复 支持 反对

使用道具 举报

6

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2011-2-12
在线时间
36 小时
发表于 2011-2-26 09:00:05 | 显示全部楼层
这是个好贴,顶起来
回复 支持 反对

使用道具 举报

10

主题

19

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2010-12-14
在线时间
0 小时
 楼主| 发表于 2011-4-20 12:37:41 | 显示全部楼层
这么好的帖子!顶!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2011-5-18
在线时间
3 小时
发表于 2011-5-18 11:19:12 | 显示全部楼层
<p>和我遇到的问题一样,呵呵</p>
回复 支持 反对

使用道具 举报

26

主题

279

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2010-12-15
在线时间
0 小时
发表于 2011-5-20 11:15:28 | 显示全部楼层
ERROR
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2010-12-17
在线时间
0 小时
发表于 2011-5-20 16:45:44 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2011-6-1
在线时间
0 小时
发表于 2011-6-1 16:08:27 | 显示全部楼层
回复【5楼】richgood518:
<br>---------------------------------
<br>啊能把你的程序发给我一份啊,我最近也调试了好几天了,感觉时间白白流逝了,我的邮箱782861417@qq.com,我用的是LPC1114,太感谢了
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2011-6-1
在线时间
0 小时
发表于 2011-6-1 16:12:30 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>请问原子老师还有无线通信的代码吗?最好是LPC1114的,我最近调试了好几天都没反应
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-6-1 16:26:29 | 显示全部楼层
这个移植一下就好了.
<br>我没弄过1114的.
<br>不过提醒你注意一下SPI的电平,CPHA,CPOL之类的,这两个设置错了,NRF24L01就不鸟你的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

6

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2011-6-3
在线时间
3 小时
发表于 2011-6-3 17:09:44 | 显示全部楼层
回复【7楼】richgood518:
<br>---------------------------------
<br>能否把您的完整程序借用下,谢谢了,我的邮箱是:lvxjian@yahoo.com.cn
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2012-6-12
在线时间
20 小时
发表于 2012-6-12 15:53:03 | 显示全部楼层
回复【17楼】正点原子:
<br>
<br>---------------------------------
<br>呵呵!高手就是高手!一下就说到重点.
<br>用LPC1114驱动24L01要注意两点:
<br>1、按照nRF24L01芯片手册,"The&nbsp;content&nbsp;of&nbsp;the&nbsp;STATUS&nbsp;register&nbsp;is&nbsp;always&nbsp;read&nbsp;to&nbsp;MISO&nbsp;after&nbsp;a&nbsp;high&nbsp;to&nbsp;low&nbsp;transition&nbsp;on&nbsp;CSN",也就是说,在CSN信号由高变低时,nRF24L01模块要返回Status寄存器的值。因此,在操作nRF24L01模块时,不能直接使用SSP0的SSEL0信号,因为SSEL0在发送每个字节都有一个由高到低的跳变。
<br>
<br>2、必须使用一个IO引脚作为输出,从而控制CSN信号。这里还有一个需要注意的问题,就是例子程序里,读写一字节SPI数据时,等待发送缓冲区是否为空的判断,即:while&nbsp;((SSP0SR&0x01)==0);,当这样使用时,会造成CSN信号在发送完第1字节的命令后,立即变高,也就是第2字节的数据尚未读取回来的时候,CSN信号已经发生了跳变。这里,需要改为等待SSP0忙信号,即:while((SSP0SR&0x10)!=0);
<br>
<br>&nbsp;
<br>
<br>如上两点加以注意,使用LPC1114驱动nRF24L01模块没有任何问题。
<br>
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-6-12 16:02:26 | 显示全部楼层
楼上高手.
回复 支持 反对

使用道具 举报

5

主题

110

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2013-9-16
在线时间
0 小时
发表于 2014-12-25 12:55:18 | 显示全部楼层
主机可以通过切换频率参数来分别和B&nbsp;C节点通讯,方法如下
<br>&nbsp;
<br>第一步-&gt;&nbsp;设置电平SETA=1&nbsp;SETB=1&nbsp;进入参数设置模式
<br>第二步-&gt;&nbsp;0xFF&nbsp;0x56&nbsp;0xAE&nbsp;0x35&nbsp;0xA9&nbsp;0x55&nbsp;0x9F&nbsp;0x00&nbsp;0x03&nbsp;0x07&nbsp;0x2f&nbsp;0xD8
<br>第三步-&gt;&nbsp;等待返回0x24&nbsp;0x24&nbsp;0x24&nbsp;0x07&nbsp;0x2f&nbsp;0xD8&nbsp;后再设置电平SETA=0&nbsp;SETB=0&nbsp;进入正常收发模式
<br>第四步-&gt;&nbsp;输入要传的数据即可将数据传输给B节点
<br>&nbsp;
<br>&nbsp;
<br>第五步-&gt;&nbsp;设置电平SETA=1&nbsp;SETB=1&nbsp;进入参数设置模式
<br>第六步-&gt;&nbsp;0xFF&nbsp;0x56&nbsp;0xAE&nbsp;0x35&nbsp;0xA9&nbsp;0x55&nbsp;0x9F&nbsp;0x00&nbsp;0x03&nbsp;0x07&nbsp;0x33&nbsp;0xC0
<br>第七步-&gt;&nbsp;等待返回0x24&nbsp;0x24&nbsp;0x24&nbsp;0x07&nbsp;0x33&nbsp;0xC0后再设置电平SETA=0&nbsp;SETB=0&nbsp;进入正常收发模式
<br>第八步-&gt;&nbsp;输入要传的数据即可将数据传输给C节点
<br>&nbsp;
<br>更多节点以此类推即可
<br>&nbsp;
<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<br>例如变址多点通讯,
<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<br>&nbsp;
<br>例如
<br>当主机为WLK01L39模块,
<br>主机A本机地址1:0x01,本机地址2:0x01,
<br>从机B本机地址1:0x02&nbsp;,本机地址2:0x01&nbsp;,
<br>从机C本机地址1:0x03,本机地址2:0x01&nbsp;,&nbsp;&nbsp;
<br>主机可以通过切换目标地址参数来分别和B&nbsp;C节点通讯,因为在频率一样的前提下
<br>只有主机的目标地址和从机的本机地址一致时,对应从机才能与其建立通讯,并接收数据方法如下
<br>&nbsp;
<br>第一步-&gt;&nbsp;设置电平SETA=1&nbsp;SETB=1&nbsp;进入参数设置模式
<br>第二步-&gt;&nbsp;0xFF&nbsp;0x56&nbsp;0xAE&nbsp;0x35&nbsp;0xA9&nbsp;0x55&nbsp;0x8E&nbsp;0x00&nbsp;0x01&nbsp;0x02&nbsp;
<br>第三步-&gt;&nbsp;等待返回0x24&nbsp;0x24&nbsp;0x24&nbsp;&nbsp;0x02&nbsp;后再&nbsp;设置电平SETA=0&nbsp;SETB=0&nbsp;进入正常收发模式
<br>第四步-&gt;&nbsp;输入要传的数据即可将数据传输给B节点
<br>&nbsp;
<br>&nbsp;
<br>第五步-&gt;&nbsp;设置电平SETA=1&nbsp;SETB=1&nbsp;进入参数设置模式
<br>第六步-&gt;&nbsp;0xFF&nbsp;0x56&nbsp;0xAE&nbsp;0x35&nbsp;0xA9&nbsp;0x55&nbsp;0x8E&nbsp;0x00&nbsp;0x01&nbsp;0x03
<br>第七步-&gt;&nbsp;等待返回0x24&nbsp;0x24&nbsp;0x24&nbsp;&nbsp;0x03&nbsp;后再设置电平SETA=0&nbsp;SETB=0&nbsp;进入正常收发模式
<br>第八步-&gt;&nbsp;输入要传的数据即可将数据传输给C节点
<br>&nbsp;
<br>更多节点以此类推即可
<br>&nbsp;
<br>###################################################################
<br>多点通讯还有一种最简单的方式,就是点名通讯
<br>###################################################################
<br>1.主机和从机的参数都完全一样
<br>2.都处于正常收发模式
<br>3.当主机A发0x01(该指令可自定义),
<br>&nbsp;&nbsp;当从机B和从机C都收到0x01,
<br>&nbsp;&nbsp;从机B视0x01为上传数据命令,立刻发射要上传数据,然后主机A会收到B上传数据,而从机C视0x01为无效指令,不发送数据
<br>&nbsp;&nbsp;当主机A发0x02(该指令可自定义),
<br>&nbsp;&nbsp;当从机B和从机C都收到0x01,
<br>&nbsp;&nbsp;从机C视0x02为上传数据指令,立刻发射要上传数据,然后主机A会收到C上传数据,而从机B视0x02为无效指令,不发送数据
<br>更多节点以此类推即可
<br>------------------
<br>NRF905&nbsp;RF903&nbsp;CC1100&nbsp;CC2500&nbsp;CC1020&nbsp;NRF2401&nbsp;NRF24L01&nbsp;无线数传芯片/模块性能汇总及应用指南
<br>你好,我们是无线制造供应商,欢迎交流
<br>QQ:35625400&nbsp;&nbsp;&nbsp;&nbsp;MSN:ll88mm88@hotmail.com&nbsp;
<br>HONE:13704018223&nbsp;&nbsp;&nbsp;陈工
RFinchina 团队欢迎无线方面的技术交流 QQ 474882985
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 15:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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