⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2401_tx.c

📁 lpc213x单片机 无线通信年nRF24L01源码
💻 C
字号:


#include "nrf24l01.h"

uchar   nRF_data[33];                   // 发送数据缓冲区 
uchar   nRF_R_data[33];                 // 接收数据缓冲区

    
void nrf24l01_init(void);                       // nRF24L01初始化                      
void nrf24l01_send(uchar *s, uchar No);         // nRF24L01发送数据    

void    nrf24l01_init()
{
//    UINT i;

    IO0DIR |= nRF_CE;
    IO0DIR &= ~nRF_IRQ;

    IO0CLR = nRF_CE;                            // 空闲模式,不进行数据传输

    nRF_data[0] = 0x21;                         // EN_AA
    nRF_data[1] = 0x01;                       // 通道0自动应答
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x22;                       // EN_RXADDR:激活接收地址
    nRF_data[1] = 0x01;                       // 使能接收通道0
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x23;                       // SETUP_AW:设置地址宽度
    nRF_data[1] = 0x03;                       // 5byte地址宽度
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x24;                       // SETUP_RETR
    nRF_data[1] = 0x0a;                       // 不转发
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x25;                       // RF_CH:射频频道
    nRF_data[1] = 0x40;                       // 频点2
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x26;                       // RF_SETUP:射频设置寄存器
    nRF_data[1] = 0x09;                       // 2Mbps, 0-18 dBm,Setup LNA gain
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x27;                       // STATUS:状态寄存器
    nRF_data[1] = 0x70;                       // 清空各中断
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x2A;                       // RX_ADDR_P0:接收数据通道0的地址40位
    nRF_data[1] = 0x01;                       // 接收数据通道0的地址LSB
    nRF_data[2] = 0x02;
    nRF_data[3] = 0x03;
    nRF_data[4] = 0x04;
    nRF_data[5] = 0x05;                       // 接收数据通道0的地址MSB
    SSP_SendData(nRF_data, nRF_data, 6);

    nRF_data[0] = 0x30;                       // TX_ADDR:发送数据通道地址,40位
    nRF_data[1] = 0x01;                       // 接收数据通道0的地址LSB
    nRF_data[2] = 0x02;
    nRF_data[3] = 0x03;
    nRF_data[4] = 0x04;
    nRF_data[5] = 0x05;                       // 接收数据通道0的地址MSB
    SSP_SendData(nRF_data, nRF_data, 6);

    nRF_data[0] = 0x31;                       // RX_PW_P0 :接收数据通道0的有效载荷字节数
    nRF_data[1] = 20;                         // 32byte
    SSP_SendData(nRF_data, nRF_data, 2);


    nRF_data[0] = 0x20;                       // CONFIG:PRx, CRC 1byte
    nRF_data[1] = 0x0f;
    SSP_SendData(nRF_data, nRF_data, 2);
    
    IO0SET = nRF_CE;                        // 进入发送或接收模式

    nRF_data[0] = 0xe1;                       // 
    SSP_SendData(nRF_data, nRF_data, 1);   
    nRF_data[0] = 0xe2;                       // 
    SSP_SendData(nRF_data, nRF_data, 1);
}

void    nrf24l01_send(uchar *s, uchar No)
{
    uchar i;
    IO0CLR = nRF_CE; 

    nRF_data[0] = 0x23;                       // CONFIG:
    nRF_data[1] = 0x03;                       // PTx, CRC 1byte
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x30;                       // TX_ADDR:发送数据通道地址,40位
    nRF_data[1] = 0x01;                       // 接收数据通道0的地址LSB
    nRF_data[2] = 0x02;
    nRF_data[3] = 0x03;
    nRF_data[4] = 0x04;
    nRF_data[5] = 0x05;                       // 接收数据通道0的地址MSB
    SSP_SendData(nRF_data, nRF_data, 6);

    nRF_data[0] = 0x2A;                       // RX_ADDR_P0:接收数据通道0的地址40位
    nRF_data[1] = 0x01;                       // 接收数据通道0的地址LSB
    nRF_data[2] = 0x02;
    nRF_data[3] = 0x03;
    nRF_data[4] = 0x04;
    nRF_data[5] = 0x05;                       // 接收数据通道0的地址MSB
    SSP_SendData(nRF_data, nRF_data, 6);

    nRF_data[0] = 0xa0;                       // 写Tx数据
    for(i=1; i<21; i++)
    {
        nRF_data[i] = 3;                 // No<32byte       
    }    
    SSP_SendData(nRF_data, nRF_data, 21);       
    
    nRF_data[0] = 0x27;                       // STATUS:状态寄存器
    nRF_data[1] = 0x70;                       // 清空各中断
    SSP_SendData(nRF_data, nRF_data, 2);    
     
    nRF_data[0] = 0x21;                       // EN_AA
    nRF_data[1] = 0x01;                       // 通道0自动应答
    SSP_SendData(nRF_data, nRF_data, 2); 
  
    nRF_data[0] = 0x22;                       // EN_RXADDR:激活接收地址
    nRF_data[1] = 0x01;                       // 使能接收通道0
    SSP_SendData(nRF_data, nRF_data, 2);
  
    nRF_data[0] = 0x24;                       // SETUP_RETR
    nRF_data[1] = 0x0a;                       // 不转发,重发一次
    SSP_SendData(nRF_data, nRF_data, 2);

    nRF_data[0] = 0x25;                       // RF_CH:射频频道
    nRF_data[1] = 0x40;                         // 频点2
    SSP_SendData(nRF_data, nRF_data, 2);
  
    nRF_data[0] = 0x20;                       // CONFIG:PRx, CRC 1byte
    nRF_data[1] = 0x0e;
    SSP_SendData(nRF_data, nRF_data, 2);  
  
  
    IO0SET = nRF_CE; 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -