NRF24L01+ TX и RX Проблема синхронизации?
Я использую STM32F103C8T6 в качестве передатчика и Arduino Uno в качестве приемника.
Я не могу получить интересующее меня значение. Я изменил длительность задержки после каждой отправки, а также импульс CE. Иногда я работаю на спецификации, играя с длительностью задержки.
Например, я добавляю задержку 200 мс после выполнения функции TX, и приемник получает очень хорошо, затем я отключаю приемник, а затем, когда я подключаю его снова, он получает только ноль. Очень похожие ситуации возникают, когда я играю с длительностью импульса CE. Я не могу заставить его работать ни с auto-ack, ни с простой операцией rx-tx. Я хотел бы отметить, что когда я меняю роли (устройство TX - Arduino, а устройство RX - STM), все работает отлично.
Я проверил STM32 с помощью логического анализатора, чтобы убедиться, что полезная нагрузка заполнена правильно или нет, и не смог увидеть никаких проблем. После заполнения полезных данных я проверяю регистр FIFO_STATUS и все в порядке. После применения импульса в течение некоторого времени я проверяю регистр STATUS и вижу, что бит TX_DS установлен.
Я обнаружил, что простого применения 10us пульса на CE может быть недостаточно. Это может занять до 500 мс. Затем решили установить высокий вывод 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();
}