本帖最后由 指端轻语 于 2013-5-24 00:20 编辑
好吧中午发的帖子没人理。我这么问吧
1、A模块通过无线模块向B模块发送一条指令,B接收到了之后将自己的一些数据发给A模块;
2、紧接步骤1,B模块也向A模块发送一条指令,A模块接收到之后做某个特定的动作;
3、重复以上两步骤
以上过程能成功么?
我现在遇到的问题是,1能成功,但是执行2步骤时需要连续重复3-4次执行才能成功,成功之后再进行1步骤又不会成功,多试几次又会成功·····很郁闷的说
据说这个问题是由于无线模块在发送完数据后还会一直不停地发送···我试了以下三种方法都不行
1.每次发送完设置ce=0也不行。
2.每次发送完让它成待机模式行不行。
3.每次发送完马上设成接收模式,接收完马上设成发送模式,也不行。
不会自动重发的问题吧,我都没建立自动重发功能
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
A:
//3 使能AUTO ACK
nrf24_Writer_REG(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
//4 使能PIPE0
nrf24_Writer_REG(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
//5 配置自动重发次数
nrf24_Writer_REG(WRITE_REG + SETUP_RETR, 0x2f); // 500us + 86us, 10 retrans...1a(0xff发射超时最大70MS,发射最小只要1MS)
B:
//3 使能AUTO ACK
nrf24_Writer_REG(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
//4 使能PIPE0
nrf24_Writer_REG(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
A发射成功没有要看REG 0x07,如A模块启动发送后
void nrf24_Send_Data(int8_t *pbuf, uint8_t len)
{
Standby_Mode_1(); //StandBy I模式
//多字节写入是从低到高字节
nrf24_Write_Buf(WRITE_REG + RX_ADDR_P0, (int8_t*)Tx_addr, TX_ADR_WIDTH); // 装载接收端地址
nrf24_Writer_REG(FLUSH_TX, 0x00);
//写TX有效数据,1-32字节,写操作从字节0开始
nrf24_Write_Buf(WR_TX_PLOAD, pbuf, len); // Writes data to TX payload
nrf24_Writer_REG(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
CE=1; //置高CE,激发数据发送
}
下面就开始查询REG 0x07的状态,再根据状态做处理:
int8_t Get_RF_Status(void)
{
uint8_t status;
int8_t ret;
status = nrf24_Read_REG(STATUS);
if (status & 0x10)
{//数据多次重发,无ACK
nrf24_Writer_REG(FLUSH_TX, 0);
nrf24_Writer_REG(FLUSH_RX, 0);
ret = -1; //再启动A模块发送数据
}
else if (status & 0x20)
{//发送成功
ret = 0; //转到接收模式
}
else if (status & 0x40)
{//收到数据
ret = 1;//转到发送模式
}
status = nrf24_Read_REG(STATUS);
nrf24_Writer_REG(WRITE_REG + STATUS, status);
return ret;
}
一周热门 更多>