初中生
最后登录1970-1-1
在线时间 小时
注册时间2015-1-19
|
楼主 |
发表于 2015-6-26 15:06:50
|
显示全部楼层
我后面测了别人写的一个程序,在2M的通讯速率下发现比野火的官方给程序的传输速率高了100Kbps。我查了一下,我用的NRF2401+,别人写的也是最高2Mbps的速率,然后我问他们实测没有,他们说只是代硕。
PS,我网上找的别人写的发送函数:
void NRF24L01_Send(void)
{
u8 status=0x00;
//CSN(0);
//TX_Mode(TX_BUF);//send tx
TX_Mode(Test_buf);//send tx
while(IRQ);
CE(0);
delay1us(10);
status=SPI_Read_Reg(STATUS); // 读取状态寄存其来判断数据接收状况
if(status&TX_DS) /*tx_ds == 0x20*/
{
tx_ok = 1;
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x20); // 清除TX,让IRQ拉低;
}
else if(status&MAX_RT)
{
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x10); // 清除TX,让IRQ拉低;
}
CE(1);
}
void TX_Mode(u8 * tx_buf)
{
CE(0);
SPI_Write_Buf(WRITE_REG_NRF24L01 + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写入发送地址
SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 为了应答接收设备,接收通道0地址和发送地址相同
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
//SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x3f); // 使能接收通道0自动应答
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3f); // 使能接收通道0
//SPI_RW_Reg(WRITE_REG_NRF24L01 + SETUP_RETR, 0x0a); // 自动重发延时等待250us+86us,自动重发10次
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 40); // 选择射频通道0x40
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_SETUP, 0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益 0x07
SPI_RW_Reg(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH); // 接收通道0选择和发送通道相同有效数据宽度
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0e); // CRC使能,16位CRC校验,上电
CE(1);
delay1us(10);
}
|
|