中级会员
- 积分
- 362
- 金钱
- 362
- 注册时间
- 2015-9-24
- 在线时间
- 41 小时
|
5金钱
发送的status的TX_DS和MAX_RT发送完成后已经置1了,我也清除了标志位,确定数据发送成功。但是接收端接收不成功数据,有时能接收到数据,但串口显示出来的数据是乱码....... 是我的延时问题吗?但是修改了也没多大变化。求大神帮忙解决!!!!<br />
<br />
<br />
void NRF24L01_Set_RxMode()<br />
{<br />
ClrCE; <br />
<br />
NRF24L01_Write_TxData(W_REGISTER+RX_ADDR_P0, TxAddr, TX_ADDR_WITDH); <br />
<br />
NRF24L01_Write_Reg(W_REGISTER+EN_AA,0x01); /* 使能接收通道0自动应答 */<br />
NRF24L01_Write_Reg(W_REGISTER+EN_RXADDR,0x01); /* 使能接收通道0 */<br />
NRF24L01_Write_Reg(W_REGISTER+RF_CH,0x40); /* 选择射频通道0x40 */<br />
NRF24L01_Write_Reg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH); /* 接收通道0选择和发送通道相同有效数据宽度 */<br />
NRF24L01_Write_Reg(W_REGISTER+RF_SETUP,0x07); /* 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益 */<br />
NRF24L01_Write_Reg(W_REGISTER+CONFIG,0x0f); /* CRC使能,16位CRC校验,上电 */ <br />
SetCE;<br />
Delay(0xff);<br />
<br />
}<br />
<br />
<br />
unsigned char NRF24L01_RevData(unsigned char *RevData)<br />
{<br />
u8 RevFlags = 1;<br />
u8 sta;<br />
<br />
sta = NRF24L01_Read_Reg(R_REGISTER+STATUS); /* 读取状态寄存器的值 */<br />
if(sta & 0x40) /* 判断是否接收到数据 */<br />
{<br />
ClrCE; <br />
NRF24L01_Read_RxData(R_RX_PAYLOAD,RevData,RX_DATA_WITDH); /* 从RXFIFO读取4位数据 */<br />
<br />
/* 接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志 */<br />
NRF24L01_Write_Reg(W_REGISTER+STATUS,0xff); <br />
<br />
ClrCSN;<br />
NRF24L01_RW(FLUSH_RX); /* 用于清空FIFO */<br />
SetCSN; <br />
<br />
RevFlags = 0; <br />
}<br />
<br />
return(RevFlags);<br />
}<br />
<br />
<br />
<br />
<br />
void main(void)<br />
{<br />
<br />
LED_Init(LED3);<br />
UART_Init();<br />
NRF24L01_Init();<br />
LED_Off(LED3);<br />
while (1)<br />
{<br />
<br />
while(NRF24L01_Check()) //判断nrf24l01是否连接<br />
{<br />
Send_Str(Data2);<br />
}<br />
<br />
NRF24L01_Set_RxMode();<br />
if (!(NRF24L01_RevData(RecBuf))) <br />
{<br />
LED_On(LED3);<br />
Send_Str(RecBuf);<br />
}<br />
}<br />
} <br />
<br /> |
最佳答案
查看完整内容[请看2#楼]
回复【4楼】正点原子:
---------------------------
行了 原来还是发送没成功 网上查到有人说nrf24l01上电后要等待3ms后在进行初始化 所以初始化前加了个延时
又再模块初始化那里加了个清除中断标志和清除FIFO的语句 最好两个模块数据交换成功
|