|
最近做2.4G快崩溃了、、、、、、、、、~~~~(>_<)~~~~
单片机+一块24L01做接收机,3块24LE1做发射机,也就是3对1。
接收分别用的通道0、1、2, 现在通道0和1可以进行数据通讯 ,通道2怎么也调不通,期间有几次调通了,但是时间一长或者重新上电一下 就再也连接不上了, 再后来像走狗屎运一样 又连接上了 、但是重上电一下又、、、、、、、、
程序是 借鉴论坛里的 在此基础上修改的 ,手册和程序都看了 N+1遍了 、现在彻底没信心了 ,这个已经搞了很久了 一直 就卡在多通道收发这个地方 、小弟不才,望大虾们指点一二 、 、 、、
i看坛子里 说有调通 多通道的,但是 大都是 2对1 ,好像多发一收的真没有 、 、
接收部分程序:
/*************************************************************************/
//接收模式
void nRF24L01_SetRXMode()
{
uchar revale=0,RX_P_NO=0;//接收通道号;
CE=0;
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS0, RX_ADR_WIDTH); // 接收设备接收通道0使用和发送设备相同的发送地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, RX_ADDRESS1, RX_ADR_WIDTH); // 接收设备接收通道1使用和发送设备相同的发送地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P2, RX_ADDRESS2, RX_ADR_WIDTH); // 接收设备接收通道2使用和发送设备相同的发送地址
SPI_RW_Reg(WRITE_REG + RX_PW_P0,RX_PLOAD_WIDTH); // 接收通道0选择和发送通道相同有效数据宽度
SPI_RW_Reg(WRITE_REG + RX_PW_P1,RX_PLOAD_WIDTH); // 接收通道1选择和发送通道相同有效数据宽度
SPI_RW_Reg(WRITE_REG + RX_PW_P2,RX_PLOAD_WIDTH); // 接收通道2选择和发送通道相同有效数据宽度
CE=1;
}
/******************************************************************************************************/
/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
/*功能:数据读取后放如rx_buf接收缓冲区中
/******************************************************************************************************/
uchar nRF24L01_RxPacket()
{
uchar revale=0,RX_P_NO=0;//接收通道号;
sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况
if(RX_DR) // 判断是否接收到数据
{
RX_P_NO=sta&0x0e; //获取通道号
CE = 0; //SPI使能
switch(RX_P_NO) //判断是哪一个通道传过来的数据
{
case 0x00:SPI_Read_Buf(RD_RX_PLOAD,RX_Buf0,RX_PLOAD_WIDTH);break; //判断通道0
case 0x02:SPI_Read_Buf(RD_RX_PLOAD,RX_Buf1,RX_PLOAD_WIDTH);break; //判断通道1
case 0x04:SPI_Read_Buf(RD_RX_PLOAD,RX_Buf2,RX_PLOAD_WIDTH);break; //判断通道2
default:break;
}
revale =1; //读取数据完成标志
//T_data=RX_Buf0[2]*100+RX_Buf0[1]*10+RX_Buf0[0];
//if(RX_P_NO==0x00)LcdWriteAsc8_16_dan(6,72,0,shuzi_tab816[1]);
//if(RX_P_NO==0x02)LcdWriteAsc8_16_dan(6,80,0,shuzi_tab816[2]);
//if(RX_P_NO==0x04)LcdWriteAsc8_16_dan(6,89,0,shuzi_tab816[3]);
SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
Rf24l01_Flush_RX(); //清空无线接收缓冲区
CE = 1;
}
return revale;
} |
|