跪求大神解啊,NRF24L01 接收问题
时间:10-02
整理:3721RD
点击:
用了好几天时间把发送调好,可是接收怎么也调不好,求指导啊
NRF24L01肯定是好的
发送部分的mcu是15L204EA 每次发送后STATUS=0X2E FIFO_STATUS=0X11; 寄存器配置是 EN_AA =0X00;
EN_RXADDR=0X01; SETUP_RETR=0X00;自动无限循环重发
接收部分是89c52 贴程序啊
void main(void)
{
unsigned char tf =0;
init_io();
init_lcd();
LED1 = 0;
LED2 = 0;
Delay(6000);
LED1 = 1;
LED2 = 1;
while(1)
{
KEY2=1;
KEY1=1;
while(KEY2==0||KEY1 ==0)
{
IRQ=1;
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(KEY1 ==0)
{
TxBuf[0] = 0xAA ;
}
else
if(KEY2 ==0 )
{
TxBuf[0] = 0x55 ;
}
nRF24L01_TxPacket(TxBuf);
mark_tx();
tf = 1;
} //以上是发送部分 正常
if(tf)
{
tf=0;
SetRX_Mode(); //接收模式
IRQ=1;
while(IRQ==0);
inerDelay_us(400);
}
IRQ=1;
if(IRQ==0) //现在就是卡在这里了 IRQ永远不等于0,
{
LED2=0;
sta=SPI_Read(STATUS); //读取状态寄存器
display(); //1602用16进制显示状态寄存器
SPI_RW_Reg(WRITE_REG+STATUS,0xff); //清楚状态寄存器
if(sta&0x40) //判断状态寄存器是不是的RX_DR是不是置1
{
SPI_Read_Buf(RD_RX_PLOAD,RxBuf,TX_PLOAD_WIDTH); //数据读到RxBuf
if( RxBuf[0]==0xAA)
{
LED2=0;
Delay(6000);
LED2=1;
}
else
if( RxBuf[0]==0x55)
{
LED2=0;
Delay(6000);
LED2=1;
}
RxBuf[0]=0;
}
else //如果Rx_DR没有置1 则清除所有状态和FLUSH
{
CLR_ALL();
SetRX_Mode();
IRQ=1;
while(IRQ==0);
}
}
display();
}
}
NRF24L01肯定是好的
发送部分的mcu是15L204EA 每次发送后STATUS=0X2E FIFO_STATUS=0X11; 寄存器配置是 EN_AA =0X00;
EN_RXADDR=0X01; SETUP_RETR=0X00;自动无限循环重发
接收部分是89c52 贴程序啊
void main(void)
{
unsigned char tf =0;
init_io();
init_lcd();
LED1 = 0;
LED2 = 0;
Delay(6000);
LED1 = 1;
LED2 = 1;
while(1)
{
KEY2=1;
KEY1=1;
while(KEY2==0||KEY1 ==0)
{
IRQ=1;
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(KEY1 ==0)
{
TxBuf[0] = 0xAA ;
}
else
if(KEY2 ==0 )
{
TxBuf[0] = 0x55 ;
}
nRF24L01_TxPacket(TxBuf);
mark_tx();
tf = 1;
} //以上是发送部分 正常
if(tf)
{
tf=0;
SetRX_Mode(); //接收模式
IRQ=1;
while(IRQ==0);
inerDelay_us(400);
}
IRQ=1;
if(IRQ==0) //现在就是卡在这里了 IRQ永远不等于0,
{
LED2=0;
sta=SPI_Read(STATUS); //读取状态寄存器
display(); //1602用16进制显示状态寄存器
SPI_RW_Reg(WRITE_REG+STATUS,0xff); //清楚状态寄存器
if(sta&0x40) //判断状态寄存器是不是的RX_DR是不是置1
{
SPI_Read_Buf(RD_RX_PLOAD,RxBuf,TX_PLOAD_WIDTH); //数据读到RxBuf
if( RxBuf[0]==0xAA)
{
LED2=0;
Delay(6000);
LED2=1;
}
else
if( RxBuf[0]==0x55)
{
LED2=0;
Delay(6000);
LED2=1;
}
RxBuf[0]=0;
}
else //如果Rx_DR没有置1 则清除所有状态和FLUSH
{
CLR_ALL();
SetRX_Mode();
IRQ=1;
while(IRQ==0);
}
}
display();
}
}
求大神解答,,
接收寄存器是 EN_AA =0X00;
EN_RXADDR=0X01;
PCB打样找华强 http://www.hqpcb.com 样板2天出货
现在就是卡在这里了 IRQ永远不等于0 这句上一行IRQ=1;干什么的,不卡那就不正常了
这个IRQ是检测有没有收到信息,如果收到会置0
我修改掉这个也收不到信息
问题解决了,是因为mcu 速度差太多了时序不对
请问时序问题怎么解决的?
请问小编,设定发射端寄存器EN_AA =0X00; EN_RXADDR=0X01; SETUP_RETR=0X00,但是每次发送完读取寄存器STATUS读到的不是0x2E而是0x1F是什么情况...小编能指教一下吗?用的MCU是C8051f41
我也想知道为什么。