天线|RF射频
直播中

邢钊楚

8年用户 183经验值
私信 关注
[问答]

NRF24L01无线通信不能写入寄存器

手里有几片NRF2401(片子是正常的),按照原子个例程编写了底层驱动,在配置好SPI,和相关引脚之后,写入发送地址数据,然后再都出了来检验模块是不是正常,之前结果正常,可是后面再写入接收地址和发送地址时(地址数据没有问题,也正常发送了),可是在读出来时依然是之前检查时候的值,将初始化配置也和硬件检测放在一起,结果发现连检测时,写入的数据都读不出来,附上代码,请各位大侠帮帮忙,也就是这种时候特别感到无助,感觉要是有个老师就好了 。

u8 NRF24L01_Check(void)

{



u8 buf[TX_ADR_WIDTH]={0x88,0x88,0x88,0x88,0x88};

u8 i;

SetSpeed(SPI_BaudRatePrescaler_256);

NRF24L01_Write_Buf(W_REGISTER+TX_ADDR,buf,TX_ADR_WIDTH);//设置本地通道0要接收的地址

buf[0]=0x01;buf[4]=0xff;

NRF24L01_Read_Buf(R_REGISTER+TX_ADDR,buf,TX_ADR_WIDTH);

for(i=0;i
{

if(buf!=0x88)break;//读取数据检验,结果第一个数据就过不了

}

if(i!=TX_ADR_WIDTH)

printf("未检测到无线模块!rn");

else

{

NRF24L01_REG(W_REGISTER+CONFIG,0x00);//主发送,收发完成中断,16CRC

NRF24L01_Write_Buf(W_REGISTER+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//设置本地通道0要接收的地址

NRF24L01_Write_Buf(W_REGISTER+TX_ADDR,(u8 *)TX_ADDRESS,TX_ADR_WIDTH);//设置发送时的本地地址

NRF24L01_REG(W_REGISTER+EN_AA,0x00);//自动应答关闭

NRF24L01_REG(W_REGISTER+EN_RXADDR,0x00);//设置默认通道

NRF24L01_REG(W_REGISTER+SETUP_AW,RX_ADR_WIDTH);//设置接收地址长度

NRF24L01_REG(W_REGISTER+SETUP_RETR,0x00);//自动重发关闭

NRF24L01_REG(W_REGISTER+RF_CH,0x00);//2.4GHz

NRF24L01_REG(W_REGISTER+RF_SETUP,0x0f);//2MHZ传输, 0dB发射

NRF24L01_REG(W_REGISTER+RX_PW_P0,RX_PLOAD_WIDTH);//设置通道接收的数据长度

NRF24L01_REG(W_REGISTER+CONFIG,0x0E);//主发送,收发完成中断,16CRC

delay_ms(2);

printf("无线模块已初始化!rn");

NRF24L01_Read_Buf(TX_ADDR,buf,TX_ADR_WIDTH);

for(i=0;i
{

printf("%02x  ",buf);

}

printf("rn");

}

return 0;

}

回帖(1)

李子月

2020-4-17 10:19:35
帮顶!!!!
举报

更多回帖

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