NRF24L01问题!数据发不出去。求解答。
NRF24L01检测是否存在,成功了。但是发不出数据。。测试是IRQ引脚没有反应。
代码如下:
mian.c代码:
SysInit();//ϵͳ³õʼ»¯º¯Êý
UsartInit();//´®¿Ú³õʼ»¯º¯Êý
LCD_init(); //LCD5110³õʼ»¯º¯Êý
SPI_init(); //SPI×ÜÏߵijõʼ»¯
LCD_clear();
//³õʼ½çÃæ
LCD_write_string(0,0,"Please Wait...");//5110½çÃæ
SendString("Hello!"); //´®¿Ú´òÓ¡Êý¾Ý
SendString("\r\n");
SendString("This is NRF24L01 Test..");
SendString("\r\n");
SendString("xiaoxiao110");
SendString("\r\n");
SendString("2014-07-09");
SendString("\r\n");
SendString("\r\n");
SendString("\r\n");
Delay50ms(20);
while(1)//¼ì²âNRF24L01ÊÇ·ñÔÚÏß
{
if(NRF24L01_Check())//ûÓмì²âµ½NRF24L01 É豸
{
LCD_write_string(0,0,"NRF24L01 Check Failed!");//ÔÚ5110ÏÔʾÔÚÏß½á¹û
SendString("NRF24L01 Check Failed...");//´®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("\r\n");
SendString("\r\n");
Delay50ms(50);
}
else//ÕÒµ½NRF24L01 É豸
{
LCD_clear();
LCD_write_string(0,0,"NRF24L01 Check Success...");//ÔÚ5110ÏÔʾÔÚÏß½á¹û
LCD_write_string(0,27,"NRF24L01 is OK!");
SendString("NRF24L01 Check Success...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("\r\n");
SendString("\r\n");
Delay50ms(50);
break;
}
}
TX_Mode();//ÉèÖÃNRF24L01Ϊ·¢ËÍģʽ
LCD_clear();
LCD_write_string(0,0,"Please Wait...");
LCD_write_string(0,18,"NRF24L01 in Sending Data...");
SendString("Please Wait...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("NRF24L01 in Sending Data...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("2014-07-09");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("\r\n");
Delay50ms(50);
Delay50ms(50);
TX_Mode();
while(1)
{
TX_Mode();
if(NRF24L01_TxPacket(NRF_SendBuf) == TX_OK)
{
LCD_clear();
LCD_write_string(0,0,"NRF24L01 Send Success...");//ÔÚ5110ÏÔʾÔÚÏß½á¹û
SendString("NRF24L01 Send Success...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("2014-07-09");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("\r\n");
Delay50ms(20);
Delay50ms(20);
}
else
{
LCD_clear();
LCD_write_string(0,0,"NRF24L01 Send Failed...");//ÔÚ5110ÏÔʾÔÚÏß½á¹û
SendString("NRF24L01 Send Failed...");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("2014-07-09");//Óô®¿Ú½«½á¹û´òÓ¡³öÀ´
SendString("\r\n");
SendString("\r\n");
Delay50ms(20);
Delay50ms(20);
}
子函数代码:
void TX_Mode(void)
{
// unsigned char temp;
CE=0;
SPI_Write_Buf(SPI_WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01
SPI_Write_Buf(SPI_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
SPI_Write_Buf(WR_TX_PLOAD, NRF_SendBuf, TX_PLOAD_WIDTH); // Writes data to TX payload
SPI_RW_Reg(SPI_WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
SPI_RW_Reg(SPI_WRITE_REG + EN_RXADDR, 0x01);// Enable Pipe0
SPI_RW_Reg(SPI_WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
SPI_RW_Reg(SPI_WRITE_REG + RF_CH, 40); // Select RF channel 40
SPI_RW_Reg(SPI_WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
SPI_RW_Reg(SPI_WRITE_REG + CONFIG, 0x0e);
// temp = SPI_RW_Reg(SPI_WRITE_REG + CONFIG, 0x0e); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
// SendChar(temp);
// SendString("\r\n"); //²âÊÔʹÓÃ
CE=1;
}
unsigned char NRF24L01_TxPacket(unsigned char *txbuf)
{
unsigned char state;
unsigned int timeout = 0;
CE=0;
SPI_Write_Buf(SPI_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
SPI_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//дÊý¾Ýµ½TX BUF32¸ö×Ö½Ú
// SPI_RW_Reg(SPI_WRITE_REG + CONFIG, 0x0e);
CE=1; //Æô¶¯·¢ËÍ
while(IRQ != 0) //µÈ´ý·¢ËÍÍê³É
{
;
// timeout++;
// if(timeout >9000)
// break;
}
state = SPI_Read(STATUS); //¶Áȡ״̬¼Ä´æÆ÷µÄÖµ
SendChar(state);
SendString("\r\n");
SPI_RW_Reg(SPI_WRITE_REG+STATUS,state); //Çå³ýTX_DS»òMAX_RTÖжϱêÖ¾
if(state&MAX_TX) //´ïµ½×î´óÖØ·¢´ÎÊý
{
SPI_RW_Reg(FLUSH_TX,0xff); //Çå³ýTX FIFO¼Ä´æÆ÷
return MAX_TX;
}
if(state&TX_OK) //·¢ËÍÍê³É
{
return TX_OK;
}
return 0xff; //ÆäËûÔÒò·¢ËÍʧ°Ü
}
发现复制代码有点累。我直接把文件上传,希望懂的大神给我看一下,顺便给我指正。
我用的单片机为STC11L04E
用5110和串口来调试。 我不知道是什么地方出现问题了。但是网上大多数的代码都是这样。。 开启了自动应答了吧!?把自动应答关了试试? 登云钓月 发表于 2014-7-9 17:55
开启了自动应答了吧!?把自动应答关了试试?
是直接屏蔽那条自动应答的不?
我试过了,还是没有效果啊;。 两个嘴巴笑110 发表于 2014-7-9 17:59
是直接屏蔽那条自动应答的不?
我试过了,还是没有效果啊;。
楼主用51的话切换到发送模式后稍微延时下,在发送数据 当初我调这个也不容易,多看。你可以先找一个可用的进行移植。 天行者 发表于 2014-7-9 19:27
当初我调这个也不容易,多看。你可以先找一个可用的进行移植。
主要是没有可以直接用的啊?你这边有你以前自己测试有用的不?有的话,可以给我一下不,小弟在此感谢你哈。
邮箱:xiaomf2012@qq.com 当是我是用51的一个小板子调的。你没有这个板子,可能要在陶宝上买一下。
天行者 发表于 2014-7-9 20:42
当是我是用51的一个小板子调的。你没有这个板子,可能要在陶宝上买一下。
...
我用的就是51的板子,但是是我自己做的,所以没有现成的测试代码、。。搞的我很头疼啊 我发给你了,你看一下吧。
天行者 发表于 2014-7-10 10:23
我发给你了,你看一下吧。
没有啊。你是用邮箱发的么? 没成功,我再发一下吧。 登云钓月 发表于 2014-7-9 17:55
开启了自动应答了吧!?把自动应答关了试试?
自动应答开启没有问题的,我的就开着呢。 代码看起来一团乱,没法看。 发了,你查一下。 煮酒fu 发表于 2014-7-10 11:11
代码看起来一团乱,没法看。
不是很乱吧。。你可以直接下载来看看吧。直接看程序应该会好一点哈。。。麻烦你帮我看一下哈 两个嘴巴笑110 发表于 2014-7-10 11:18
不是很乱吧。。你可以直接下载来看看吧。直接看程序应该会好一点哈。。。麻烦你帮我看一下哈 ...
no,我现在调试代码都调试的头疼,就不帮你看了。哈,别生气哟。 煮酒fu 发表于 2014-7-10 11:26
no,我现在调试代码都调试的头疼,就不帮你看了。哈,别生气哟。
好吧。。 两个嘴巴笑110 发表于 2014-7-10 11:42
好吧。。
你看我发表的帖子吧。里面有我调通的代码。 煮酒fu 发表于 2014-7-10 11:44
你看我发表的帖子吧。里面有我调通的代码。
好的,谢谢哈。兄弟。 两个嘴巴笑110 发表于 2014-7-10 13:54
好的,谢谢哈。兄弟。
你是妹子不? 我不记得是哪一年前调过51版本和AVR版本的2401,应该还能找到代码,是一主多从的。 确认你这个nRF2401在发送时,有对应好的nRF2401准备好接收了。
没有准备接收的nRF2401,你这个是发不出去的。 第不要同一个
两个嘴巴笑110 发表于 2014-7-10 10:16
我用的就是51的板子,但是是我自己做的,所以没有现成的测试代码、。。搞的我很头疼啊 ...
现成的程序要理解才是属于你的东西,下载的最简单的需要修改配置初始化之类的才能用
页:
[1]