首页 > 解决方案 > NRF24L01+ TX 和 RX 时序问题?

问题描述

我使用 STM32F103C8T6 作为发送器,使用 Arduino Uno 作为接收器。

我无法收到我感兴趣的值。我在每次发送后更改了延迟持续时间以及 CE 脉冲。我有时会通过玩延迟时间来使其符合规范。

举例来说,我在执行 TX 功能并且接收器接收良好之后添加了 200 毫秒的延迟,然后我断开接收器,然后当我再次连接它时,它只接收到零。当我玩 CE 脉冲持续时间时,会发生非常相似的情况。我无法使用自动确认或简单的 rx-tx 操作使其正常工作。我想提一下,当我改变角色(TX 设备是 Arduino,RX 设备是 STM)时,一切正常。

我已经通过逻辑分析仪检查了 STM32 以查看有效负载是否正确填充并且看不到任何问题。填充有效负载后,我检查 FIFO_STATUS 寄存器,一切都很好。在我施加一个脉冲一段时间后,我检查 STATUS 寄存器,可以看到 TX_DS 位已设置。

我发现仅在 CE 上施加 10us 脉冲可能还不够。它最多可能需要 500us。然后决定将 CE 引脚设置为高电平,直到设置了 TX_DS 位,但这种方法也不起作用。

void TX_Mode(uint8_t data2send)
{

Flush_TX();
CleanInterrupts();
SetPRIM(PRIM_TX); //set as transmitter

csn_low(); //CSN=0
HAL_SPI_Transmit(&hspi2, &COMD_W_TX_PAYLOAD, 1,150); //send command to write to payload
HAL_SPI_TransmitReceive(&hspi2, &data2send, &dummy, 1, 150); // fill the payload
while(HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY);
csn_high();



ChipEnable_high();
while( !(TXDS_Bit_Is_Set() )); //wait until payload is sent
ChipEnable_low();

}

标签: stm32timingtx

解决方案


推荐阅读