OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7780|回复: 11

NRF2401的通信,怎么接收不到数据

[复制链接]

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-5-3
在线时间
1 小时
发表于 2015-5-4 21:14:58 | 显示全部楼层 |阅读模式
5金钱
<div   style="background-color:#E8E8E8;">
[mw_shl_code=c,true]  while(1)
   {
           numm();
       if(num==1)
           {
                   Delay(10); //去抖
                if(num==1)
                   {
                           TxBuf[0] =1 ;
                    tf = 1 ;
                        }
                 while(num==0);
                 Delay(10);
                 while(num==0);
           }
           if (tf==1)
       {       
                        nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data
                        TxBuf[0] = 0x00;
                    GPIO_ResetBits(GPIOB, GPIO_Pin_5);
                        //TxBuf[2] = 0x00;
                        tf=0;
                        Delay(1000);
           }
          //  GPIO_SetBits(GPIOB, GPIO_Pin_5);
//***********************************************************************************************
                SetRX_Mode();
                nRF24L01_RxPacket(RxBuf);
                   if(RxBuf[0])
                {       
            GPIO_ResetBits(GPIOB, GPIO_Pin_5);                       
                        if(        RxBuf[0]==1)
                        {                
                                //GPIO_SetBits(GPIOB, GPIO_Pin_5);
                                GPIO_ResetBits(GPIOB, GPIO_Pin_5);       
                        }
                       
                        Delay(100);
                }
       
                RxBuf[0] = 0x00;
                //RxBuf[2] = 0x00;
   }
/****************************************************************************************************
//函数:void SetRX_Mode(void)
//功能:数据接收配置
****************************************************************************************************/
void SetRX_Mode(void)
{
        MODE_CE(0);
        SPI_RW_Reg(WRITE_REG1 + CONFIG, 0x0f);                   // IRQ收发完成中断响应,16位CRC        ,主接收
        MODE_CE(1);
        Delay1(130);
}
/***********************************************************************************************************
//函数:void nRF24L01_TxPacket(unsigned char * tx_buf)
//功能:发送 tx_buf中数据
**********************************************************************************************************/
void nRF24L01_TxPacket(unsigned char * tx_buf)
{
        MODE_CE(0);                                //StandBy I模式       
        SPI_Write_Buf(WRITE_REG1 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  
        //SPI_Write_Buf(WRITE_REG1 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
        SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);                          // 装载数据       
        //SPI_RW_Reg(WRITE_REG1 + CONFIG, 0x0e);                    // IRQ收发完成中断响应,16位CRC,主发送
        SPI_RW_Reg(WRITE_REG1 + CONFIG, 0x0e);
        MODE_CE(1);                         //置高CE,激发数据发送
        Delay1(10);
}
/******************************************************************************************************
//函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
//功能:数据读取后放如rx_buf接收缓冲区中
******************************************************************************************************/
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
{
    unsigned char revale=0;
        u8 status;
        //sta=SPI_Read(STATUS);        // 读取状态寄存其来判断数据接收状况
        status=SPI_Read(READ_REG1+STATUS);                        // 读取状态寄存其来判断数据接收状况       
       
        if(status &amp; 0x40)                                // 判断是否接收到数据
        {
            MODE_CE(0);                                //SPI使能
                //SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
                SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);  //从接收缓冲区里读出数据
            
                //rx_buf[1]=1;
                revale =1;                        //读取数据完成标志
        }
        //SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
        SPI_RW_Reg(WRITE_REG1+STATUS, status);             //清除07寄存器标志
        return revale;
}
[/mw_shl_code]
</div>
<br />

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2015-5-4 23:26:45 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-5-3
在线时间
1 小时
 楼主| 发表于 2015-5-15 16:14:12 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>我调出来发送时STATUS=0x2e,FIFO=0x11,发送成功,但接收是STATUS=0x0e.是怎么回事
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-5-3
在线时间
1 小时
 楼主| 发表于 2015-5-15 16:14:46 | 显示全部楼层
回复【3楼】201232010335:
<br>---------------------------------
<br>是什么地方出问题了
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-5-3
在线时间
1 小时
 楼主| 发表于 2015-5-15 18:32:02 | 显示全部楼层
回复【4楼】201232010335:
<br>---------------------------------
<br>接收部分;
<br>unsigned&nbsp;char&nbsp;nRF24L01_RxPacket(unsigned&nbsp;char*&nbsp;rx_buf)
<br>{
<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;revale=0;
<br>        u8&nbsp;status;
<br>        status=SPI_Read(READ_REG1+STATUS);                        //&nbsp;读取状态寄存其来判断数据接收状况
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//status读出的值老是0x0e,发送部分没有问题。&nbsp;&nbsp;
<br>        if(status&nbsp;&&nbsp;0x40)                                //&nbsp;判断是否接收到数据
<br>        {
<br>        &nbsp;&nbsp;&nbsp;&nbsp;MODE_CE(0);                                //SPI使能
<br>        &nbsp;&nbsp;&nbsp;SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);&nbsp;&nbsp;//从接收缓冲区里读出数据        &nbsp;&nbsp;&nbsp;&nbsp;
<br>        &nbsp;&nbsp;&nbsp;revale&nbsp;=1;                        //读取数据完成标志
<br>        }
<br>        SPI_RW_Reg(WRITE_REG1+STATUS,&nbsp;status);        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除07寄存器标志
<br>        return&nbsp;revale;
<br>}
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-5-3
在线时间
1 小时
 楼主| 发表于 2015-5-15 18:43:32 | 显示全部楼层
回复【5楼】201232010335:
<br>---------------------------------
<br>且SPI2-&gt;DR=0x0F;
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-5-3
在线时间
1 小时
 楼主| 发表于 2015-5-15 23:37:23 | 显示全部楼层
回复【6楼】201232010335:
<br>---------------------------------
<br>接收数据前STATUS=0X0E,接收数据后STATUS=0X0F;是怎么回事为什么不是STATUS=0X40
回复

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2013-12-3
在线时间
27 小时
发表于 2016-9-25 17:07:16 | 显示全部楼层
201232010335 发表于 2015-5-15 23:37
回复【6楼】201232010335:
---------------------------------
接收数据前STATUS=0X0E,接收数据后STATUS=0X ...

我也是遇到发射能够检测到状态寄存器的值是0x2e,接收模式就一直是0x0e
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2017-4-3
在线时间
116 小时
发表于 2017-7-1 21:25:19 | 显示全部楼层
请问解决的了么,我跟你情况一样
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2017-4-3
在线时间
116 小时
发表于 2017-7-2 10:13:50 | 显示全部楼层
临海观雪 发表于 2016-9-25 17:07
我也是遇到发射能够检测到状态寄存器的值是0x2e,接收模式就一直是0x0e

请问解决了么
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-8-20
在线时间
0 小时
发表于 2019-8-28 15:26:59 | 显示全部楼层

请问解决了吗
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2017-4-3
在线时间
116 小时
发表于 2019-9-23 14:52:01 | 显示全部楼层

忘记了,很久以前的项目了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-11 00:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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