野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15130|回复: 5

STM32与51用NRF24L01通讯

[复制链接]
发表于 2014-5-13 19:15:20 | 显示全部楼层 |阅读模式
现在用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要拉高一段时间才进入发送模式
}

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



回复

使用道具 举报

发表于 2014-5-13 19:45:05 | 显示全部楼层
接收的参数,例如通道和地址这些都必须相同的哦。

这个只能慢慢比较代码,然后调试。看看STM32的接收代码和你51的接收代码有啥区别
回复 支持 反对

使用道具 举报

发表于 2014-5-13 22:40:53 | 显示全部楼层
看看你配置NRF里的通道宏是否一致,特别是程序注释里强调的部分
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-14 09:48:45 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-13 19:45
接收的参数,例如通道和地址这些都必须相同的哦。

这个只能慢慢比较代码,然后调试。看看STM32的接收代码 ...

需不需要在STM32发送模式里面加上延时?
回复 支持 反对

使用道具 举报

发表于 2014-5-14 10:43:26 | 显示全部楼层
qq独自 发表于 2014-5-14 09:48
需不需要在STM32发送模式里面加上延时?

就按原来的设置就好了,加了也没有什么区别吧,可以试试
回复 支持 反对

使用道具 举报

发表于 2016-5-7 15:32:47 | 显示全部楼层
先排查硬件  再一个个函数比对软件
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-12 05:01 , Processed in 0.031469 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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