stmf103c8t6使用nrf24l01发送和接收数据,通过失能自动应答,发送端调通了,但是接收端始终无法收到消息,下面是接收端的主要代码:
void NRF24L01_Init(void)
{
HAL_GPIO_WritePin(NRF24L01_CE_PORT, NRF24L01_CE_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(NRF24L01_CSN_PORT, NRF24L01_CSN_PIN, GPIO_PIN_SET);
// 初始化NRF24L01寄存器
NRF24L01_WriteReg(NRF24L01_WRITE_REG + CONFIG, 0x0F);
//NRF24L01_WriteReg(NRF24L01_WRITE_REG + EN_AA, 0x01);
NRF24L01_WriteReg(NRF24L01_WRITE_REG + EN_AA, 0x00); //失能自动应答
NRF24L01_WriteReg(NRF24L01_WRITE_REG + EN_RXADDR, 0x01);
NRF24L01_WriteReg(NRF24L01_WRITE_REG + SETUP_AW, 0x03);
NRF24L01_WriteReg(NRF24L01_WRITE_REG + SETUP_RETR, 0x0A);
NRF24L01_WriteReg(NRF24L01_WRITE_REG + RF_CH, 100);
NRF24L01_WriteReg(NRF24L01_WRITE_REG + RF_SETUP, 0x0A);
NRF24L01_WriteReg(NRF24L01_WRITE_REG + RX_PW_P0, 32);
uint8_t rx_address[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};
NRF24L01_WriteBuf(NRF24L01_WRITE_REG + RX_ADDR_P0, rx_address, 5);
HAL_GPIO_WritePin(NRF24L01_CE_PORT, NRF24L01_CE_PIN, GPIO_PIN_SET);
}
设置接收模式:
void NRF24L01_SetRxMode(void) {
HAL_GPIO_WritePin(NRF24L01_CSN_PORT, NRF24L01_CSN_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(NRF24L01_CE_PORT, NRF24L01_CE_PIN, GPIO_PIN_RESET);
NRF24L01_WriteReg(FLUSH_RX, 0xFF); // 清空 RX FIFO
NRF24L01_WriteReg(FLUSH_TX, 0xFF); // 清空 TX FIFO
NRF24L01_WriteReg(NRF24L01_WRITE_REG + STATUS, 0x70); // 清除所有中断标志(RX_DR/TX_DS/MAX_RT)
NRF24L01_WriteReg(NRF24L01_WRITE_REG + CONFIG, 0x0F);
HAL_GPIO_WritePin(NRF24L01_CE_PORT, NRF24L01_CE_PIN, GPIO_PIN_SET);
delay_us(150);
HAL_GPIO_WritePin(NRF24L01_CSN_PORT, NRF24L01_CSN_PIN, GPIO_PIN_SET);
}
main函数
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
NRF24L01_Init();
uint8_t received_data[32];
NRF24L01_SetRxMode();
while (1)
{
if (NRF24L01_DataReady())
{
if (NRF24L01_GetData(received_data, 32))
{
// 接收成功处理逻辑
}
else
{
// 接收失败处理逻辑
}
}
}
}
结果是接收端的STATUS寄存器的值始终为0x0E, FIFO_STATUS的值为0x11,求大佬们指导一下,感谢。
已退回1积分
2025-5-2 22:33:32
我这个问题已经解决了,将发送端和校验段的CRC校验关闭之后成功接收到数据。
应该是配置的CRC校验有问题,后续考虑加上。
我这个问题已经解决了,将发送端和校验段的CRC校验关闭之后成功接收到数据。
应该是配置的CRC校验有问题,后续考虑加上。
举报