发 帖  
[问答]

NRF24L01发送方每发送4个字节接收方为什么只接收到一两个

2329 nRF24L01

发送方是原子哥的代码,只将TX_PLOAD_WIDTH从32改成了1。

请问这是什么问题?
0
2020-4-17 01:44:09   评论 分享淘帖 邀请回答 举报
5个回答

其中的if(TI) TI=0; 在发送完成遇到TI置高时清零TI。而main函数中又有这样的代码:


[C] 纯文本查看 复制代码
while(1){while(!nRF24L01_RxPacket(&Rx_Buf)); //等待接收数据 ,返回1则接收到数据 ,在等待接收数据期间,可以随时变成发送模式  // 通过串口发送数据SBUF=Rx_Buf;//while(!TI);  // 死于此}

while(!TI)还在等待TI置高。这就是为什么显示出来的字符数是一个或两个或……3,4都有可能。但是就是无法连续接收。这就是因为……人品!!有些时候中断吧TI清0的早,就显示一个,清0得晚就多几个。毕竟中断发生的时机虽然说都是在发送完成之后,但是实际上在发送完成的这个时刻main出于什么状态是不确定的。有些时候中断发生的是瞬间while已经发现了TI为高就过去了,有些时候中断发生while还没执行到判断就被中断打断了,之后中断清0了TI,while永远都出不来了。



虽然我之前也试过注释掉这个while,但也失败了,可以说是很多错误的集合吧。下面发出可用的RX_Mode函数和RxPacket函数,都是在C51下的代码。实际上这些代码也参照了原子哥的STM32的相关代码,看了他的接收模式配置和接收数据的流程。


[C] 纯文本查看 复制代码
void RX_Mode(void){    uchar buf[5]={0};CE = 0;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址SPI_WR_Reg(WRITE_REG + EN_AA, 01);     //  频道0自动ACK应答允许SPI_WR_Reg(WRITE_REG + EN_RXADDR,0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21 SPI_WR_Reg(WRITE_REG + RF_CH, 40);        //   设置信道工作为2.4GHZ,收发必须一致SPI_WR_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节SPI_WR_Reg(WRITE_REG + RF_SETUP, 0x0F);   //设置发射速率为2MHZ,发射功率为最大值0dBSPI_WR_Reg(WRITE_REG + CONFIG, 0x0F);//0x0F);CE = 1; Delay_n10us(20); //200us}//******************************************************************************************************///*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)//*功能:数据读取后放如rx_buf接收缓冲区中//******************************************************************************************************/uchar nRF24L01_RxPacket(unsigned char* rx_buf){    uchar flag=0;    uchar status; status=SPI_RD_Reg(NRFRegSTATUS);// 读取状态寄存其来判断数据接收状况SPI_WR_Reg(WRITE_REG+NRFRegSTATUS, status);   //接收到数据后RX_DR,TX_DS,MAX_RT都置高为1,通过写1来清除中断标志if(status & RX_OK)// 判断是否接收到数据{SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// read receive payload from RX_FIFO bufferdelayms(10);SPI_WR_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器flag =1;//读取数据完成标志 }return flag;}

以后会来发完整代码的。谢谢大家








2020-4-17 09:43:45 评论

举报

2020-4-17 09:56:22 评论

举报

2020-4-17 10:01:51 评论

举报

2020-4-17 10:07:47 评论

举报

2020-4-17 10:19:35 评论

举报

只有小组成员才能发言,加入小组>>

467个成员聚集在这个小组

加入小组

创建小组步骤

快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@huaqiu.com
关闭

站长推荐 上一条 /6 下一条

快速回复 返回顶部 返回列表
-

威廉希尔官方网站 社区

HarmonyOS威廉希尔官方网站 社区

RISC-V MCU威廉希尔官方网站 社区

FPGA开发者威廉希尔官方网站 社区

张飞电子威廉希尔官方网站 社区

-

OpenHarmony开源社区

OpenHarmony开源社区

-

嵌入式论坛

ARM威廉希尔官方网站 论坛

STM32/STM8威廉希尔官方网站 论坛

嵌入式威廉希尔官方网站 论坛

单片机/MCU论坛

RISC-V威廉希尔官方网站 论坛

瑞芯微Rockchip开发者社区

FPGA|CPLD|ASIC论坛

DSP论坛

-

电路图及DIY

电路设计论坛

DIY及创意

电子元器件论坛

专家问答

-

电源威廉希尔官方网站 论坛

电源威廉希尔官方网站 论坛

无线充电威廉希尔官方网站

-

综合威廉希尔官方网站 与应用

机器人论坛

USB论坛

电机控制

模拟威廉希尔官方网站

音视频威廉希尔官方网站

综合威廉希尔官方网站 交流

上位机软件(C/Python/Java等)

-

无线通信论坛

WIFI威廉希尔官方网站

蓝牙威廉希尔官方网站

天线|RF射频|微波|雷达威廉希尔官方网站

-

EDA设计论坛

PCB设计论坛

DigiPCBA论坛

Protel|AD|DXP论坛

PADS威廉希尔官方网站 论坛

Allegro论坛

multisim论坛

proteus论坛|仿真论坛

KiCad EDA 中文论坛

DFM|可制造性设计论坛

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量威廉希尔官方网站

传感威廉希尔官方网站

-

招聘/交友/外包/交易/杂谈

项目外包

供需及二手交易

工程师杂谈|交友

招聘|求职|工程师职场

-

官方社区

发烧友官方/活动

华秋商城

华秋电路