STM32/STM8技术论坛
直播中

jf_33840904

未满1年用户 6经验值
擅长:嵌入式技术
私信 关注
[问答]

stmf103c8t6使用nrf24l01发送和接收数据,接收端STATUS寄存器的值始终为0x0E, FIFO_STATUS的值为0x11。

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积分

回帖(2)

jf_33840904

2025-5-1 22:23:59
没有人遇到过吗。。。。
是需要添加一个电容吗?
举报

jf_33840904

2025-5-2 22:33:32
我这个问题已经解决了,将发送端和校验段的CRC校验关闭之后成功接收到数据。
应该是配置的CRC校验有问题,后续考虑加上。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分