Hi.
I've been trying to send a payload with STM32F but I can not.
I've used both STM32F103 and STM32F3 to send a payload but neither of them worked.
However, when I use an Arduino Uno as a transmitter and STM32F as a receiver everything works perfectly.
I have tried 2 methods to send a payload so far but; I have not had any result.
1st method:
void TX_Mode(uint8_t data2send)
{
SetPRIM(PRIM_TX); // set as tx
csn_low(); //CSN=0
HAL_SPI_Transmit(&hspi1, &COMD_W_TX_PAYLOAD, 1,150);
HAL_SPI_TransmitReceive(&hspi1, &data2send, &dummy, 1, 150); // fill the payload
while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
csn_high();
ChipEnable_high(); //CE=1
DWT_Delay_us(500); // wait for 500us
Flush_TX(); //Flush TX FIFO
CleanInterrupts(); //Clean all the interrupt flags
}Note that, I confirmed that TX FIFO is filled and TX_DS Bit is set high by using 1st method.
2nd method:
void TX_Mode(uint8_t data2send)
{
bool radio_busy = true;
SetPRIM(PRIM_TX);
// Fill the payload.
csn_low(); //CSN=0
HAL_SPI_Transmit(&hspi1, &COMD_W_TX_PAYLOAD, 1,150);
HAL_SPI_TransmitReceive(&hspi1, &data2send, &dummy, 1, 150);
while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
csn_high();
ChipEnable_high();
while(radio_busy)
{
if(TXDS_Bit_Is_Set()) // If the payload is sent
{
CleanInterrupts();
ChipEnable_low(); // CE=0
radio_busy = false;
break;
}
if(MAXRT_Bit_Is_Set()) // If Max Re-Transmission is reached
{
Flush_TX();
CleanInterrupts();
ChipEnable_low(); // CE=0
radio_busy = false;
break;
}
}
I haven't changed anything about TX_ADDR. I use the reset value 0xE7E7E7E7E7 as tx address.
Thanks in advance.