天线|RF射频
直播中

王颖

7年用户 170经验值
私信 关注
[问答]

NRF24L01接收不了数据是怎么回事?

我把Mini的程序移植到了C8T6,但一直显示无法成功通信。看了下论坛的帖子,把发送端的程序改成了如下语句  
     SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);           //失能通道0自动应答
     SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00);    //失能接收通道0
     SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);      //失能自动重发
显示发送端可以成功发送数据,说明发送端没问题。但是接送端也同样按照那个帖子改成
      SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);           //失能通道0自动应答
      SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);    //接收要使能接收通道0
却没有办法接收数据,但是检测确是通过的。瞅了半天也不知道是哪里出了问题,求助大佬们这是怎么回事?

回帖(3)

仇春灵

2020-6-10 16:40:05
我们例程, 你试试 不改驱动,改接口代码即可。
举报

王文

2020-6-10 16:49:10
代码如下
[C] 纯文本查看 复制代码
#include "24l01.h"#include "spi.h"const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //发送地址const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//SPI写寄存器//reg:指定寄存器地址//value:写入的值u8 NRF24L01_Write_Reg(u8 reg,u8 value){        u8 status;                   NRF24L01_CSN=0;                 //使能SPI传输          status =SPI1_ReadWriteByte(reg);//发送寄存器号           SPI1_ReadWriteByte(value);      //写入寄存器的值          NRF24L01_CSN=1;                 //禁止SPI传输                     return(status);                               //返回状态值}//读取SPI寄存器值//reg:要读的寄存器u8 NRF24L01_Read_Reg(u8 reg){        u8 reg_val;                     NRF24L01_CSN = 0;          //使能SPI传输                          SPI1_ReadWriteByte(reg);   //发送寄存器号          reg_val=SPI1_ReadWriteByte(0XFF);//读取寄存器内容          NRF24L01_CSN = 1;          //禁止SPI传输                              return(reg_val);           //返回状态值}        //在指定位置读出指定长度的数据//reg:寄存器(位置)//*pBuf:数据指针//len:数据长度//返回值,此次读到的状态寄存器值 u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len){        u8 status,u8_ctr;                         NRF24L01_CSN = 0;           //使能SPI传输          status=SPI1_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值                       for(u8_ctr=0;u8_ctr

杨玲

2020-6-10 17:03:29
咦就好了!谢谢原子哥了,顺便再问问现在收发可以正常进行了,但是时不时就会出现丢包的情况,还有就是会有个一两秒的延迟,这个情况有办法改善吗
举报

更多回帖

发帖
×
20
完善资料,
赚取积分