新闻中心

EEPW首页>嵌入式系统>设计应用> nRF2401无线通信模块调试 2

nRF2401无线通信模块调试 2

作者: 时间:2016-11-29 来源:网络 收藏
最近有人过来问2401的调试问题,在这里把调试过程中应该注意的问题简要说明如下:

1.nRF2401是3.3V供电的,电压过低或过高都会对通信造成影响,要么不能完全通信要么断断续续地通信,至于怎么稳压到3.3V,可以采用稳压二级管,可以使用LM317,这几种方法都试用过,都可行。
2.一般的微处理器的I/O口电压为5V,而2401的I/O口电压为3.3V,若直接相连,容易烧坏2401,可以采用串连2K电阻的方法,也可以使用3.3V和5V电平转换芯片如74LVX3245。

本文引用地址://m.amcfsurvey.com/article/201611/323289.htm

3.至于程序部分,一两句话也说不清楚,请仔细阅读nRF2401的使用说明书。下面公布一段2401程序仅供参考,此程序多次修改,久经考验,应该没有问题。

2401.h下面的代码//说明:nRF2401 CE脚控制收发使能,CS控制片选,均为高电平有效//===============引脚定义=======================#define nRF2401_CE_PORT PORTD.1//#define nRF2401_CE_DDR DDRD.1//#define nRF2401_PWR_PORT PORTD.0//#define nRF2401_PWR_DDR DDRD.0//#define nRF2401_CS_PORT PORTD.3//#define nRF2401_CS_DDR DDRD.3// #define nRF2401_CLK1_PORT PORTD.5//#define nRF2401_CLK1_DDR DDRD.5// #define nRF2401_DATA1_PORT PORTD.4#define nRF2401_DATA1_DDR DDRD.4 #define nRF2401_DATA1_PIN PIND.4#define nRF2401_DR1_PORT PORTD.2//#define nRF2401_DR1_DDR DDRD.2//#define nRF2401_DR1_PIN PIND.2//unsigned char Address[4]={0x00,0x00,0x00,0x99}; //===================配置字定义================================unsigned char nRF2401_InitData[15]={ //设配置字 //test8,8, //通道2与通道1数据宽度设置为8位0,0,0,0,57, //通道2接收地址0x00,0x00,0x00,0x00,0x99, //通道1接收地址0x83, //通道1和通道2地址宽度为32位,开CRC,16位,CRC 校验0x6F, //4F //双频道功能禁用,ShockBurst mode,传输速率1M,晶振频率16M0x02 //Channel = 2400MHz + RF_CH * 1.0MHz ,发送模式}; //0:Tx 1:Rx //===========================================================//===================发送单字节数据==============================void nRF2401_SendByte(unsigned char Data){unsigned char i;nRF2401_DATA1_DDR = 1;for(i=0;i<8;i++){if((Data&0x80)!=0)nRF2401_DATA1_PORT=1;else nRF2401_DATA1_PORT=0;delay_us(1); //最小500ns nRF2401_CLK1_PORT=1;delay_us(1);//最小500nsData<<=1;nRF2401_CLK1_PORT=0;delay_us(1);} }//===========================================================//==================从nRF2401A数据缓冲区读取数据==================void nRF2401_GetData(unsigned char *DataBuffer){unsigned char i=0,temp=0;nRF2401_DATA1_DDR = 0;//数据输入while(nRF2401_DR1_PIN){for(i=0;i<8;i++){temp<<=1; nRF2401_CLK1_PORT=1;delay_us(1);temp|=nRF2401_DATA1_PIN;nRF2401_CLK1_PORT=0;delay_us(1); }}*DataBuffer=temp;} //=====================nRF2401A发送/接收方式设置=================//Mode=0:发送方式 Mode=1:接收方式void nRF2401_SetMode(unsigned char Mode){ nRF2401_PWR_PORT=1;nRF2401_CE_PORT=0;nRF2401_CS_PORT=1;//设置模式nRF2401_DATA1_DDR = 1;delay_us(10); //最小5us进入配置模式nRF2401_DATA1_PORT=Mode; nRF2401_CLK1_PORT=1;delay_us(1);nRF2401_CLK1_PORT=0;delay_us(1); //写入最低配置位nRF2401_PWR_PORT=1;nRF2401_CS_PORT=0;nRF2401_CE_PORT=1; //进入收发模式、delay_us(300);}//===========================================================//====================数据发送=================================void nRF2401_SendData(unsigned char *Address,unsigned char DataBuffer){unsigned char i=4; nRF2401_PWR_PORT=1;nRF2401_CS_PORT=0;nRF2401_CE_PORT=1; //进入收发模式 delay_us(10);while(i--)nRF2401_SendByte(*Address++); //发送地址字节 nRF2401_SendByte(DataBuffer); //发送数据字节nRF2401_CE_PORT=0; //发射数据delay_us(300); //等待结束}
        
        
        
上一页 1 2 下一页

评论


技术专区

关闭