天线|RF射频
直播中

赵敏

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

24L01一对一通信只能单向是为什么?

在用24L01通信时,只能实现单向发——收,反过来我把原来发送的改为接收的,接收的改为发送的,发送正常,但这时就接收不到了,不知道怎么回事。就算是把原来接收端的程序放到现在的接收端,也不能接收。怪了!怪了!原子哥能帮忙不?

附接收端程序配置

void RX_Mode()

{

    CE = 0;

SPI_RW_Reg(FLUSH_RX,0xff);////清除RX FIFO寄存器

    SPI_Write_Buf(WRITE_REG + RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//使用与发射端相同的地址

    SPI_RW_Reg(WRITE_REG + EN_AA,0x00); //使能PIPE0的ACK

    SPI_RW_Reg(WRITE_REG + EN_RXADDR,0x01); //使能PIPE0

    SPI_RW_Reg(WRITE_REG + RF_CH,30); //选择RF频率 低7位有效

    SPI_RW_Reg(WRITE_REG + RX_PW_P0,TX_PLOAD_WIDTH);//选择接收数据通道0的有效数据宽度 低5位有效 最大字节长度32

    SPI_RW_Reg(WRITE_REG + RF_SETUP,0x07);//1Mbps速率 0dbm发射功率 低噪声放大器增益

    SPI_RW_Reg(WRITE_REG + CONFIG,0x0f);//CRC使能 16位CRC校验 NRF24L01上电 接收模式

    CE = 1;

    Delay_us(150);

}

主函数这样写的

void main()

{   

    init_RFIO();

UART_init();

RX_Mode();

Delay_us(150);

    while(1)

    {      

  sta=SPI_Read(STATUS);

  UART_byte(sta);

  UART_byte(SPI_Read(FIFO_STATUS));

     if(RX_DR)   

       {

     SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH);

     SPI_RW_Reg(WRITE_REG + STATUS,RX_DR);

     SPI_RW_Reg(FLUSH_RX,0xff);

     LED=0;

     Delay_ms(100);

     LED=1;     

          }

    SPI_RW_Reg(WRITE_REG+STATUS,sta);

    }

}



UART_byte(sta);

UART_byte(SPI_Read(FIFO_STATUS));

这两句话是为调试时加的,发送到串口调试助手,一直接收到0x0e和0X11

回帖(1)

李涛

2020-5-1 15:31:47
参考我们的代码。

要实现双向收发,两者就都应该设置为接收模式,然后发送的时候,才设置为发送模式,发送完成以后,继续进入接收模式。
举报

更多回帖

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