搜索
bottom↓
回复: 19

【求助】NRF24L01+ 调试问题!!!

[复制链接]

出0入0汤圆

发表于 2012-8-1 01:08:14 | 显示全部楼层 |阅读模式
STM32的接收端和发送端必须重新上电后,才能正常接受数据,复位后接收不到数据,这个问题我搜了以前的帖子,说是清FIFO,于是在初始化和每次发送和接受之前都清了FIFO(NRF24L01_Write_Reg(FLUSH_TX, 0xff);), 问题还事没有解决!PS: 接受和发送都用中断EXITLINE2的下降沿触发.....求坛子里前辈们指点....

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-8-1 11:23:58 | 显示全部楼层
自己顶一下,别沉了~~希望遇到该问题并解决的前辈们指点一下啊~~

出0入0汤圆

 楼主| 发表于 2012-8-6 23:23:35 | 显示全部楼层
感谢坛子里朋友的帖子,今天又拿出来弄了弄,问题终于解决,接收端用查询法,每接收一次清FIFO...

出0入8汤圆

发表于 2012-8-6 23:30:33 | 显示全部楼层
不错,把问题如果解决告诉大家。

出0入0汤圆

发表于 2012-9-3 14:27:09 | 显示全部楼层
楼上说的好

出0入0汤圆

发表于 2012-9-3 14:39:06 | 显示全部楼层
接收不到数据,怎么不flush FLUSH_RX ?

出0入0汤圆

发表于 2012-12-18 20:03:13 | 显示全部楼层
tianyuhui 发表于 2012-8-6 23:23
感谢坛子里朋友的帖子,今天又拿出来弄了弄,问题终于解决,接收端用查询法,每接收一次清FIFO... ...

LZ是怎么解决的?能具体分享一下吗?

出0入0汤圆

发表于 2012-12-18 20:03:50 | 显示全部楼层
8795950F 发表于 2012-12-18 20:03
LZ是怎么解决的?能具体分享一下吗?

我最近也在调nRF24l01,也遇到同样的问题

出0入0汤圆

 楼主| 发表于 2012-12-19 12:17:42 | 显示全部楼层
8795950F 发表于 2012-12-18 20:03
我最近也在调nRF24l01,也遇到同样的问题

解决了,主要的四个函数代码:
void NRF24L01_Set_TxMode(void)
{                                                                                                                 
        NRF24L01_CE_L();
       
        /* 写TX节点地址 */            
        NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,    TX_ADDRESS, TX_ADDR_WIDTH);
        /* 写接收端地址 */   
        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0, RX_ADDRESS, RX_ADDR_WIDTH);           
        /* 使能通道0的自动应答 */
        NRF24L01_Write_Reg(WRITE_REG+EN_AA, 0x01);   
        /* 使能通道0的接收地址 */     
        NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR, 0x01);
        /* 设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次 */
        NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR, 0x1a);           //        0x1a
        /* 设置信道工作为2.4GHZ,收发必须一致 */
        NRF24L01_Write_Reg(WRITE_REG+RF_CH, 40);   
        /* 设置TX发射参数,0db增益,1Mbps,低噪声增益开启  */     
        NRF24L01_Write_Reg(WRITE_REG+RF_SETUP, 0x07);  
        /* 配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断 */
        NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0e);  

        NRF24L01_CE_H();   //CE为高,需10us后启动发送  
        Delay_nus(10);
}

void NRF24L01_TxPacket(u8 *tx_buf)
{
        u8 status;         //状态变量
          
        /* 发送一次数据 */       
        NRF24L01_CE_L();
        NRF24L01_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLD_WIDTH); //写数据到TX_BUF
        NRF24L01_CE_H();
        Delay_nus(500);           //延时确保数据发送完成(注意!)

        status = NRF24L01_Read_Reg(STATUS);
        printf("\r\n %d ", status);
        printf("\r\n %d ", NRF24L01_Read_Reg(FIFO_STATUS));
        NRF24L01_Write_Reg(WRITE_REG+STATUS, status);  //清除TX_DS或MAX_RT中断标志
        NRF24L01_Write_Reg(FLUSH_TX, 0xff);            //清除TX_FIFO寄存器


