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);//读寄存器

 

 

posted @ 2014-01-31 14:21  熄灯就睡  阅读(1211)  评论(0编辑  收藏  举报