高手留步,还是关于nRF24L01+24LE1
最近做2.4G快崩溃了、、、、、、、、、~~~~(>_<)~~~~单片机+一块24L01做接收机,3块24LE1做发射机,也就是3对1。
接收分别用的通道0、1、2, 现在通道0和1可以进行数据通讯 ,通道2怎么也调不通,期间有几次调通了,但是时间一长或者重新上电一下 就再也连接不上了, 再后来像走狗屎运一样 又连接上了、但是重上电一下又、、、、、、、、
程序是 借鉴论坛里的 在此基础上修改的,手册和程序都看了 N+1遍了 、现在彻底没信心了{:cry:} ,这个已经搞了很久了 一直 就卡在多通道收发这个地方 、小弟不才,望大虾们指点一二{:handshake:}、 、 、、
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*100+RX_Buf0*10+RX_Buf0;
//if(RX_P_NO==0x00)LcdWriteAsc8_16_dan(6,72,0,shuzi_tab816);
//if(RX_P_NO==0x02)LcdWriteAsc8_16_dan(6,80,0,shuzi_tab816);
//if(RX_P_NO==0x04)LcdWriteAsc8_16_dan(6,89,0,shuzi_tab816);
SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
Rf24l01_Flush_RX(); //清空无线接收缓冲区
CE = 1;
}
return revale;
} 友情帮顶 请教您个问题。关于 24L01和 24LE1通信的问题。。
我调了很久 两个也不能通信。我都把手册翻了N遍了 我的 qq290727048 高手看见了请加下我请教一下。谢谢了 刚调完1对1的飘过,被最大发射次数坑了几天,这东东要清中断才肯继续工作。 hl1200 发表于 2013-2-23 15:58 static/image/common/back.gif
刚调完1对1的飘过,被最大发射次数坑了几天,这东东要清中断才肯继续工作。 ...
能发一下程序吗? 592876981@qq.com
页:
[1]