NRF24L01

通道说明

NRF24L01:一个发送通道,6个接收通道

发送端发送数据时,数据包内地址采用“发送通道TX_ADD”的地址,这个地址为接收端的几个接收通道中的一个,接收端对应的通道接收到数据后,进行应答,应答包内地址采用对应接收通道的地址即为发送端的发送通道地址,而发送端默认使用通道0最为应答接收,故发送端通道0地址要设置为发送通道地址。(上面一大堆通信,其实用的都是一个地址,这个地址分别被用来作为发送端发送通道地址,发送端某一接收通道地址,发送端接收通道0地址)。关于应答,无需设置接收端的发送通道地址,因为应答是硬件实现,不是软件设置。

 

 最好使用1-5通道来接收,因为发射时0通道会被用来接收应答,而发送数据前,往发送通道写对方某一接收通道的地址。

关于接收通道的地址规定:

  • 通道0,1的地址随意,5字节即可
  • 通道2-5的地址与1的地址相关:
    • 要求寄存器中前4个字节必须和“1通道地址”的前四个字节相同,最后一个字节随意(不同)
    • 不过寄存器里的顺序和数组里的顺序相反,故发送时需要改变数组里的第一位,而接收端实际上只允许你写一位地址值

arduino的RF24库

连接:

关键函数:

RF24 radio(9,10);//构造,CE->9 ; CSN->10,构造函数内默认指定数据包大小为32(最大也是32),如果要改请使用radio.setPayloadSize(xxx);

radio.begin();//初始化

radio.setChannel(XXX);//设置频率

radio.setAutoAck(true);//设置自动应答

Serial.begin(9600);//

printf_begin();//该函数来自example里的printf.h文件内,用于初始化调试

radio.printDetails();//输出调试信息,要先调用printf_begin
radio.openReadingPipe(1,pipes[0]);//pipes[0]是uint64_t类型变量比如0x0202020202LL ;-->设置接收通道1的地址为pipes[0]
radio.startListening();//开始接收

if ( radio.available() )//available函数里面会去查询STATUS寄存器,其重载函数可获得到底是哪个通道有数据
{
  radio.read( buf, 32 );//bool RF24::read( void* buf, uint8_t len );
}

实用函数:

RF24::write_register//写寄存器
RF24::read_register//读寄存器,均有重载

 

//该库默认启用16位CRC,如需修改,请到begin函数里修改

//最好把printf.h文件放到根目录方便调试

51的

关键函数:

nrf_init(void)//初始化了引脚和寄存器(1 Mbps, 0 dBm,自动应答,重发...),成功返回true

bool nrf_send(byte* addr, byte* buffer);//发送数据,数据长度要和接收方一致。内部包含重发,成功返回true

bool nrf_recv(byte* addr, byte* buffer, int timeout);//Binds to a specified address and receives data. Specify -1 for timeout if you want to wait indefinitely. Returns TRUE if data received, otherwise FALSE.

 

This library is tested on STC89C52RC2 and should be compatible with AT89S52 and similar mcus. It assumes 11.0952 MHz crystal and 12 clocks per instruction. If you mcu is different from this configuration, you will need to provide your own sleep function in the stc89.h header file. You will also need to change these defines in nrf.h according to your own situation

#define CE P1_4
#define CSN P1_3
#define SCK P1_2
#define MOSI P1_1
#define MISO P1_0

实用函数:

void _nrf_set_reg(byte reg, byte value);//写寄存器,例如   _nrf_set_reg(RF_CH,6);设置频率为6
byte _nrf_get_reg(byte reg);//读寄存器

 

 

转载于:https://www.cnblogs.com/2cats/p/3536777.html

NRF24L01不一样的配置方式,方便简洁明了,一个函数配置出所有你想要的功能。由结构体打包函数,每个参数设置都有注释说明,傻瓜式配置。 ------------------NRF24L01函数目录——————————————— typedef struct { u8 NRF24L01_Mode;//模式 接收,发送模式 NRF24L01_TXMode NRF24L01_RXMode u8 NRF24L01_Shield_Interrupt;//屏蔽中断 MASK_RX_DR MASK_TX_DS MASK_MAX_RT EN_MASK u8 NRF24L01_ENCRCO8_16;//使能CRC校验 EN_CRC8 EN_CRC16 CRC_NO u8 NRF24L01_ENACK;//使能自动应答 EN_CH0~EN_CH5 u8 NRF24L01_ENRX;//使能接收通道 EN_CH0~EN_CH5 u8 NRF24L01_AddrWide;//设置所有通道的接收/发送地址宽度 3~5字节 AddrWide_3~AddrWide_5 u8 NRF24L01_ResendDelay;//重发延时 (('0000'+1)250+86)us//0~15 u8 NRF24L01_ResendCount;//重发次数 0~15次 u8 NRF24L01_RF_CHf;//设置工作通道频率 0~125 u8 NRF24L01_RF_Speed;//数据传输率 0-1Mbps,1-2Mbps //RF_Speed1Mbps RF_Speed2Mbps u8 NRF24L01_RF_PWR;//发送功率 0,-6,-12,-18dBm// RF_PWR_18dBm RF_PWR_12dBm RF_PWR_6dBm RF_PWR0dBm u8 NRF24L01_RXADDR_P0[5];//通道0接收地址 u8 NRF24L01_RXADDR_P1[5];//通道1接收地址 u8 NRF24L01_RXADDR_P2_P5[4];//通道2~5接收地址(每字节表各通道最低字节), //高4字节与NRF24L01_RXADDR_P1[5]高4字节相等(不可修改) u8 NRF24L01_TXADDR[5];//发送地址(ShockBurst模式下NRF24L01_RXADDR_P0[5]与此地址相等) u8 NRF24L01_RX_PW[6];//(0~5通道)接收数据通道有效数据宽度 (1~32) }NRF24L01_InitTypeDef; //初始化为接收模式 void NRF24L01_RXInit(); //NRF24L01功能初始化 void NRF24L01_Init(NRF24L01_InitTypeDef *NRF24L01_InitStructure); //SPI读写一字节数据 u8 NRF24L01_SPIR_WByte(u8 dat); //SPI读NRF24L01寄存器 u8 NRF24L01_ReadReg(u8 RegAddr); //SPI写NRF24L01寄存器 u8 NRF24L01_WriteReg(u8 RegAddr,u8 dat); //读取RXFIFO寄存器的值 //寄存器地址//读取数据存放变量//读取数据长度//用于接收 u8 NRF24L01_ReadRxDate(u8 RegAddr,u8 *RxDate,u8 DateLen); //写入TXFIFO寄存器的值 //寄存器地址//写入数据存放变量//读取数据长度//用于发送 u8 NRF24L01_WriteTxDate(u8 RegAddr,u8 *TxDate,u8 DateLen);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值