NRF24L01的多对一通信

末鹿安然 提交于 2019-11-30 02:49:31

一、一对一通信
要弄懂NRF的多对一通信,我们先要清楚NRF的一对一通信的地址设置,为了解说通俗我们将NRF24L01之间的通信比作两个人写信交流:首先寄信方将信件寄给收信方,收信方收到信件之后回信给寄信方确认收到信件。(以上为NRF24L01一次通信的过程,即发送端T发送信息给接收端R的流程)要完成双方的信件互通,那么双方都要知道对方的地址。这对应着NRF24L01作为发送端T时要设置1、发送地址:TX_ADDR。2、应答信号地址:RX_ADDR_P0(通道0用来接收接收端R的应达信号)。而接收端R要设置接收地址:RX_ADDR_Px(x取值为0到5,一个NRF24L01有6个通道,每一个通道都能设置作为接收信号的通道)
以上三个地址都要设置为相同的值。因为A发送信息给B,B把A的发送地址作为目标地址发回一个应答信号ACK,所以发送地址=应答信号地址=接收地址。注意:只有发送端的通道0才能接收应答信号。

二、多对一通信
多对一通信是指多个NRF24L01无线传输模块对一个NRF24L01无线传输模块进行数据传输,NRF24L01之所以能够进行多对一通信是因为:一个NRF24L01具有6个通道,每一个通道都能够接收信息。
对于接收端R:我们将NRF24L01接收端R的6个数据通道的地址设置为不同的值,注意: 接收端通道0 RP0和接收端通道1 RP1的地址能随意设置,但是Rp2,Rp3,Rp4,Rp5的地址前地址前四个字节要和Rp1一致,只有最后一个字节能随意取值。
对于其他的6个发送端T1,T2,T3,T4,T5,T6,我们只需将他们的发送地址设置为对应的接收端的6个通道地址,当然6个发送端的应答信号地址即发送端通道0的地址要和自身的发送地址一致。
接收端 接收模式对应代码

void NRF24L01_RX_Mode(void)
{
    NRF24L01_CE=0;  
    /*将六个通道的地址写进NRF*/  
    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS0,RX_ADR_WIDTH);
    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);
    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P2,(u8*)RX_ADDRESS2,RX_ADR_WIDTH);
    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P3,(u8*)RX_ADDRESS3,RX_ADR_WIDTH);
    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P4,(u8*)RX_ADDRESS4,RX_ADR_WIDTH);
    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P5,(u8*)RX_ADDRESS5,RX_ADR_WIDTH);

    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);  
    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);
    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P2,RX_PLOAD_WIDTH);
    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P3,RX_PLOAD_WIDTH);
    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P4,RX_PLOAD_WIDTH);
    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P5,RX_PLOAD_WIDTH);

  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x3f);    
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x3f);  
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);             

  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);  
  NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);
  NRF24L01_CE = 1;
}                        
发送端
**发送端X 发送模式设置函数**

void NRF24L01_TX_Mode(void)
{
NRF24L01_CE=0;
NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)RX_ADDRESSX,TX_ADR_WIDTH); //设置发送地址 对应接收端的通道X地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESSX,RX_ADR_WIDTH);//设置应答信号接收地址 与自身发送地址一致

NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);
NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);
NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e);
NRF24L01_CE=1;
}

“`

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!