我想让NRF24L01接收到数据后再做后续的事情
于是,我这样写while(!nRF24L01_RxPacket(RxBuf,&rxno));
其中nRF24L01_RxPacket(RxBuf,&rxno)的返回值是1表示接收到数据,0表示没有接收到数据。
但是。。。奇怪的事情是,即便没有任何发送节点,依然会执行后面的语句而不是等在while那里。。。
函数nRF24L01_RxPacket中,rx_buf是接收的数据,rx_no是接收的通道号码
求问有遇到过类似的情况吗?
uchar nRF24L01_RxPacket(uchar* rx_buf,uchar* rx_no)
{
uchar revale=0;
uchar RX_P_NO; //判断哪个通道接收到数据
uchar sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况
if(sta&0x40) // 判断是否接收到数据
{
RX_P_NO = sta&0x0e; //获取通道号
PORT2 &=~BIT(CE); //SPI使能
switch(RX_P_NO)
{
case 0x00: {SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);*rx_no = '0';} break;
case 0x02: {SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);*rx_no = '1';} break;
case 0x04: {SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);*rx_no = '2';} break;
case 0x06: {SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);*rx_no = '3';} break;
case 0x08: {SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);*rx_no = '4';} break;
case 0x0a: {SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);*rx_no = '5';} break;
default:break;
}
//SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
SPI_RW_Reg(FLUSH_RX ,0xff ); //设置接收数据长度
revale =1; //读取数据完成标志
}
SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
return revale;
}
|