Ejemplo n.º 1
0
/*
*****************************************************************
* 写数据包
*****************************************************************
*/
void NRF_TxPacket(uint8_t * tx_buf, uint8_t len)
{	
	SPI_CE_L();		 //StandBy I模式	
	
	NRF_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
	NRF_Write_Buf(WR_TX_PLOAD, tx_buf, len); 			 // 装载数据	
	SPI_CE_H();		 //置高CE,激发数据发送
}
Ejemplo n.º 2
0
/*
24L01初始化
model:24L01 模式
ch:   通道
*/
void Nrf24l01_Init(u8 model, u8 ch)
{
#ifdef NRF24L01_SPI1
    Nrf_Spi1_Init();
#elif defined NRF24L01_SPI2
    Nrf_Spi2_Init();
#elif defined NRF24L01_SPI0
    Nrf_Spi0_Init();
#else
#error
#endif
    SPI_CE_L();
    NRF_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH);//写RX节点地址
    NRF_Write_Buf(NRF_WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);   //写TX节点地址
    NRF_Write_Reg(NRF_WRITE_REG + EN_AA, 0x01);                         //使能通道0的自动应答
    NRF_Write_Reg(NRF_WRITE_REG + EN_RXADDR, 0x01);                     //使能通道0的接收地址
    NRF_Write_Reg(NRF_WRITE_REG + SETUP_RETR, 0x1a);                    //设置自动重发间隔时间:500us;最大自动重发次数:10次
    NRF_Write_Reg(NRF_WRITE_REG + RF_CH, ch);                           //设置RF通道为CHANAL
    NRF_Write_Reg(NRF_WRITE_REG + RF_SETUP, 0x0f);                      //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
    //NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x07);                       //设置TX发射参数,0db增益,1Mbps,低噪声增益开启
    /////////////////////////////////////////////////////////
    if (model == 1)             //RX
    {
        NRF_Write_Reg(NRF_WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);                            //选择通道0的有效数据宽度
        NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f);         // IRQ收发完成中断开启,16位CRC,主接收
    }
    else if (model == 2)    //TX
    {
        NRF_Write_Reg(NRF_WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);                            //选择通道0的有效数据宽度
        NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);         // IRQ收发完成中断开启,16位CRC,主发送
    }
    else if (model == 3)    //RX2
    {
        NRF_Write_Reg(FLUSH_TX, 0xff);
        NRF_Write_Reg(FLUSH_RX, 0xff);
        NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f);         // IRQ收发完成中断开启,16位CRC,主接收

        Spi_RW(0x50);
        Spi_RW(0x73);
        NRF_Write_Reg(NRF_WRITE_REG + 0x1c, 0x01);
        NRF_Write_Reg(NRF_WRITE_REG + 0x1d, 0x07);
    }
    else if (model == 4)    //TX2
    {
        NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);         // IRQ收发完成中断开启,16位CRC,主发送
        NRF_Write_Reg(FLUSH_TX, 0xff);
        NRF_Write_Reg(FLUSH_RX, 0xff);

        Spi_RW(0x50);
        Spi_RW(0x73);
        NRF_Write_Reg(NRF_WRITE_REG + 0x1c, 0x01);
        NRF_Write_Reg(NRF_WRITE_REG + 0x1d, 0x07);
    }
    SPI_CE_H();
}
//接收模式
void SetRX_Mode(void)
{
    SPI_CE_L();
	  NRF_Write_Reg(FLUSH_RX,0xff);//清除TX FIFO寄存器			 
  	NRF_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(uint8_t*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
   	NRF_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);    //使能通道0的自动应答    
  	NRF_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址  	 
  	NRF_Write_Reg(NRF_WRITE_REG+RF_CH,40);	     //设置RF通信频率		  
  	NRF_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度 	    
  	NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
  	NRF_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式 
    SPI_CE_H();
    printf("NRF24L01设为接收模式...\r\n");
} 
//发送模式
void SetTX_Mode(void)
{
    SPI_CE_L();
    NRF_Write_Reg(FLUSH_TX,0xff);										//清除TX FIFO寄存器		  
    NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);		//写TX节点地址 
  	NRF_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); 	//设置TX节点地址,主要为了使能ACK	  
  	NRF_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);     //使能通道0的自动应答    
  	NRF_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址  
  	NRF_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
  	NRF_Write_Reg(NRF_WRITE_REG+RF_CH,40);       //设置RF通道为40
  	NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
  	NRF_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
    SPI_CE_H();
  
  
} 
Ejemplo n.º 5
0
/*
*****************************************************************
* 发送模式
*****************************************************************
*/
void SetTX_Mode(void)
{
	SPI_CE_L();
	NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);   		 // IRQ收发完成中断响应,16位CRC,主发送
	SPI_CE_H();
} 
Ejemplo n.º 6
0
/******************************************************************
* 写数据包
******************************************************************/
void NRF_TxPacket(uint8_t * tx_buf, uint8_t len)
{	
	SPI_CE_L();		 //StandBy I模式	
	NRF_Write_Buf(WR_TX_PLOAD, tx_buf, len); 			 // 装载数据	
	SPI_CE_H();		 //置高CE,激发数据发送
}
Ejemplo n.º 7
0
void NRF_TxPacket_AP(uint8_t * tx_buf, uint8_t len)
{	
	SPI_CE_L();		 //StandBy I模式	
	NRF_Write_Buf(0xa8, tx_buf, len); 			 // 装载数据
	SPI_CE_H();		 //置高CE
}