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

📄 nrf24l01.c

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

#include  "config.h"
#include "SSP.h"

#define     NRF_CE      0x00008000          // P0.15
#define     NRF_CE0     0x00000100          // P0.8
#define     NRF_IR0     0x00000200          // P0.9
#define     NRF_IR      0x00000800          // P0.11

void    nrf24l01_init(void);
void    nrf24l01_send(uchar *s, uchar No);

void    nrf24l01_init0()
{
    UINT i;
    IO0DIR |= NRF_CE0;
    IO0DIR &= ~NRF_IR0;

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

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

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

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

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

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

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

    T_data[0] = 0x24;                       // SETUP_RETR
    T_data[1] = 0x0a;                       // 不转发,10次重发
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x25;                       // RF_CH:射频频道
    T_data[1] = 0x40;                       // 频点2
    SPI_SendData(T_data, R_data, 2);


    for (i=0; i<10000; i++);


    T_data[0] = 0x26;                       // RF_SETUP:射频设置寄存器
    T_data[1] = 0x09;                       // 2Mbps, 0 dBm,Setup LNA gain    //******1f
    SPI_SendData(T_data, R_data, 2);

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

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

    T_data[0] = 0xe1;      
    SPI_SendData(T_data, R_data, 1);
    T_data[0] = 0xe2;                 
    SPI_SendData(T_data, R_data, 1);
}

void    nrf24l01_send0(uchar *s, uchar No)
{
    uchar i;

    IO0CLR = NRF_CE0;                        // 空闲模式,不进行数据传输
 
    T_data[0] = 0x20;                       // CONFIG:
    T_data[1] = 0x0e;                       // PTx, CRC 1byte
    SPI_SendData(T_data, R_data, 2);
    
    
   T_data[0] = 0xe1;                       // 清空Tx_FIFO
   SPI_SendData(T_data, R_data, 1);

    T_data[0] = 0xa0;                       // 写Tx数据
    for(i=0; i<No; i++)
    {
        T_data[1+i] = 9;               // No<32byte       
    }    
    SPI_SendData(T_data, R_data, 1+No);   

     IO0SET = NRF_CE0;                        // 进入发送模式
}

void    nrf24l01_test0(void)
{
    T_data[0] = 0x17;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x00;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x01;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x02;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x03;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x04;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x05;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x06;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x07;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 2);

    T_data[0] = 0x0a;                       // CONFIG
    T_data[1] = 0x00;                       // power down
    T_data[1] = 0x00;                       // power down
    T_data[1] = 0x00;                       // power down
    T_data[1] = 0x00;                       // power down
    T_data[1] = 0x00;                       // power down
    SPI_SendData(T_data, R_data, 6);

}


⌨️ 快捷键说明

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