NRF2401使用详细说明

NRF2401的引脚

  • 8.IRQ 7.MISO 6.MOSI 5.SCK 4.CSN 3.CE 2.VCC 1.GND

具体说明:

  • 3.CE 芯片的模式控制线。在 CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态(参照NRF24L01 的状态机)。
  • 4.CSN 为芯片的片选线 CSN 为低电平芯片工作
  • 5.SCK 为芯片控制的时钟线(SPI时钟)
  • 6.MOSI 为芯片控制数据线(Master output slave input) 主输出 从输入
  • 7.MISO 芯片控制数据线 (Master input slave output) 主输入 从输出
  • 8.IRQ 中断信号引脚。中断时变为低电平,即NRF24L01内部发生中断时IRQ 引脚从高电平变为低电平。引脚会在以下三种情况变低:Tx FIFO 发完并且收到ACK(使能ACK情况下)、Rx FIFO
    收到数据、达到最大重发次数

NRF2401的5种状态机

  1. 掉电模式(nRF24L01 +使用最小电流消耗来禁用。 所有可用的寄存器值都将保持不变,并且SPI保持活动状态,从而可以更改配置以及数据寄存器的上载/下载)
  2. 发射模式(进入该模式,nRF24L01 +必须将PWR_UP位设置为高电平,将PRIM_RX位设置为低电平,TX FIFO中的有效负载和CE上的高电平脉冲超过10μs。 nRF24L01 +一直处于TX模式,直到完成发送数据包。 如果CE = 0,则nRF24L01 +返回待机I模式。 如果CE = 1,则TX FIFO的状态决定下一个操作。 如果TX FIFO不为空,则nRF24L01 +将保持在TX模式并发送下一个数据包。 如果TX FIFO为空,则nRF24L01 +进入待机II模式。 处于TX模式时,nRF24L01 +发送器PLL工作在开环状态。 重要的是,一次不要将nRF24L01 +保持在TX模式下的时间超过4ms。 如果启用增强ShockBurst™功能,则nRF24L01 +绝不会在TX模式下长于4ms。)
  3. 接收模式(nRF24L01 +必须将PWR_UP位设置为高电平,将PRIM_RX位设置为低电平,TX FIFO中的有效负载和CE上的高电平脉冲超过10μs。 nRF24L01 +一直处于TX模式,直到完成发送数据包。 如果CE = 0,则nRF24L01 +返回待机I模式。 如果CE = 1,则TX FIFO的状态决定下一个操作。 如果TX FIFO不为空,则nRF24L01 +将保持在TX模式并发送下一个数据包。 如果TX FIFO为空,则nRF24L01 +进入待机II模式。 处于TX模式时,nRF24L01 +发送器PLL工作在开环状态。 重要的是,一次不要将nRF24L01 +保持在TX模式下的时间超过4ms。 如果启用增强ShockBurst™功能,则nRF24L01 +绝不会在TX模式下长于4ms。)
  4. 待机1模式(CONFIG寄存器中的PWR_UP位设置为1,器件进入待机I模式。消耗电量最低,只能配置寄存器spi)
  5. 待机2模式(CE在具有空TX FIFO的PTX器件上保持高电平,则nRF24L01 +进入待机II模式。该模式下时钟正常运行,如果一个新的数据包上传到TX FIFO,PLL会立即启动并在正常的PLL建立延迟(130μs)后发送数据包。)

NRF2401初始化

发送模式
上电进入powerDown(省点模式 只能配置 通过spi发送数据,可以接受到 并且可以写到寄存器)

  1. 发送目标地址(接收端的地址)
  2. 接受到的地址(本机地址)
  3. 自动应答(需要配置,默认没有,启用的话,发送完立马转为接收模式)
  4. 频率配置(2.4G-2.512G 2M一个信道 2信道的话频率为2400+2*2=2404MHZ 接收必须也是2信道)
  5. 功率配置(根据接收距离调整功率强度 0dBm,-6dBm, -12dBm,-18dBm 4种可选 0为最大 几十米到几cm)
void init_NRF24L01(void)
{

	CE  = 0;        // 待机
	CSN = 1;        // SPI禁止 
	SCK = 0;        // SPI时钟置低
	delays(200);delays(200);delays(200);
 	CE=0;    // 芯片启用
 	CSN=1;   // Spi  disable 
 	SCK=0;   // 
	SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS,ADR_WIDTH);    // 写本地地址	
	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS,ADR_WIDTH); // 写接收端地址
	SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动	ACK应答允许	
	SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
	SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //   设置信道工作为2.4GHZ,收发必须一致
	SPI_RW_Reg(WRITE_REG + RX_PW_P0, PLOAD_WIDTH); //设置接收数据长度,
	SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   		//设置发射速率为1MHZ,发射功率为最大值0dB
    delays(200);delays(200);
}
/****************************************************************************************************/
/*功能:数据接收模式   nRF24L01_RX_Mode(RxBuf);//数据接收到寄存器
/****************************************************************************************************/
void nRF24L01_RX_Mode(unsigned char * RX_buf)
{
	CE=0;
    SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, ADR_WIDTH);    // 写本地地址	
	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);// IRQ收发完成中断响应,16位CRC,接收
	sta=SPI_Read(STATUS);	// 读取状态寄存其来判断数据接收状况
	if(RX_DR)				// 判断是否接收到数据
	SPI_Read_Buf(RD_RX_PLOAD,RX_buf,PLOAD_WIDTH);	//读取数据完成标志
	SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
	CE = 1;
    delays(200);
	//Delay(200);Delay(200);
}
/***********************************************************************************************************
/*功能:发送 TX_buf中数据
/**********************************************************************************************************/
void nRF24L01_TX_Mode(unsigned char * TX_buf)
{
	CE=0;			//StandBy I模式	
	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, ADR_WIDTH); // 装载接收端地址
	SPI_Write_Buf(WR_TX_PLOAD, TX_buf, PLOAD_WIDTH);// 装载数据	
	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);// IRQ收发完成中断响应,16位CRC,发送
	CE=1;		 //置高CE,激发数据发送
	delays(250);//模块发送延时重要120-250之间
//	Delay(250);//模块发送延时重要120-250之间
}
 /****************************************************************************************************
/*功能:NRF24L01的 SPI同步读写时序
/****************************************************************************************************/
uchar SPI_RW(uchar reg)
{
	uchar bit_ctr;
   	for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
   	{
		MOSI = (reg & 0x80);         // output 'uchar', MSB to MOSI
		reg = (reg << 1);           // shift next bit into MSB..
		SCK = 1;                      // Set SCK high..
		reg |= MISO;       		  // capture current MISO bit
		SCK = 0;            		  // ..then set SCK low again
   	}
    return(reg);           		  // return read uchar
}
/****************************************************************************************************
/*功能:NRF24L01的SPI读寄存器时序
/****************************************************************************************************/
uchar SPI_Read(uchar reg)
{
	uchar reg_val;
	CSN = 0;                // CSN low, initialize SPI communication...
	SPI_RW(reg);            // Select register to read from..
	reg_val = SPI_RW(0);    // ..then read registervalue
	CSN = 1;                // CSN high, terminate SPI communication
	return(reg_val);        // return register value
}
/****************************************************************************************************/
/*功能:NRF24L01读写寄存器函数
/****************************************************************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
	uchar status;
	CSN = 0;                   // CSN low, init SPI transaction
	status = SPI_RW(reg);      // select register
	SPI_RW(value);             // ..and write value to it..
	CSN = 1;                   // CSN high again
	return(status);            // return nRF24L01 status uchar
}
/****************************************************************************************************/
/*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数
/****************************************************************************************************/
void SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
{
	uchar i;
	CSN = 0;                    		// Set CSN low, init SPI tranaction
	SPI_RW(reg);       		// Select register to write to and read status uchar
	for(i=0;i

参考链接:https://blog.csdn.net/weixin_42876465/article/details/84675313
https://blog.csdn.net/u013816689/article/details/80000703

你可能感兴趣的:(NRF2401使用详细说明)