本帖最后由 victor3l 于 2016-11-26 17:28 编辑
大家好,我使用 STM32的单片机来控制nRF2401.现在可以确定硬件上没有问题,SPI和nrf通信正常(读写寄存器都OK).我使用模块厂家给的例程,现在是接收机能收到载波(读载波寄存器能够得到1.这个载波时有时无,我发射机端每个1秒钟发送一次数据,但是这个载波信号和发送端每秒发一次不匹配.), 但是收不到数据. 在调试的过程中偶尔有一次收到了数据,以后就没有收到过.整个配置是:
void nRF2401_Init_Demo( void )
{
uint8_t addr[5] = {0xE7,0xE7,0xE7,0xE7,0xE7};
NRF2401_CE_H( );
nRF2401_ClearIRQ( IRQ_ALL );
nRF2401_WriteSingleByte( DYNAMIC_PAYLOAD_LENGTH, ( 1 << 0 ) ); //使能通道1动态数据长度
nRF2401_WriteSingleByte( FEATURE, 0x07 );
nRF2401_ReadSingleByte( DYNAMIC_PAYLOAD_LENGTH );
nRF2401_ReadSingleByte( FEATURE );
nRF2401_WriteSingleByte( CONFIG_ADDR, /*( 1<<MASK_MAX_RT ) |*/ //重发次数最大后拉低IRQ
( 1 << EN_CRC ) | //使能CRC 1个字节
( 1 << PWR_UP ) ); //开启设备
nRF2401_WriteSingleByte( EN_AA_ENHANCE, ( 1 << ENAA_P0 ) ); //通道0自动应答
nRF2401_WriteSingleByte( EN_RXADDR, ( 1 << ERX_P0 ) ); //通道0接收
nRF2401_WriteSingleByte( SETUP_ADDRESS_WIDTH, ADDR_WIDTH_5 ); //地址宽度 5个字节
nRF2401_WriteSingleByte( SETUP_RETX, ARD_4000US |
( REPEAT_CNT & 0x0F ) ); //重复等待时间 250us,以及使能重复
nRF2401_WriteSingleByte( RF_CHANNEL_SET, 60 ); //初始化通道
nRF2401_WriteSingleByte( RF_SETUP, 0x26 );//设置功率和速率
nRF2401_SetTxAddr( &addr[0], 5 ); //设置TX地址
nRF2401_SetRxAddr( 0, &addr[0], 5 ); //设置RX地址
}
发射机和接收机使用同样的配置. 发射机读状态寄存器是0x1E(重发次数最大了),接收机的状态为是0x0E
请问 :有载波但是没有收到数据的情况有什么导致的啊?
如果不使能自动重发和自动应答,仅仅调发射端.那么我发射机的状态依然是重发次数达到最大.而不是发射结束.
请大家给些调试nRF2401的经验. 谢谢
|