篮球比分屏(三)NRF24L01对码的实现

NRF24L01模块相邻射频通道低于5MHz会出现相互干扰现象,我这里直接把差值拉大到10Mhz,亲测通信稳定,未产生明显干扰掉包现象。

u8 dmBuf[10]={10,20,30,40,50,60,70,80,90,100};//对码BUF

下面是对码的实现方案:

  1. 无线手柄与比分屏初始化配置NRF24L01需关闭通道0的自动应答和自动重发。
void NRF24L01_TXN_Mode(u8 *inbuf)//关闭自动应答功能、自动重发功能
{                                                        
  CLR24CE;
  NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,inbuf,ADR_WIDTH);//写TX节点地址 
  NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,inbuf,ADR_WIDTH); //设置TX节点地址,主要为了使能ACK    
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x00);     //关闭所有通道自动应答
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); // 使能通道0
  NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x00);//设置自动重发间隔时间:自动重发15次,每次间隔250us
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,NRF24L01_RFCH);       //设置RF通道为40
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x07); //0010 0111 250kbps,7dBm
  NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
  //CE为高,10us后启动发送
  SET24CE;
  delay_us(130);
}
  1. 当无线手柄与比分屏按下对码键的时候再打开通道0的自动应答和自动重发。
void NRF24L01_TX_Mode(u8 *inbuf)
{                                                        
  CLR24CE;
  NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,inbuf,ADR_WIDTH);//写TX节点地址 
  NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,inbuf,ADR_WIDTH); //设置TX节点地址,主要为了使能ACK    
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);     //使能通道0的自动应答  
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址  
  NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x0a);//设置自动重发间隔时间:自动重发15次,每次间隔250us
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,NRF24L01_RFCH);       //设置RF通道为40
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x07); //0010 0111 250kbps,7dBm
  NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
  //CE为高,10us后启动发送
  SET24CE;
  delay_us(130);
}

3.无线手柄在对码的时候一直切换不同的通信频道并发送对码帧,只要发送成功(收到自动应答数据)就代表当前通信频道与比分屏一致,这样就实现了对码。

INTERRUPT_HANDLER(EXTI0_IRQHandler,8)//对码
{
  if(EXTI_GetITStatus(EXTI_IT_Pin0)!=RESET)
  {
    EXTI_ClearITPendingBit(EXTI_IT_Pin0);
    
    NRF_Standby_Mode();
    
    unsigned char tempBuf[5]={0x59,0x03,0x00,0x5A,0x4D};
    
    unsigned char j=0,i;
    
    for(j=0;j<11;)
    {
      NRF24L01_RFCH=dmBuf[nrfNum];
      NRF24L01_TX_Mode(tempAddrBuf);    //配置为发送模式
      
      if(NRF24L01_TxPacket(tempBuf)==TX_OK)
      {
        nrfNum1=nrfNum;
        NRF24L01_TXN_Mode(tempAddrBuf);    //配置为发送模式
        FLASH_WriteNByte((u8*)"NF",4096,2);
        FLASH_WriteNByte(&NRF24L01_RFCH,4098,1);  
        j=12;
      }
      
      if(++nrfNum>9) nrfNum=0;
      
      j++;
      
      for(i=0;i<10;i++)
      {
        GPIO_ToggleBits(GPIOD, GPIO_Pin_0);
        delay_ms(60);
      }
      
    }
    
    if(j==11)
    {
      NRF24L01_RFCH=dmBuf[nrfNum1];
      NRF24L01_TXN_Mode(tempAddrBuf);    //配置为发送模式
    }
   
    GPIO_ResetBits(GPIOD,GPIO_Pin_0);  
    
    
  }

  
}

对码完成后再配置NRF24L01关闭通道0的自动应答和自动重发,保存当前通信频段到内部EEPROM,以免下次上电需再次对码。目前这个无线手柄项目暂时算完了,但是看到资料上说STM8L051功耗能降低0.3uA,这里先挖一个坑,后面有时间再调试!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
nRF24L01是一种低功耗2.4GHz无线通信模块,可以广泛应用于无线传感器网络、远距离数据传输等领域。nRF24L01模块的配对是指将两个或多个模块进行连接和通信的过程。 要进行nRF24L01的配对,需要以下步骤: 1. 硬件连接:首先,需要将两个nRF24L01模块与Arduino等主控设备相连接。其中一个模块作为发送端,另一个作为接收端。 2. 编程设置:使用相应的编程语言和开发环境,编写代码来控制nRF24L01模块的工作。发送端的代码负责将数据发送到接收端,接收端的代码负责接收和解析发送端的数据。 3. 地址匹配:nRF24L01模块有一个可配置的地址,包括发送地址(TX地址)和接收地址(RX地址)。在配对过程中,需要确保发送端和接收端的地址是一致的,以便正确地进行通信。 4. 信道设置:nRF24L01模块有多个信道可供选择。在进行配对时,需要确保发送端和接收端选择了相同的信道,以便它们能够在同一个频率上进行通信。 5. 数据传输:通过编程设置发送端和接收端的工作模式和数据传输方式,可以实现数据的双向传输。发送端将需要传输的数据发送给接收端,接收端接收到数据后进行相应的处理或反馈。 6. 通信测试:完成以上步骤后,可以进行一些测试来验证nRF24L01模块的配对是否成功。可以发送一些简单的数据或指令,观察接收端是否能够正确接收并执行相应的操作。 通过以上步骤,可以实现nRF24L01模块的配对,使其能够进行有效的无线通信。在实际应用中,可以根据需要添加更多的功能和安全措施,以确保通信的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗暗星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值