nrf24l01传输距离问题,求大神

关于NRF2401的接收与发送,怎么查看是否发送和接收了,要过程详细点 - Wireless当前位置:& &&&关于NRF2401的接收与发送,怎么查看是否发送和接收关于NRF2401的接收与发送,怎么查看是否发送和接收了,要过程详细点&&网友分享于:&&浏览:0次关于NRF2401的接收与发送,如何查看是否发送和接收了,要过程详细点。发送部分。
/**********************************************************************************************************/
void&nRF24L01_TxPacket(unsigned&char&*&tx_buf)
//StandBy&I模式
SPI_Write_Buf(WRITE_REG&+&RX_ADDR_P0,&TX_ADDRESS,&TX_ADR_WIDTH);&//&装载接收端地址
SPI_Write_Buf(WR_TX_PLOAD,&tx_buf,&TX_PLOAD_WIDTH);&
&//&装载数据
// SPI_RW_Reg(WRITE_REG&+&CONFIG,&0x0e);&&&
&//&IRQ收发完成中断响应,16位CRC,主发送
&//置高CE,激发数据发送
inerDelay_us(10);
//************************************主函数************************************************************
void&main(void)
uchar&temp&=0;
&&&&init_NRF24L01()&;
nRF24L01_TxPacket(TxBuf); //&Transmit&Tx&buffer&data
Delay(6000);
nRF24L01_TxPacket(TxBuf); //&Transmit&Tx&buffer&data
Delay(10000);&&&&&&//可变
SPI_RW_Reg(WRITE_REG+STATUS,0XFF);&&
Delay(8000);&
接收部分:
/*函数:void&SetRX_Mode(void)
/*功能:数据接收配置&
/****************************************************************************************************/
void&SetRX_Mode(void)
// SPI_RW_Reg(WRITE_REG&+&CONFIG,&0x0f);&&&
//&IRQ收发完成中断响应,16位CRC ,主接收
inerDelay_us(130);
/******************************************************************************************************/
/*函数:unsigned&char&nRF24L01_RxPacket(unsigned&char*&rx_buf)
/*功能:数据读取后放如rx_buf接收缓冲区中
/******************************************************************************************************/
unsigned&char&nRF24L01_RxPacket(unsigned&char*&rx_buf)
&&&&unsigned&char&revale=0;
sta=SPI_Read(STATUS); //&读取状态寄存其来判断数据接收状况
//&判断是否接收到数据
&&&&CE&=&0;&
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//&read&receive&payload&from&RX_FIFO&buffer
revale&=1;
//读取数据完成标志
SPI_RW_Reg(WRITE_REG+STATUS,sta);&&&//接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
//************************************串口初始化*********************************************************
void&StartUART(&void&)
//波特率4800
&&&&&SCON&=&0x50;
&&&&&TMOD&=&0x20;
&&&&&TH1&=&0xFA;
&&&&&TL1&=&0xFA;
&&&&&PCON&=&0x00;
&&&&&TR1&=&1;
//************************************通过串口将接收到数据发送给PC端**************************************
void&R_S_Byte(uchar&R_Byte)
&SBUF&=&R_B&&
&&&&&while(&TI&==&0&);
&& &TI&=&0;&&&&
//************************************主函数************************************************************
void&main(void)
uchar&RxBuf[32];
&&&&init_NRF24L01()&;
StartUART();
Delay(6000);
SetRX_Mode();
if(nRF24L01_RxPacket(RxBuf))
for(i=0;i&32;i++)
R_S_Byte(RxBuf[i]);
Delay(600);
Delay(600);
怎么在接收端没有任何反应,看了几天不知道问题错在哪了。若果知道请麻烦告知一下,详细点。------解决思路----------------------还有地址&频道&自动应答&方式&没有配置
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有&NRF24L01使用方法
秒后自动跳转到登录页
(奖励10下载豆)
快捷登录:
举报类型:
不规范:上传重复资源
不规范:标题与实际内容不符
不规范:资源无法下载或使用
其他不规范行为
违规:资源涉及侵权
违规:含有危害国家安全等内容
违规:含有反动/色情等内容
违规:广告内容
详细原因:
任何违反下载中心规定的资源,欢迎Down友监督举报,第一举报人可获5-10下载豆奖励。
cissp 450Q参考题库
七夕节-程序员表白源
运维必备Python基础
IT面试之2015届校招
新版Python官方入门
需求碎片化时代,从
The Swift Programm
NRF24L01使用方法
上传时间:
技术分类:
资源评价:
(1位用户参与评价)
已被下载&40&次
本文介绍了NRF24L01的使用方法
本资料共包含以下附件:
NRF24L01.pdf
(12位用户参与评价)
down友评价
51CTO下载中心常见问题:
1.如何获得下载豆?
1)上传资料
2)评论资料
3)每天在首页签到领取
4)购买VIP会员服务,无需下载豆下载资源
5)更多途径:点击此处
2.如何删除自己的资料?
下载资料意味着您已同意遵守以下协议:
1.资料的所有权益归上传用户所有
2.未经权益所有人同意,不得将资料中的内容挪作商业或盈利用途
3.51CTO下载中心仅提供资料交流平台,并不对任何资料负责
4.本站资料中如有侵权或不适当内容,请邮件与我们联系()
5.本站不保证资源的准确性、安全性和完整性, 同时也不承担用户因使用这些资料对自己和他人造成任何形式的伤害或损失
下载1289次
下载1809次
下载2278次
下载1773次
下载1127次
相关专题推荐
还记得童年时候我们经常留恋的这些经
Ruby是一种功能强大的面向对象的脚本
本专题资源是由《深入浅出WPF》作
本专题为您囊括了国外游戏设计与编程
随着网络的发展,各种网站层出不穷,
随着互联网的发展,个人网站层出不穷
Python是一种面向对象、直译式设计语
经常会看到一些比较不错的程序,如何
51CTO开发频道推出《开发月刊》电子杂
本套电子书包含北大青鸟网络教学的全
易语言是一门计算机程序语言。以“易
WPF是基于Vista的用户界面框架,它向
本专题为游戏制作教学视频,视频格式
本专题收集了tangible software solu
本课程针对很少或毫无编程经验的学生
中山大学Delphi面向对象程序设计(采
本周下载热点查看: 453|回复: 5
NRF24L01通信问题,丢包相当严重
高级会员, 积分 342, 距离下一级还需 4658 积分
主题帖子积分精华
阅读权限30
最近没事研究了一下网上说的很多的NRF24L01模块,在淘宝上买了几个,三块钱一个,这几天弄的可烦人了,数据丢包很严重,发送三个数据包,距离很近,接收模块最多能收到俩数据包, 发送接收距离放远了6m左右,发10个,收到1个就不错话不多说 上程序,我怀疑是我买的模块不行,还是这种模块就是这么个德行,真心感觉太烂了
主函数意思就是,上电复位 发送三个数据包后,就进入接收模式,我就是这么测试模块收发的
#include &rf2401.h&
#include &spi_init.h&
#include &stm32f10x.h&
#include&uart_init.h&
#include &delay.h&
u8 TX_ADDRESS[5]={0xe7,0xe7,0xe7,0xe7,0xe7};
//u8 RX_ADDRESS[5]={0xc2,0xc2,0xc2,0xc2,0xc2};
u8 tx_buf[10]={0,1,2,3,4,5,6,7,8,9};
u8 reciece_data[10]={0};
void rf2401_io_init()
&&& & & && & //**配置spi1 引脚为复用输出*////
& & & & GPIO_InitTypeDef GPIO_InitS
& & & & GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;& & & && && && &//选择& & & &
& & GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;& & & & //速度配置为2M
& & GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
& & GPIO_Init(GPIOA, &GPIO_InitStructure);& & & &
& & & & GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;& & & && && && &//选择& & & &
& & GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;& & & & //速度配置为2M
& & GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
& & GPIO_Init(GPIOA, &GPIO_InitStructure);
void rf2401_wr_reg(u8 addr,u8 data)
& &addr=addr|RF_WRITE_REG;
&&& & & &&&Clr_CS;
& & & &&&//& & & &&&delay_ms(80);
& &SPIx_ReadWriteByte(addr);
& &SPIx_ReadWriteByte(data);
& & & &&&Set_CS;
& & & &&&// delay_ms(80);
u8 rf2401_re_reg(u8 addr)
addr=addr|RF_READ_REG;
&&& & & &&&Clr_CS;
& &&&SPIx_ReadWriteByte(addr);
data=SPIx_ReadWriteByte(0);
& & & &&&Set_CS;
void&&rf2401_wr_buf(u8 reg, u8 *pBuf, u8 bytes )
Clr_CS; // Set CSN low, init SPI tranaction
SPIx_ReadWriteByte(reg); // Select register to write to and read status byte
Delay(10);
for(byte_ctr=0; byte_ctr& byte_ctr++) // then write all byte in buffer(*pBuf)
SPIx_ReadWriteByte(*(pBuf++));
& & & &&&Set_CS; // Set CSN high again
/**************************************************
函数:SPI_Read_Buf()
描述:从reg寄存器读出bytes个字节,通常用来读取接收通道
& &数据或接收/发送地址
*************************************************/
u8 rf2401_read_buf(u8 reg, u8 * pBuf, u8 bytes)
u8 status,
& &Clr_CS;& && && && && && &&&// CSN置低,开始传输数据
& &status = SPIx_ReadWriteByte(reg);& && & // 选择寄存器,同时返回状态字
& &for(i=0; i& i++)
& &&&pBuf[i] = SPIx_ReadWriteByte(0);& & // 逐个字节从nRF24L01读出
& &Set_CS;& && && && && && &&&// CSN拉高,结束数据传输
& &return(status);& && && && & // 返回状态寄存器
/**************************************************
函数:Check_ACK()
& & 检查接收设备有无接收到数据包,设定没有收到应答信
号是否重发
***************************************************/
u8 check_rx(void)
{& & & & u8 reg_
reg_staus= rf2401_re_reg(STATUS);
& & & & if (reg_staus&0x40==0)
& & & & return 0;
& & & & else
& & & & return 1;
void rf2401_init(void)
rf2401_io_init();
& & & & spi1_init();& & & &
& & & & delay_ms(5);
rf2401_wr_reg(&&EN_AA, 0x00); // 使能自动应答
rf2401_wr_reg(&&SETUP_AW, 0x02); //地址宽度设置为5个字节
rf2401_wr_reg(&&SETUP_RETR, 0x10); //重发延时 500us + 86us, 重发10次
rf2401_wr_reg(&&RF_CH, 100); // Select RF channel 40
rf2401_wr_reg(&&RF_SETUP, 0x03); // TX_PWR:0dBm, Datarate:2Mbps,LNA:HCURR& & & &
&&///**************************************************
//函数:RX_Mode()
//描述:这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
//*************************************************/
void RX_Mode(void)
//Clr_CE;& & & &
rf2401_wr_buf(RF_WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);& & & & //设置发送地址和宽度
rf2401_wr_buf(RF_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);& & & & //设置接收地址和宽度
//rf2401_wr_buf(RF_WRITE_REG + RX_ADDR_P1, TX_ADDRESS, TX_ADR_WIDTH);& & & & //设置接收地址和宽度
rf2401_wr_reg(&&EN_RXADDR, 0x01); //使能接收通道0
rf2401_wr_reg(&&RX_PW_P0, TX_PLOAD_WIDTH);& & & &&&//设置有效数据宽度
//rf2401_wr_reg(&&RX_PW_P1, TX_PLOAD_WIDTH);& & & &&&//设置有效数据宽度
rf2401_wr_reg(&&CONFIG, 0x0b); // irq引脚显示中断信息&&crc使能&&,上电接收模式
Set_CE; // Set CE pin high to enable RX device
delay_ms(15);
// /**************************************************
//函数:TX_Mode()
//& & 这个函数设置nRF24L01为发送模式,(CE=1持续至少10us),
// 130us后启动发射,数据发送结束后,发送模块自动转入接收
// 模式等待应答信号。
//*************************************************/
void TX_Mode(void)
& & & && &&&u8 rf_
rf2401_wr_buf(RF_WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);& & & & //设置发送地址和宽度
rf2401_wr_buf(RF_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);& & & & //设置接收地址和宽度
rf2401_wr_reg(&&FLUSH_TX , NOP); // irq引脚显示中断信息&&crc使能&&,上电接收模式
rf2401_wr_buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); //设置发送换出去有效字节数目& & & &
rf2401_wr_reg( CONFIG, 0x0a); //关闭 crc& &打开上电发送
Set_CE; // Set CE pin high to enable RX device
delay_ms(15); & & & &
& &//rf2401_wr_reg(&&STATUS, rf2401_re_reg(0x07)); //地址宽度设置为5个字节
rf_status= rf2401_re_reg(STATUS);
uart2_hex_to_16asiic(rf_status);
put_String2(&\n&);
& &if (rf_status&0x10)
& && & & && &rf2401_wr_reg( STATUS, rf_status); //关闭 crc& &打开上电发送
void rf2401_send_databag(void)
TX_Mode();& & & &
void rf2401_recieve_dis(void)
&&u8 i,rf_
& & & & RX_Mode();
&&rf_status= rf2401_re_reg(0x07);
&&//uart2_hex_to_16asiic(rf_status);
//put_String2(&\n&);
if (rf_status&0x40)
&&rf2401_read_buf(RD_RX_PLOAD,reciece_data,TX_PLOAD_WIDTH);
&&for (i=0;i&10;i++)
uart2_hex_to_16asiic(reciece_data[i]);& & & & }
rf2401_wr_reg(&&FLUSH_RX, NOP); // irq引脚显示中断信息&&crc使能&&,上电接收模式
rf2401_wr_reg(&&STATUS, rf_status); //地址宽度设置为5个字节
int main(void)
clk_init();
& &uart2_init ();
& &put_String2(&串口2接收正常\n&);
& &rf2401_init();
for(t=0;t&3;t++)
&&& & & & rf2401_send_databag ();
& &while (1)
&&{& & & &&&
rf2401_recieve_dis();& & & &&&
& & & & & & & && &}
主题帖子积分精华
阅读权限40
尝试设置下NRF24L01的增益
兼听则明,偏信则暗
兼听则明,偏信则暗主题帖子积分精华
阅读权限40
& &估计你买到那种不太好的了,我自己买过安信可4块多的的用来做遥控飞机玩,百把米飞飞没有失控过,也买过一个便宜的但是就经常有问题
南蛮主题帖子积分精华
阅读权限40
可能受WIFI等信号干扰了,换个频道试试。纯属猜测!
主题帖子积分精华
阅读权限50
是透传么?先确认工作频率没有问题,再适当降低发送速率。大多数很烂的无线模块一般只要工作频率没太大的偏差,近距离基本都没有什么大问题。
主题帖子积分精华
阅读权限30
买台产或进口的,速率设为最低,功率设为最高,频道最好有自适应算法
网站内容纯属虚构,如有雷同,实属巧合。
各嘉宾的言论纯属个人观点,不代表一乐网的立场。
Powered by注册时间最后登录阅读权限70积分2065精华0帖子
金牌会员, 积分 2065, 距离下一级还需 935 积分
human2010 发表于
我的意识是AVR自带SPI,还是软件模拟SPI?谢谢!
如果你发现引用了SPI.h的,就应该是硬件SPI,如果是软件SPI,就没有这个头文件。IRQ中断,是用的硬件中断,所以申明引脚功能的时候都没有定义到IRQ的脚。
注册时间最后登录阅读权限20积分129精华0帖子
注册会员, 积分 129, 距离下一级还需 71 积分
mxhhaixin 发表于
是硬件SPI接口。Arduino上自带硬件SPI接口。
谢谢!我的IO对应的不是硬件SPI接口,也不想跳线了。或许以后可以用用,先收藏吧!
注册时间最后登录阅读权限20积分129精华0帖子
注册会员, 积分 129, 距离下一级还需 71 积分
maxims 发表于
如果你发现引用了SPI.h的,就应该是硬件SPI,如果是软件SPI,就没有这个头文件。IRQ中断,是用的硬件中断 ...
恕我愚昧!我定义了IRQ,并且该引脚的线,也对应接上了。按道理来说用硬件中断,是没问题的啊!
难道我理解有误?望指点!初学者见笑!
注册时间最后登录阅读权限70积分2065精华0帖子
金牌会员, 积分 2065, 距离下一级还需 935 积分
human2010 发表于
恕我愚昧!我定义了IRQ,并且该引脚的线,也对应接上了。按道理来说用硬件中断,是没问题的啊!
难道我理 ...
硬件中断,肯定有硬件的引脚,那么就固定到某个引脚上了的。你是没有办法再定义了。
就像mcu芯片一样,硬件定义电源和地引脚,晶体引脚,PWM,模拟端口,都是一些固定的引脚,你在怎么定义端口,也最多只能是复用端口,而不可以把这个硬件已经固定了的脚挪个顺序来用。
注册时间最后登录阅读权限20积分129精华0帖子
注册会员, 积分 129, 距离下一级还需 71 积分
maxims 发表于
硬件中断,肯定有硬件的引脚,那么就固定到某个引脚上了的。你是没有办法再定义了。
就像mcu芯片一样,硬 ...
可能我描述有问题,您说的我明白!
我现在用的是软件模拟SPI接口与NRF24L01通讯。
我说的中断是指NRF24L01的硬件IRQ引脚,当它连接AVR单片机。
我要使用此功能,在单片机程序中肯定是要先定义,在使用咯!
可能您以为我所说的是单片中断,是吧!
感谢您的细心回答!先学习了!
注册时间最后登录阅读权限20积分129精华0帖子
注册会员, 积分 129, 距离下一级还需 71 积分
以下是接收程序:
#include &NRF24L01.h&
#define TX_ADR_WIDTH& & 5& &
#define TX_PLOAD_WIDTH&&32&&
unsigned char TX_ADDRESS[TX_ADR_WIDTH]&&=
&&0x34,0x43,0x10,0x10,0x01
unsigned char rx_buf[TX_PLOAD_WIDTH];
unsigned char tx_buf[TX_PLOAD_WIDTH];
#define CE& && & 3
#define CSN& && &2
#define SCK& && &5
#define MOSI& &&&4
#define MISO& &&&6
#define IRQ& && &7
//*********************************************
void setup()
&&pinMode(CE,&&OUTPUT);
&&pinMode(SCK, OUTPUT);
&&pinMode(CSN, OUTPUT);
&&pinMode(MOSI,&&OUTPUT);
&&pinMode(MISO, INPUT);
&&pinMode(IRQ, INPUT);
&&Serial.begin(9600);
&&NRF24L01_init();& &
&&//SPI_Read_Buf(RD_RX_PLOAD, rx_buf, TX_PLOAD_WIDTH);//接收数据&&
void loop()
&&SetRX_Mode();
&&int i=SPI_Read(CD);//读取载波检测
&&if(i)//如果接收到载波,
& &// SPI_RW_Reg(FLUSH_RX,0);
& & Serial.println(&get&);
& & Serial.println(i);& &
& & delay(1000);
& & Serial.println(&lost&);
& & Serial.println(i);
& & delay(10);
void NRF24L01_init(void)
&&digitalWrite(CE,0);
&&digitalWrite(CSN,1);
&&digitalWrite(SCK,0);
&&digitalWrite(IRQ,1);
&&SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
&&SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device
&&SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);& && &// Enable Auto.Ackipe0
&&SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);&&// Enable Pipe0
&&SPI_RW_Reg(WRITE_REG + RF_CH, 40);& && &&&// Select RF channel 40
&&SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // 设置接收数据长度,本次设置为32字节
&&SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);& &// TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
&&//SPI_Read_Buf(RD_RX_PLOAD, rx_buf, TX_PLOAD_WIDTH);//接收数据
//**********************接收模式*****************************
void SetRX_Mode(void)
&&digitalWrite(CE,0);
&&SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);// IRQ收发完成中断响应,16位CRC,接收模式& && && && && &
&&digitalWrite(CE,1);
&&delay(1);& &
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
&&unsigned char revale=0;
&&unsigned char status=SPI_Read(STATUS);& && &&&// 读取状态寄存其来判断数据接收状况
&&if(status&RX_DR)& && && && && && && && && && &&&// 判断是否接收到数据(RX_DR接收数据中断)
& & digitalWrite(CE,0);& && && && && && && && & //SPI使能
& & SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读取数据
& & revale =1;& && && && && && && && &//读取数据完成标志
&&SPI_RW_Reg(WRITE_REG+STATUS,0xff);& &//接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
/**************************************************
* Function: SPI_RW();
* Description:
* Writes one unsigned char to nRF24L01, and return the unsigned char read
* from nRF24L01 during write, according to SPI protocol
**************************************************/
unsigned char SPI_RW(unsigned char Byte)
&&for(i=0;i&8;i++)& && && && && && && & // output 8-bit
& & if(Byte&0x80)
& && &digitalWrite(MOSI, 1);
& && &digitalWrite(MOSI, 0);
& & digitalWrite(SCK, 1);
& & Byte &&= 1;& && && && && && && && & // shift next bit into MSB..
& & if(digitalRead(MISO) == 1)
& && &Byte |= 1;& && & & & & && && && && && &&&// capture current MISO bit
& & digitalWrite(SCK, 0);
&&return(Byte);& && && &&&& & & && && && &// return read unsigned char
/**************************************************/
/**************************************************
* Function: SPI_RW_Reg();
* Description:
* Writes value 'value' to register 'reg'
/**************************************************/
unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)
&&digitalWrite(CSN, 0);& && && && && && & // CSN low, init SPI transaction
&&status = SPI_RW(reg);& && && && && && & // select register
&&SPI_RW(value);& && && && && && && && &&&// ..and write value to it..
&&digitalWrite(CSN, 1);& && && && && && & // CSN high again
&&return(status);& && && && && && & // return nRF24L01 status unsigned char
/**************************************************/
/**************************************************
* Function: SPI_Read();
* Description:
* Read one unsigned char from nRF24L01 register, 'reg'
/**************************************************/
unsigned char SPI_Read(unsigned char reg)
&&unsigned char reg_
&&digitalWrite(CSN, 0);& && && &&&// CSN low, initialize SPI communication...
&&SPI_RW(reg);& && && && && && & // Select register to read from..
&&reg_val = SPI_RW(0);& && && &&&// ..then read register value
&&digitalWrite(CSN, 1);& && && & // CSN high, terminate SPI communication
&&return(reg_val);& && && && && &// return register value
/**************************************************/
/**************************************************
* Function: SPI_Read_Buf();
* Description:
* Reads 'unsigned chars' #of unsigned chars from register 'reg'
* Typically used to read RX payload, Rx/Tx address
/**************************************************/
unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
&&unsigned char status,i;
&&digitalWrite(CSN, 0);& && && && && && &// Set CSN low, init SPI tranaction
&&status = SPI_RW(reg);& && & & & & && &&&// Select register to write to and read status unsigned char
&&for(i=0;i&i++)
& & pBuf[i] = SPI_RW(0);& & // Perform SPI_RW to read unsigned char from nRF24L01
&&digitalWrite(CSN, 1);& && && && && && & // Set CSN high again
&&return(status);& && && && && && &// return nRF24L01 status unsigned char
/**************************************************/
/**************************************************
* Function: SPI_Write_Buf();
* Description:
* Writes contents of buffer '*pBuf' to nRF24L01
* Typically used to write TX payload, Rx/Tx address
/**************************************************/
unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
&&unsigned char status,i;
&&digitalWrite(CSN, 0);& && && && && && &// Set CSN low, init SPI tranaction
&&status = SPI_RW(reg);& && && && & // Select register to write to and read status unsigned char
&&for(i=0;i& i++)& && && && & // then write all unsigned char in buffer(*pBuf)
& & SPI_RW(*pBuf++);
&&digitalWrite(CSN, 1);& && && && && && & // Set CSN high again
&&return(status);& && && && && && &// return nRF24L01 status unsigned char
注册时间最后登录阅读权限20积分129精华0帖子
注册会员, 积分 129, 距离下一级还需 71 积分
经再次调试,只有发送调试OK,接收还是NG.悲剧!
注册时间最后登录阅读权限70积分2065精华0帖子
金牌会员, 积分 2065, 距离下一级还需 935 积分
human2010 发表于
可能我描述有问题,您说的我明白!
我现在用的是软件模拟SPI接口与NRF24L01通讯。
我说的中断是指NRF24 ...
你还是用我调试成功的那个帖子里边的代码来测试,不要去修改任何代码,只用按照它定义的接法去接你的硬件,记住nRF24L01的IRQ脚直接连到你的主控板上的0号硬件中断口上。再试试……我一会儿用Leonardo板子试试接收,如成功了,就告诉你接线顺序,只要测试成功一次了,后边怎么修改代码就简单了
注册时间最后登录阅读权限20积分96精华0帖子
注册会员, 积分 96, 距离下一级还需 104 积分
human2010 发表于
经再次调试,只有发送调试OK,接收还是NG.悲剧!
我的那个程序没有问题的。那个是模拟SPI,模拟SPI是借用别人写的。模拟SPI就是用普通的I/O口去模拟SPI,任何数字脚或者模拟脚都可以使用。你在那个nrf24l01.h里面修改引脚再插到对应的引脚上去完全没问题。经过我3周多的钻牛角尖之后,我目前猜测是2560板子的PCB布线有问题,影响了高频通信。我也只是猜测。因为我本身自己焊了三块UNO自制小板子,其中2块收发成功,有一块不行,那一块跟2560一样也是只能发不能收。已排除了虚焊和硬件的问题,所以很可能是我布线不好干扰了通信。UNO那块板子任你怎么设引脚收跟发都是没问题的,2560就不行,
注册时间最后登录阅读权限20积分129精华0帖子
注册会员, 积分 129, 距离下一级还需 71 积分
keyosa 发表于
我的那个程序没有问题的。那个是模拟SPI,模拟SPI是借用别人写的。模拟SPI就是用普通的I/O口去模拟SPI,任 ...
谢谢您提醒!我重新买了块UNO板子
Powered by}

我要回帖

更多关于 nrf24l01中文资料 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信