📄 nrf2401.h
字号:
//该模块是针对无线手柄设定的头文件
//接收数据长度为10位
# ifndef NRF2401_H_H_
# define NRF2401_H_H_
#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#ifndef _BIT
#define _BIT
#define BIT(n) (1 << (n))
#endif
#define BYTE_BIT0 0x01
#define BYTE_BIT1 0x02
#define BYTE_BIT2 0x04
#define BYTE_BIT3 0x08
#define BYTE_BIT4 0x10
#define BYTE_BIT5 0x20
#define BYTE_BIT6 0x40
#define BYTE_BIT7 0x80
//接口为B端口
#define NRF_PORT GPIOA->ODR
#define NRF_DDR GPIOA->CRL
#define NRF_PIN GPIOA->IDR
#define PWR_UP 0
#define CE 1
#define CS 2
#define DR1 3
#define CLK1 4
#define DATA 5
/////////////////////////////
#define NRF2401_DATA_IN NRF_DDR &= 0xff0fffff;NRF_DDR |= 0x00800000;NRF_PORT |= BIT(DATA)
#define NRF2401_DATA_OUT NRF_DDR &= 0xff0fffff;NRF_DDR |= 0x00300000;NRF_PORT |= BIT(DATA)
#define NRF2401_DR1_IN NRF_DDR &= 0xffff0fff;NRF_DDR |= 0x00008000;NRF_PORT |= BIT(DR1)
#define NRF2401_DR1_OUT NRF_DDR &= 0xffff0fff;NRF_DDR |= 0x00003000;NRF_PORT |= BIT(DR1)
/////////////////////////////
#define PWR_UP_STATE (NRF_PIN&(1<<PWR_UP))==(1<<PWR_UP)
#define CE_STATE (NRF_PIN&(1<<CE))==(1<<CE)
#define CS_STATE (NRF_PIN&(1<<CS))==(1<<CS)
#define DR1_STATE (NRF_PIN&(1<<DR1))==(1<<DR1)
#define CLK1_STATE (NRF_PIN&(1<<CLK1))==(1<<CLK1)
#define DATA_STATE (NRF_PIN&(1<<DATA))==(1<<DATA)
#define PWR_UP_SET() {NRF_PORT|=1<<PWR_UP;}
#define PWR_UP_CLR() {NRF_PORT&=~(1<<PWR_UP);}
#define CE_SET() {NRF_PORT|=1<<CE;}
#define CE_CLR() {NRF_PORT&=~(1<<CE);}
#define CS_SET() {NRF_PORT|=1<<CS;}
#define CS_CLR() {NRF_PORT&=~(1<<CS);}
#define DR1_SET() {NRF_PORT|=1<<DR1;}
#define DR1_CLR() {NRF_PORT&=~(1<<DR1);}
#define CLK1_SET() {NRF_PORT|=1<<CLK1;}
#define CLK1_CLR() {NRF_PORT&=~(1<<CLK1);}
#define DATA_SET() {NRF_PORT|=1<<DATA;}
#define DATA_CLR() {NRF_PORT&=~(1<<DATA);}
/*************************************************************
* nRF2401 Configuration *
* 保存2401 的配置信息 *
*************************************************************/
/*=======< RF-Configuration-Register 配置信息>=======*/
//芯片测试用,无需修改
#define TEST_2 0x8E //D143~D136(MSB)
#define TEST_1 0x08 //D135~D128
#define TEST_0 0x1c //D127~D120
//注意: DATAx_W + ADDRx_W + CRC
//的值必须小于256
//单个数据包的大小必须小于32字节
//各占一个字节,不需移位
#define DATA2_W 0x50 //0x10->2字节 频道2发送/接收数据长度(单位:Bit)
#define DATA1_W 0x50 //MAX:0xd0->26字节 频道1发送/接收数据长度(单位:Bit)
//注意:2401忽略ADDR中超过ADDR_W
//设定宽度的那些位,同时地址不能
//全部设置为0
//频道2接收地址频道2 未启用
#define ADDR2_4 0xaa
#define ADDR2_3 0xab
#define ADDR2_2 0x55
#define ADDR2_1 0xab
#define ADDR2_0 0xaa
//频道1接收地址(当前模块地址)只
//使用到频道 1
#define ADDR1_4 0xaa
#define ADDR1_3 0xab
#define ADDR1_2 0x55
#define ADDR1_1 0xab
#define ADDR1_0 0xaa
//$$$$ $$@@,即地址占高六Bit,列:
//0x0100 00@@,该值为16
#define ADDR_W 0x28 //0x08;0x10;0x18;0x20字节 发送/接收地址宽度(单位:Bit)
#define CRC_L 0x01 //CRC 模式 0:8 位 1:16 位
#define CRC_EN 0x01 //CRC 校验 0:禁用 1:启用
#define RX2_EN 0x01 //双频道功能 0:禁用 1:启用
#define CM 0x01 //发送模式选择 0:Direct mode 1:ShockBurst mode
#define RFDR_SB 0x01 //传输速率 0:250kbps 1:1Mbps(250kbps比1Mbps传输距离更远)
#define XO_F 0x03 //2401晶振频率 0x03->16M 0x04->20M
#define RF_PWR 0x03 //信号发射功率 两位
#define RF_CH 0x48 //Channel RF 频率设置 Channel=2400MHz+RF_CH*1.0MHz
#define RXEN_NRF 0x01 //发送/接收模式 0:Tx 1:Rx
//程序会通过SetTxMode/SetRxMode
//重新设置此项参数
//将设置信息组合成每个字节的数据
//信息,此区域无需修改
#define RFConfig_Bit0 TEST_2
#define RFConfig_Bit1 TEST_1
#define RFConfig_Bit2 TEST_0
#define RFConfig_Bit3 DATA2_W
#define RFConfig_Bit4 DATA1_W
#define RFConfig_Bit5 ADDR2_4
#define RFConfig_Bit6 ADDR2_3
#define RFConfig_Bit7 ADDR2_2
#define RFConfig_Bit8 ADDR2_1
#define RFConfig_Bit9 ADDR2_0
#define RFConfig_Bit10 ADDR1_4
#define RFConfig_Bit11 ADDR1_3
#define RFConfig_Bit12 ADDR1_2
#define RFConfig_Bit13 ADDR1_1
#define RFConfig_Bit14 ADDR1_0
//有的寄存器对应位共占了一个字节
//所以要进行相应的移位处理
#define RFConfig_Bit15 (ADDR_W<<2| CRC_L<<1| CRC_EN)
#define RFConfig_Bit16 (RX2_EN<<7| CM<<6| RFDR_SB<<5| XO_F <<2| RF_PWR)
#define RFConfig_Bit17 (RF_CH<<1| RXEN_NRF)
//配置2401,写入初始化设置
void Config2401(void);
//设置为发送模式
void SetTxMode(void);
//设置为接收模式
void SetRxMode(void);
//发送p_TxBuf[]内的数据,长度由
//DATA1_W 决定
void nRF2401_TxPacket(unsigned char* p_TxBuf);
//检查是否有数据需要接受 如果有,
//则保存至p_RxBuf
//返回值 0:没有接收到数据
// 1:接收到数据
unsigned char nRF2401_RxPacket(unsigned char* p_RxBuf);
# endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -