打印

STM32与51用NRF24L01通讯

[复制链接]
279|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小蘭|  楼主 | 2019-11-14 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用mini板的NRF24L01远程控制51,两边都可以检测到NRF模块,但是STM32开启发送模式,发送数据时,51总是无法应答,
51是模拟SPI时序, STM32用的是SPI2。
下面是51的接受设置://****************************************************************************************************/
//*函数:void SetRX_Mode(void)
//*功能:数据接收配置
//****************************************************************************************************/
void RX_Mode(void)
{
    uchar buf[5]={0};
        CE = 0;
        
        SPI_Read_Buf(TX_ADDR, buf, TX_ADR_WIDTH);//debug 测试原来的本地地址:复位值是:0xE7 0xE7 0xE7 0xE7 0xE7
        //SPI_WR_Reg(WRITE_REG + CONFIG, 0x03);//SPI_WR_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC        ,主接收
        
        //SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址        
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
        
        SPI_WR_Reg(WRITE_REG + EN_AA, 0);//0x01);      //  频道0自动        ACK应答允许        
        SPI_WR_Reg(WRITE_REG + EN_RXADDR,0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
        SPI_WR_Reg(WRITE_REG + SETUP_RETR,0x1a); // 设置自动重发时间和次数:500us + 86us, 10 retrans...
        SPI_WR_Reg(WRITE_REG + RF_CH, 40);        //   设置信道工作为2.4GHZ,收发必须一致
        SPI_WR_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
        SPI_WR_Reg(WRITE_REG + RF_SETUP, 0x0F);                   //设置发射速率为2MHZ,发射功率为最大值0dB
        
        SPI_WR_Reg(WRITE_REG + CONFIG, 0x0F);//0x0F);        
        CE = 1;
        Delay_n10us(20); //200us
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
下面是STM32的发送模式:
/**
  * @brief  配置发送模式
  * @param  无
  * @retval 无
  */
void NRF_TX_Mode(void)
{  
        NRF_CE_LOW();               

   SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);    //写TX节点地址

   SPI_NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK   

   SPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01);     //使能通道0的自动应答   

   SPI_NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址  

   SPI_NRF_WriteReg(NRF_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次

   SPI_NRF_WriteReg(NRF_WRITE_REG+RF_CH,CHANAL);       //设置RF通道为CHANAL

   SPI_NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x0f);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
        
   SPI_NRF_WriteReg(NRF_WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,发射模式,开启所有中断

    /*CE拉高,进入发送模式*/        
    NRF_CE_HIGH();
    Delay(0xffff); //CE要拉高一段时间才进入发送模式
}

各位给点建议啊,完全没有头绪啊。。。。。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

463

帖子

1

粉丝