野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13359|回复: 4

[ISO-MINI] STM32 NRF2401的最大通讯速率

[复制链接]
发表于 2015-6-25 09:15:01 | 显示全部楼层 |阅读模式
火哥,您好。我在调试NRF2401的时候看到其最大无线传输速率为 2Mbits,然后想做一个实验验证其传输速率。实验中我做的一对一的实验,即选择一个STM32做为发送方,另一个STM32为接收方,然后让发送方循环发送长度为32的u8数据,一次发送5300次,然后用LED反转
的方式来看其速率。但是发现LED反转的时间长达3S,按这个速率来说的话,NRF2401的发送速率只有450Kbps,远远小于2Mbits。然后以为
的SPI的速率问题,然后将NRF初始化的8分频该成了4分频,但LED反转时间其本不变。想请较以下几个问题:
1.NRF2401的发送速率还有可能有哪些影响因素。
2.采用不同的STM32的芯片类型应该没有影响吧?
3.网上看了一下,发现NRF2401还分了好几种版本,有的最大无线传输速率只有 1Mbits。NRF2401+1242AF的最大无线传输速率是为2Mbits吧?
4.如果采用SMT32F407其通讯能否加快其通讯速率?
PS:实验采用的发送方为SMT32F103C8,接收方为STM32F103VET6。NRF苾片为NRF2401+1242AF。
发送方程序代码:
while(1)
        {       
               
                NRF_TX_Mode();
               
          if(txflag)
                {
                       
                        for(i=0;i<3;i++)
                        {
                                for(j=0;j<5300;j++)
                                {
                                        status = NRF_Tx_Dat(txbuf);
                                }
                                if(status==TX_DS)
                                {
                                        LED1_reverse;                       
                                }
                        }
                               
                }
               
  }

接收方代码:
while(1)
        {       
               
                NRF_RX_Mode();
               
                if(rxflag)
                {       
                        status = NRF_Rx_Dat(rxbuf);
                       
                        if(status==RX_DR)
                        {
                                //LED1_reverse;
                                //Delay(0xfffff);
                                ;
                        }
                }
  }
逻辑分析仪采样的ELD反转时间图:

LED反转时序图

LED反转时序图





回复

使用道具 举报

发表于 2015-6-26 09:08:02 | 显示全部楼层
采用不同的芯片不影响。
其它版本的没有了解过
F4应该也提不了多少速度,这个主要速度是受模块限制,跟主控器的影响不大
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-26 15:06:50 | 显示全部楼层
flyleaf 发表于 2015-6-26 09:08
采用不同的芯片不影响。
其它版本的没有了解过
F4应该也提不了多少速度,这个主要速度是受模块限制,跟主 ...

我后面测了别人写的一个程序,在2M的通讯速率下发现比野火的官方给程序的传输速率高了100Kbps。我查了一下,我用的NRF2401+,别人写的也是最高2Mbps的速率,然后我问他们实测没有,他们说只是代硕。
PS,我网上找的别人写的发送函数:
void NRF24L01_Send(void)
{
  u8 status=0x00;
//CSN(0);
        //TX_Mode(TX_BUF);//send tx
        TX_Mode(Test_buf);//send tx
        while(IRQ);

        CE(0);
        delay1us(10);
        status=SPI_Read_Reg(STATUS);        // 读取状态寄存其来判断数据接收状况
        if(status&TX_DS)        /*tx_ds == 0x20*/
        {
           tx_ok = 1;               
           SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x20);      // 清除TX,让IRQ拉低;
                       
        }
        else if(status&MAX_RT)
                {
                        SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x10);      // 清除TX,让IRQ拉低;                       
                }
        CE(1);
}

void TX_Mode(u8 * tx_buf)
{
        CE(0);
  SPI_Write_Buf(WRITE_REG_NRF24L01 + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);     // 写入发送地址
        SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  // 为了应答接收设备,接收通道0地址和发送地址相同
        SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);                          // 装载数据
  //SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x3f);       // 使能接收通道0自动应答
        SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3f);   // 使能接收通道0
  //SPI_RW_Reg(WRITE_REG_NRF24L01 + SETUP_RETR, 0x0a);  // 自动重发延时等待250us+86us,自动重发10次
  SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 40);         // 选择射频通道0x40
  SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_SETUP, 0x07);    // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益 0x07
        SPI_RW_Reg(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH);  // 接收通道0选择和发送通道相同有效数据宽度
  SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0e);      // CRC使能,16位CRC校验,上电
  CE(1);
        delay1us(10);
}

回复 支持 反对

使用道具 举报

发表于 2015-6-26 15:10:49 | 显示全部楼层
ytmyygyihc 发表于 2015-6-26 15:06
我后面测了别人写的一个程序,在2M的通讯速率下发现比野火的官方给程序的传输速率高了100Kbps。我查了一 ...

只能在spi通讯的时候把spi时钟提高一下,其它的估计影响不大
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-26 15:18:14 | 显示全部楼层
flyleaf 发表于 2015-6-26 15:10
只能在spi通讯的时候把spi时钟提高一下,其它的估计影响不大

这个我之前写过,把SPI1的8分频换成了4分频,然后用Logic查看发现变化并不大。PS:2分频NRF2401初始化就失败了。您的意思的这跟程序并没有多大关系?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 23:08 , Processed in 0.030798 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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