OpenEdv-开源电子网

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

nrf24l01在stm32f103中如何实现一发多收

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-5-19
在线时间
0 小时
发表于 2015-5-19 17:00:52 | 显示全部楼层 |阅读模式
5金钱
希望哪位有心人帮忙解答nrf24l01在stm32f103中如何实现一发多收(由一个nrf24l01相同发送数据给多个nrf24l01)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2015-5-19 22:57:22 | 显示全部楼层
一个设置发送模式,其他都设置为接受模式,就可以实现一发多收
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-5-19
在线时间
0 小时
 楼主| 发表于 2015-5-20 14:51:11 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>有没有程序参考一下
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2015-5-20 23:13:17 | 显示全部楼层
回复【3楼】meteor:
<br>---------------------------------
<br>没有。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

16

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-12-22
在线时间
0 小时
发表于 2015-7-20 10:36:49 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>那原子个,发送端的自动应答不会有影响吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2015-7-20 23:07:25 | 显示全部楼层
回复【5楼】阿雷:
<br>---------------------------------
<br>你可以关闭自动应答。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

16

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-12-22
在线时间
0 小时
发表于 2015-7-29 09:22:57 | 显示全部楼层
每个接收的无线模块设置为不同的频道,发送端要给哪个接收端发送时在主函数更改对应频道就可以,也可以设置为不同的地址
<br>参考文档
<br>http://www.rationmcu.com/elecjc/1592.html?from=singlemessage&isappinstalled=0#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1
回复

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-4-16
在线时间
2 小时
发表于 2015-9-29 17:40:44 | 显示全部楼层
回复【6楼】正点原子:
<br>---------------------------------
<br>如何设置其他通道的收发,我使用0通道可以接收数据,但是用其他通道就接收不到数据,而且发送端也一直显示状态是发送数据。
<br>发射端
<br>const&nbsp;u8&nbsp;TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};&nbsp;
<br>const&nbsp;u8&nbsp;RX_ADDRESS0[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};&nbsp;
<br>const&nbsp;u8&nbsp;RX_ADDRESS1[RX_ADR_WIDTH]={'1',0x43,0x10,0x10,0x01};
<br>const&nbsp;u8&nbsp;RX_ADDRESS2[RX_ADR_WIDTH]={'2',0x43,0x10,0x10,0x01};
<br>const&nbsp;u8&nbsp;RX_ADDRESS3[RX_ADR_WIDTH]={'3',0x43,0x10,0x10,0x01};
<br>const&nbsp;u8&nbsp;RX_ADDRESS4[RX_ADR_WIDTH]={'4',0x43,0x10,0x10,0x01};
<br>const&nbsp;u8&nbsp;RX_ADDRESS5[RX_ADR_WIDTH]={'5',0x43,0x10,0x10,0x01};
<br>void&nbsp;NRF24L01_TX_Mode(void)
<br>{                                                                                                                &nbsp;
<br>        NRF24L01_CE=0;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);
<br>        NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS0,RX_ADR_WIDTH);&nbsp;
<br>        NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);//这一步有没有必要,是不是直接使能通道
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的接收地址就可以了
<br>
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x02);&nbsp;&nbsp;&nbsp;//使能通道1的应答模式;如果将0x02设置为0x03&nbsp;,使能通道0、1的应答模式
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x02);//&nbsp;使能通道1的接收地址;如果将0x02设置为0x03&nbsp;,使能通道0、1的接收地址。
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+SETUP_RETR,0x1a);
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,50);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x0f);&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG,0x0e);&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;        NRF24L01_CE=1;
<br>}
<br>
<br>
<br>接收端
<br>const&nbsp;u8&nbsp;TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};&nbsp;
<br>const&nbsp;u8&nbsp;RX_ADDRESS0[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};&nbsp;
<br>const&nbsp;u8&nbsp;RX_ADDRESS1[RX_ADR_WIDTH]={'1',0x43,0x10,0x10,0x01};
<br>const&nbsp;u8&nbsp;RX_ADDRESS2[RX_ADR_WIDTH]={'2',0x43,0x10,0x10,0x01};
<br>const&nbsp;u8&nbsp;RX_ADDRESS3[RX_ADR_WIDTH]={'3',0x43,0x10,0x10,0x01};
<br>const&nbsp;u8&nbsp;RX_ADDRESS4[RX_ADR_WIDTH]={'4',0x43,0x10,0x10,0x01};
<br>const&nbsp;u8&nbsp;RX_ADDRESS5[RX_ADR_WIDTH]={'5',0x43,0x10,0x10,0x01};
<br>void&nbsp;NRF24L01_RX_Mode(void)
<br>{
<br>        &nbsp;&nbsp;NRF24L01_CE=0;       
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);
<br>&nbsp;&nbsp;        &nbsp;&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS0,RX_ADR_WIDTH);
<br>        &nbsp;&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);
<br>        &nbsp;&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P2,(u8*)RX_ADDRESS2,RX_ADR_WIDTH);
<br>&nbsp;&nbsp;        &nbsp;&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P3,(u8*)RX_ADDRESS3,RX_ADR_WIDTH);
<br>        &nbsp;&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P4,(u8*)RX_ADDRESS4,RX_ADR_WIDTH);
<br>        &nbsp;&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P5,(u8*)RX_ADDRESS5,RX_ADR_WIDTH);
<br>       
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x3f);&nbsp;&nbsp;&nbsp;&nbsp;
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x3f);
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,50);        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       
<br>
<br>&nbsp;&nbsp;
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P0,RX_PLOAD_WIDTH);
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P1,RX_PLOAD_WIDTH);
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P2,RX_PLOAD_WIDTH);
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P3,RX_PLOAD_WIDTH);
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P4,RX_PLOAD_WIDTH);
<br>                NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P5,RX_PLOAD_WIDTH);
<br>
<br>
<br>       
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x0f);
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG,&nbsp;0x0f);&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_CE&nbsp;=&nbsp;1;
<br>}                                                &nbsp;
<br>
<br>有许多问题
<br>1.为什么在发送函数中使用通道0(0x01),接收端就可以接收数据,而使用通道1(0x02)却不可以?
<br>2.当将使能通道的应答模式和使能通道的接收地址中的0x02设置0x03,接收端又可以接收数据,其实应该还是通道0接收的数据
<br>3.当接收端接收不到数据时,为什么发送端接收到应答,显示发送数据而不是发送失败,
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2015-9-29 21:24:10 | 显示全部楼层
回复【8楼】时光……记忆:
<br>---------------------------------
<br>慢慢查资料.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-9-29 23:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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