初级会员
- 积分
- 119
- 金钱
- 119
- 注册时间
- 2015-9-21
- 在线时间
- 19 小时
|
1金钱
本帖最后由 tangzhaowei 于 2016-8-29 14:48 编辑
//发送程序
void NRFSetTxMode(u8*TxDate)
{
CE=0;
NRFWriteTxDate(WRITE_REG+TX_ADDR,TxAddr,5); //发送地址设置
NRFWriteTxDate(WRITE_REG+RX_ADDR_P0,TxAddr,5);
NRFWriteTxDate(W_TX_PAYLOAD,TxDate,4); //写入数据
NRFWriteReg(WRITE_REG+EN_AA,0x01); //设置为0X00就能发送成功,返回0X2E
NRFWriteReg(WRITE_REG+EN_RXADDR,0x01); //使能接受通道0应答
NRFWriteReg(WRITE_REG+SETUP_RETR,0x0a); //自动重发设置
NRFWriteReg(WRITE_REG+RF_CH,0x40); //射频通道设置
NRFWriteReg(WRITE_REG+RF_SETUP,0x07); //传输设置速率
NRFWriteReg(WRITE_REG+CONFIG,0x0e); //上电,发射模式
CE=1;
delay_ms(100);
}
u8 CheckACK()
{
sta=NRFReadReg(STATUS);
UART1_sendchar(sta); //打印状态值
if(sta&0x30) // STATUS寄存器的4、5位置1
{
NRFWriteReg(WRITE_REG+STATUS,0xff); // 清除TX_DS或MAX_TR中断标志
CSN=0;
NRFSPI(FLUSH_TX);//清空FIFO
CSN=1;
return(0);
}
else
return(1);
}
void main()
{
unsigned char i=0;
gpio_init();
Init_UART1();
delay_ms(100);
NRF24L01Int(); //初始化引脚
delay_ms(10);
NRF24L01Int();
while (1)
{
NRFSetTxMode(TxDate);//发送数据
while(CheckACK()); //检测是否发送完毕
}
}
//接受程序
void NRFSetRXMode()
{
CE=0;
NRFWriteTxDate(WRITE_REG+RX_ADDR_P0,TxAddr,5); //接受通道0使用
NRFWriteReg(WRITE_REG+EN_AA,0x01); //使能通道0应答
NRFWriteReg(WRITE_REG+EN_RXADDR,0x01); //使能接受通道0
NRFWriteReg(WRITE_REG+RF_CH,0x40); //选择射频通道
NRFWriteReg(WRITE_REG+RX_PW_P0,4); //通道的有效数据宽度
NRFWriteReg(WRITE_REG+RF_SETUP,0x07); //数据传输数率
NRFWriteReg(WRITE_REG+CONFIG,0x0f); //上电、接受模式
CE = 1;
delay_ms(10);
}
void GetDate()
{
u8 i;
sta=NRFReadReg(STATUS);
if(sta%0x40) //是否接受到数据
{
CE=0;
NRFReadRxDate(R_RX_PAYLOAD,rx_buf,4); //读数据
for(i=0;i<4;i++)
UART1_sendchar(rx_buf); //打印给串口
NRFWriteReg(WRITE_REG+STATUS,0xff); //清状态寄存器
CSN=0;
NRFSPI(FLUSH_RX); //清空FIFO
CSN=1;
}
}
void main()
{
u8 i=0;
gpio_init();
Init_UART1();
delay_ms(100);
NRF24L01Int();
delay_ms(100);
while (1)
{
NRFSetRXMode();//设为接收模式
GetDate();//接收数据
}
}
现象:1:2个模块写在某一寄存器写数据,再读出来是一样的(说明读写时序和24L01模块是好的,对吧?)
2:2个模块都烧写发射程序,改这句 "NRFWriteReg(WRITE_REG+EN_AA,0x00); //不使能通道0应答”,改为0x00,取消自动应答后都能发射出去,状态值为0x2e.
问题:
烧写上面的发射程序和接受程序“NRFWriteReg(WRITE_REG+EN_AA,0x01);”都使能自动应答,发射端:发射状态值1E,接受端:接受不到数据。请问我的代码有问题么?该怎么调试?我的方法没错吧?
|
|