void NRF24L01_Set_RxMode(void)
{               
        NRF24L01_CE_L();

        /* 写RX节点地址 */          
        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0, RX_ADDRESS, RX_ADDR_WIDTH);
        /* 使能通道0的自动应答 */
        NRF24L01_Write_Reg(WRITE_REG+EN_AA, 0x01);   
        /* 使能通道0的接收地址 */      
        NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR, 0x01);  
        /* 设置信道工作为2.4GHZ,收发必须一致 */         
        NRF24L01_Write_Reg(WRITE_REG+RF_CH, 40);             
        /* 选择通道0的有效数据宽度 */                   
        NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0, RX_PLD_WIDTH);
        /* 设置TX发射参数,0db增益,1Mbps,低噪声增益开启 */   
        NRF24L01_Write_Reg(WRITE_REG+RF_SETUP, 0x07);  
        /* 配置基本工作模式的参数;PWR_UP, EN_CRC, 16BIT_CRC, 接收模式 */  
        NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0f);
          
        NRF24L01_CE_H();   //CE为高,进入接收模式
        Delay_nus(130);
}
u8 NRF24L01_RxPacket(void)
{
                u8 status;                            //接收状态变量  
        status = NRF24L01_Read_Reg(STATUS);   //读取状态寄存器的值             
                       
        /* 接收到数据 */
        if(RX_OK == status)
        {
                /* 读取数据 */       
                NRF24L01_Read_Buf(RD_RX_PLOAD, RX_BUF, RX_PLD_WIDTH);
               
                /* 清除STATUS */
                NRF24L01_Write_Reg(WRITE_REG+STATUS, 0xff);                         

                /* 清除RX_FIFO寄存器 */
                NRF24L01_Write_Reg(FLUSH_RX, 0xff);   
                return 1;
        }
        else return 0;  //没收到任何数据       
}

出0入0汤圆

发表于 2012-12-19 13:51:39 | 显示全部楼层
好帖子, 我转到我的帖子收藏了。可以吧?

出0入0汤圆

发表于 2012-12-19 20:49:06 | 显示全部楼层
tianyuhui 发表于 2012-12-19 12:17
解决了,主要的四个函数代码:
void NRF24L01_Set_TxMode(void)
{                                                                                                                 

LZ能把整个程序发给我参考一下吗?没有其他的函数我不太看得明白。谢谢,qq:1067497174

出0入0汤圆

发表于 2012-12-20 13:48:27 | 显示全部楼层
楼主能不能把程序发上来我们看看呀?

出0入0汤圆

发表于 2013-3-27 12:00:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-3-27 13:42:52 | 显示全部楼层
是清除接收缓存!

出0入0汤圆

发表于 2013-6-30 15:52:18 | 显示全部楼层
这帖子顶顶

出0入0汤圆

发表于 2013-7-18 21:40:45 | 显示全部楼层
学习一下。我正在寻找为什么出现这个问题

出0入0汤圆

发表于 2013-8-7 16:47:46 | 显示全部楼层
为什么我的一个发、一个接,在IAR调试时,第一位和最后一位有时会互换位置,最后一位跑到第一位,其他的一次往下移了一位?知道这是什么原因吗???

出0入0汤圆

发表于 2013-8-30 14:40:22 | 显示全部楼层
楼主这句Delay_nus(500);           //延时确保数据发送完成(注意!)换成        while(NRF_Read_IRQ()!=0); 能行吗?我的就这和你不同,然后就不通讯

出0入0汤圆

发表于 2013-8-30 15:17:10 | 显示全部楼层
学习了      

出0入0汤圆

发表于 2013-10-22 15:54:04 | 显示全部楼层
wyq200704 发表于 2013-8-30 14:40
楼主这句Delay_nus(500);           //延时确保数据发送完成(注意!)换成        while(NRF_Read_IRQ()!=0); 能行吗 ...

我现在也遇到这个问题,,你现在解决了么?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 18:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表