天线|RF射频
直播中

李泽坚

7年用户 1318经验值
私信 关注
[问答]

请问NRF24L01怎么不能连续接收数据?

tica, Tahoma, Arial, sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">问题:如果将SetRX_Mode(),放在while循环之外  只能接收一个数据, 且就是在上电那一刻。  求同行帮忙分析一下,

/***************主程序******************/

void main(void)

{

unsigned char tf =0;

unsigned char TxBuf[32]="WangChengJunWangChengJunWangChen";         //

unsigned char RxBuf[32]={0};

UART_init();

    init_NRF24L01();

//SetTX_Mode();         

while(1)

{  

SetRX_Mode();   //如果将次语句放在while循环之外就不能连续接收数据,只会在上电接收一次数据           

//        nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data

Delay(6000);

led = ~led;

if(nRF24L01_RxPacket(RxBuf))

{

  RxBuf[31] ='';

  rintf(RxBuf);            // 串口发送数据

  BufSet(RxBuf,32,0);           //清除缓存区

}

   }

}



/*****************************************************************************************************/

void SetRX_Mode(void)

{

CE=0;

SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);  //选择通道0的有效数据宽度

SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);            // IRQ收发完成中断响应,16位CRC        ,主接收

CE = 1;

inerDelay_us(130);

}

/****************************************************************************************************/

/*函数:void SetTX_Mode(void)

/*功能:数据发送配置

/****************************************************************************************************/

void SetTX_Mode(void)

{

CE=0;

SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址

SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次  

    SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断

CE = 1;

inerDelay_us(130);

}

//****************************************************************************************

/*NRF24L01初始化

//***************************************************************************************/

void init_NRF24L01(void)

{

    inerDelay_us(100);

    CE=0;//待机模式Ⅰ (写寄存器之前一定要进入待机模式或掉电模式)

    CSN=1;

    SCK=0;

    IRQ=1;         

  

SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH);   // 写接收端地址

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);                               //  频道0自动        ACK应答允许

SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);                           //  允许接收地址只有频道0,如果需要多频道可以参考Page21

SPI_RW_Reg(WRITE_REG + RF_CH,40);                                  //   设置信道工作为2.4GHZ,收发必须一致

SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);                               //设置发射速率为1MHZ,发射功率为最大值0dB



CE = 1;

}

/******************************************************************************************************/

/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)

/*功能:数据读取后放如rx_buf接收缓冲区中

/******************************************************************************************************/

unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)

{

    unsigned char revale=0;

sta=SPI_Read(STATUS);        // 读取状态寄存其来判断数据接收状况

SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志

if(RX_DR)         // 判断是否接收到数据

{

    CE = 0;          //SPI使能

SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer

SPI_RW_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器

revale =1;         //读取数据完成标志

}

return revale;

}

/***********************************************************************************************************

/*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)

/*功能:发送 tx_buf中数据

/**********************************************************************************************************/

void nRF24L01_TxPacket(unsigned char * tx_buf)

{

CE=0;         //StandBy I模式

SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);           // 装载数据

CE=1;          //置高CE,激发数据发送

while(IRQ!=0);//等待发送完成

sta=SPI_Read(STATUS);  //读取状态寄存器的值           

SPI_RW_Reg(WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志



inerDelay_us(10);

}



/*****************************************END FILE***************************************************/

回帖(4)

刘世晓

2020-5-13 08:56:25

恩恩,我手头上只有一个mini开发板,这个代码是跑在51单片机上的。  问题我现在已经解决了,在接收函数里将CE = 0;去掉就可以了!
举报

张锐

2020-5-13 09:12:46
请参考我们的开发板例子
举报

李浯

2020-5-13 09:27:30
这个还是软件的问题,
举报

杜云

2020-5-13 09:39:07
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

更多回帖

发帖
×
20
完善资料,
赚取积分