手里有几片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;
}