我的STM32和NRF24L01配置了FEATURE和DYNPD以后就不能正常收发了,并且在上位机上测试是能够接收数据的,但是发送机还是判定为发送失败,但是下载程序到接收机上面,接收机却接收不到数据
这是接收机的接收模式配置
void NRF_RX_Mode(void)
{
NRF_CE_LOW();
SPI_NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); //写TX节点地址
SPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01); //使能通道0的自动应答
SPI_NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址
SPI_NRF_WriteReg(NRF_WRITE_REG+FEATURE,0x06); //使能动态负载(收发数据)长度
SPI_NRF_WriteReg(NRF_WRITE_REG+DYNPD,0x01); //使能通道0动态负载长度
SPI_NRF_WriteReg(NRF_WRITE_REG+RF_CH,CHANAL); //设置RF通信频率
SPI_NRF_WriteReg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度
SPI_NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
// SPI_NRF_WriteReg(FLUSH_RX,NOP);
SPI_NRF_WriteReg(NRF_WRITE_REG+CONFIG, 0x0f); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式
/*CE拉高,进入接收模式*/
NRF_CE_HIGH();
}
这是发送机的发送配置
void NRF_TX_Mode(void)
{
NRF_CE_LOW();
SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); //写TX节点地址
SPI_NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK
SPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01); //使能通道0的自动应答
SPI_NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址
SPI_NRF_WriteReg(NRF_WRITE_REG+FEATURE,0x06); //使能动态负载(收发数据)长度
//
SPI_NRF_WriteReg(NRF_WRITE_REG+DYNPD,0x01); //使能通道0动态负载长度
SPI_NRF_WriteReg(NRF_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
SPI_NRF_WriteReg(NRF_WRITE_REG+RF_CH,CHANAL); //设置RF通道为CHANAL
SPI_NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
SPI_NRF_WriteReg(NRF_WRITE_REG+CONFIG,0x0e); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,发射模式,开启所有中断
/*CE拉高,进入发送模式*/
NRF_CE_HIGH();
Delay_us(50); //CE要拉高一段时间才进入发送模式
}
希望大家帮我看看配置方面是否有问题
void EXTI9_5_IRQHandler(void)
{
u8 status;
//判断是否是线路9引起的中断
if(EXTI_GetITStatus(EXTI_Line9) != RESET) //RF有中断了
{
if(NRF_Read_IRQ() == 0)
{
status = SPI_NRF_ReadReg(STATUS); //读状态寄存器完了判断是哪种中断状态
if(status & RX_DR) //bit6:数据接收中断
{
NRF_CE_LOW();
SPI_NRF_WriteBuf(W_ACK_PAYLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到ACK TX BUF
NRF_Rx_Dat(rxbuf);//读取数据
NRF_CE_HIGH();
sta=1;
}
else if(status & TX_DS) //TX发送完成中断
{
NRF_CE_LOW();
SPI_NRF_WriteReg(FLUSH_TX,NOP); //清除TX FIFO寄存器
NRF_CE_HIGH();
}
else if(status & MAX_RT) //TX发送完成中断
{
NRF_CE_LOW();
SPI_NRF_WriteReg(FLUSH_TX,NOP); //清除TX FIFO寄存器
NRF_CE_HIGH();
}
SPI_NRF_WriteReg(NRF_WRITE_REG+STATUS,status);
}
EXTI_ClearITPendingBit(EXTI_Line9); //清除中断线9
}
}
这是接收机的中断处理函数,我要实现的是ACK带负载数据和主机通讯,我是参考其他人的,大家帮忙看看哪里有问题