初级会员
- 积分
- 158
- 金钱
- 158
- 注册时间
- 2015-4-12
- 在线时间
- 13 小时
|
5金钱
手里有几片NRF2401(片子是正常的),按照原子个例程编写了底层驱动,在配置好SPI,和相关引脚之后,写入发送地址数据,然后再都出了来检验模块是不是正常,之前结果正常,可是后面再写入接收地址和发送地址时(地址数据没有问题,也正常发送了),可是在读出来时依然是之前检查时候的值,将初始化配置也和硬件检测放在一起,结果发现连检测时,写入的数据都读不出来,附上代码,请各位大侠帮帮忙,也就是这种时候特别感到无助,感觉要是有个老师就好了 。<br />
u8 NRF24L01_Check(void)<br />
{<br />
<br />
u8 buf[TX_ADR_WIDTH]={0x88,0x88,0x88,0x88,0x88};<br />
u8 i;<br />
SetSpeed(SPI_BaudRatePrescaler_256);<br />
NRF24L01_Write_Buf(W_REGISTER+TX_ADDR,buf,TX_ADR_WIDTH);//设置本地通道0要接收的地址<br />
buf[0]=0x01;buf[4]=0xff;<br />
NRF24L01_Read_Buf(R_REGISTER+TX_ADDR,buf,TX_ADR_WIDTH);<br />
for(i=0;i<TX_ADR_WIDTH;i++)<br />
{<br />
if(buf!=0x88)break;//读取数据检验,结果第一个数据就过不了<br />
}<br />
if(i!=TX_ADR_WIDTH)<br />
printf("未检测到无线模块!\r\n");<br />
else<br />
{ <br />
NRF24L01_REG(W_REGISTER+CONFIG,0x00);//主发送,收发完成中断,16CRC<br />
NRF24L01_Write_Buf(W_REGISTER+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//设置本地通道0要接收的地址<br />
NRF24L01_Write_Buf(W_REGISTER+TX_ADDR,(u8 *)TX_ADDRESS,TX_ADR_WIDTH);//设置发送时的本地地址<br />
NRF24L01_REG(W_REGISTER+EN_AA,0x00);//自动应答关闭<br />
NRF24L01_REG(W_REGISTER+EN_RXADDR,0x00);//设置默认通道<br />
NRF24L01_REG(W_REGISTER+SETUP_AW,RX_ADR_WIDTH);//设置接收地址长度<br />
NRF24L01_REG(W_REGISTER+SETUP_RETR,0x00);//自动重发关闭<br />
NRF24L01_REG(W_REGISTER+RF_CH,0x00);//2.4GHz<br />
NRF24L01_REG(W_REGISTER+RF_SETUP,0x0f);//2MHZ传输, 0dB发射<br />
NRF24L01_REG(W_REGISTER+RX_PW_P0,RX_PLOAD_WIDTH);//设置通道接收的数据长度<br />
NRF24L01_REG(W_REGISTER+CONFIG,0x0E);//主发送,收发完成中断,16CRC<br />
delay_ms(2);<br />
printf("无线模块已初始化!\r\n");<br />
NRF24L01_Read_Buf(TX_ADDR,buf,TX_ADR_WIDTH);<br />
for(i=0;i<TX_ADR_WIDTH;i++)<br />
{<br />
printf("%02x ",buf);<br />
}<br />
printf("\r\n");<br />
}<br />
return 0;<br />
}<br /> |
|