NRF24L01 + TX和RX时序问题?

时间:2018-09-13 15:37:07

标签: stm32 timing tx

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

我无法接收到我感兴趣的值。我已更改了每次发送以及CE脉冲后的延迟时间。有时我会通过延迟时间来使它在规范上起作用。

举例说明,我在执行TX功能后,接收器接收良好,然后我断开了接收器的连接,然后再连接时,又增加了200ms的延迟,但接收到的零却什么也没有。 当我使用CE脉冲持续时间播放时,会发生非常相似的情况。 我无法通过自动确认或简单的rx-tx操作都无法使用它。 我想提到的是,当我更改角色时(TX设备是Arduino,RX设备是STM),一切正常。

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

我发现仅在CE上施加10us脉冲可能还不够。最多可能需要500us。 然后决定将CE引脚设置为高电平,直到TX_DS位置1,但是此方法也无效。

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();

}

0 个答案:

没有答案