天线|RF射频
直播中

刘建华

7年用户 219经验值
私信 关注
[问答]

NRF24L01关闭ack应答后发送端status 为什么还是46?

开启ack应答的时候发送端的状态值就是46并且成功进入中断,接收方也可以接收数据, 后将ack应答关闭,就算把接收端断电,发送端仍然是46.....接收端都关了怎么可能还有数据进来,应该是2e才对,求大神指教





附上发送端代码:



void TX_Mode(void)

{               

NRF24L01_CE=0;     

   NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);

   NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);


   NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x00);     //disable ack

   NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x00); //disable 接收通道0

   NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x00);//disable 自动重发

   NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);      

   NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x07);  

   NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);    //发送模式

NRF24L01_CE=1;//CE值高

}



发送端中断代码:



sta=NRF24L01_Read_Reg(STATUS);

   printf("nSTATUS is:n");

   printf("%d%",sta);

NRF24L01_Write_Reg(WRITE_REG+STATUS,sta);  //clear STATUS

EXti->R=1<<5; //clear line5

回帖(5)

张涛

2020-7-21 10:13:57
你是不是没有读走之前的数据?

复位一下,还是这个情况么?
举报

刘埃生

2020-7-21 10:24:05

中断中加了例程里面读buffer的代码NRF24L01_RxPacket(tmp_buf)后读不出任何数据,在NRF24L01_RxPacket里面有清除RX FIFO 寄存器NRF24L01_Write_Reg(FLUSH_RX,0xff);,太诡异了,使能ack后status就能为0x30(数据发送完成中断和达到最大重发次数中断), 难道失能ack有什么特别需要注意的地方?
举报

李叱镡

2020-7-21 10:32:11

这个你找找其他参考例程看看吧.
举报

李红

2020-7-21 10:45:30
多谢这位兄台帮我跳坑,知道怎么关ack了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分