📄 2401_tx.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 + -