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

📄 nrf2401.h

📁 STM32+ov7670
💻 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 + -