NRF24L01+自组网(1对多)实现

NRF24L01+自组网(1对多)实现

本算法基于软件分配和判断从机地址的方式实现,模块不使用自动应答模式和自动重发模式,并且关闭发送中断和最大重发次数中断。故将NRF24L01+模块的代码部分发出来分享一下,算法算不上完美,大神轻喷:

算法注意点:

  • 主机和从机共同使用同一个通道,所有从机的地址相同,所以主机发送指令时,要带上软件分配的从机地址

  • 关闭发送中断和最大重发次数中断,防止发送完成或者超过重发次数引起中断,但不会影响读取标志位的值

  • 从机采用中断接收模式,主机采用定时器定时查询NRF24L01+模块的STATU寄存器进行判断,也可用中断方式进行接收,但是要考虑到中断是下降沿触发,但是要考虑到单片机有没有可能在处理别的中断的时候,由于关闭了全局中断而此时有触发了接收中断而不能及时处理,从而错过了下降沿触发的时间,需根据具体情况具体分析。

  • 由于屏蔽了发送中断,在发送时需要对CE管脚的高电平时间进行足够的延时,不然会引起发送乱码或者发送失败

  • 由于采用的是非自动应答模式,所以需要切换发送和接收模式

  • 为了保证通讯的质量,需要对发送的数据进行CRC校验


代码块

使用了PIC16F1876系列,发送和接收设置代码:

//发送模式配置字
void TX_Mode(void)
{
    Clr_NRF24L01_CE;
    //写TX节点地址
    NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,(unsigned char*)TX_ADDRESS,TX_ADR_WIDTH);     
    //设置TX节点地址,主要为了使能ACK
    NRF24L01_Write_Buf(NRF24L01_WRITE_REG+RX_ADDR_P0,(unsigned char*)RX_ADDRESS,RX_ADR_WIDTH);  
    //失能自动应答功能(广播模式)
    NRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_AA,0x00); 
    //使能通道0的接收地址                                         
    NRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_RXADDR,0x01); 
    //失能自动重发功能                                   
    NRF24L01_Write_Reg(NRF24L01_WRITE_REG+SETUP_RETR,0x00);  
    //设置RF通道为CHANNEL
    NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_CH,CHANNEL);    
    //设置TX发射参数,0db增益,250kbps,低噪声增益开启                                            
    NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_SETUP,0x27);     
    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,关闭发送和重发中断                       
    NRF24L01_Write
  • 14
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值