NRF24L01 + TX и RX Проблема синхронизации? - PullRequest
0 голосов
/ 13 сентября 2018

Я использую 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();

}
...