This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF24L01+ -> nRF24LU1+ RF communication.

HI.

I want to send data from nRF24L01 + to RF communication and receive it from nRF24LU1 +. The nRF24L01 + is connected to the STM32. The settings are as follows.

nRF24L01+ code

#if (DEMO_TX_SINGLE)

// The transmitter sends a 5-byte packets to the address '0xE7 0x1C 0xE3' without Auto-ACK (ShockBurst disabled)

// Disable ShockBurst for all RX pipes
nRF24_DisableAA(0xFF);

// Set RF channel
nRF24_SetRFChannel(2);

// Set data rate
nRF24_SetDataRate(nRF24_DR_1Mbps);

// Set CRC scheme
nRF24_SetCRCScheme(nRF24_CRC_1byte);

// Set address width, its common for all pipes (RX and TX)
nRF24_SetAddrWidth(5);

// Configure TX PIPE
static const uint8_t nRF24_ADDR[] = { 0xE7,0xE7,0xE7,0xE7,0xE7 };
nRF24_SetAddr(nRF24_PIPETX, nRF24_ADDR); // program TX address

// Set TX power (maximum)
nRF24_SetTXPower(nRF24_TXPWR_0dBm);

// Set operational mode (PTX == transmitter)
nRF24_SetOperationalMode(nRF24_MODE_TX);

// Clear any pending IRQ flags
nRF24_ClearIRQFlags();

// Wake the transceiver
nRF24_SetPowerMode(nRF24_PWR_UP);


// The main loop
j = 0;
payload_length = 4;

  
while (1) {
    // Prepare data packet

	for (i = 0; i < payload_length; i++) {
		nRF24_payload[i] = j++;
		if (j > 0x000000FF) j = 0;
	}

  
	// Print a payload
	UART_SendStr("PAYLOAD:>");
	UART_SendBufHex((char *)nRF24_payload, payload_length);
	UART_SendStr("< ... TX: ");

	// Transmit a packet
	tx_res = nRF24_TransmitPacket(nRF24_payload, payload_length);
	switch (tx_res) {
		case nRF24_TX_SUCCESS:
			UART_SendStr("OK");
                            UART_SendInt(nnum);
                            nnum++;
			break;
		case nRF24_TX_TIMEOUT:
			UART_SendStr("TIMEOUT");
			break;
		case nRF24_TX_MAXRT:
			UART_SendStr("MAX RETRANSMIT");
			break;
		default:
			UART_SendStr("ERROR");
			break;
	}
	UART_SendStr("\r\n");

	// Wait ~0.5s
	Delay();
}

The nRF24LU1 + code received the nAN-22 from the Nordic website. www.nordicsemi.com/.../nRF24LU1P

nRF24LU1+ code

void main()
{
	// Enable radio SPI
	 RFCTL = 0x10;
	
	// Enable the radio clock
  RFCKEN = 1;

		  // Enable RF interrupt
  RF = 1;

  // Enable global interrupt
  EA = 1;

  // Initialize RF device
  rf_init(); 

  //en_aa disable
	hal_nrf_open_pipe(HAL_NRF_PIPE1, false);
	
	//ARC 0x00; to diable enhanced shockbuck
	//hal_nrf_set_auto_retr(HAL_NRF_PIPE0,0x0000);
	
	// Set RF channel
	hal_nrf_set_rf_channel(2);
	
	// Set data rate
	hal_nrf_set_datarate(HAL_NRF_1MBPS);
	
	
	// Set CRC scheme
	hal_nrf_set_crc_mode(HAL_NRF_CRC_8BIT);
	
	// Set address width
		hal_nrf_set_address_width(HAL_NRF_AW_5BYTES);
		
	// Set pipe address
  hal_nrf_set_address(HAL_NRF_PIPE1, default_pipe_address);

	
	// Set TX power for Auto-ACK (maximum, to ensure that transmitter will hear ACK reply)
	//hal_nrf_set_output_power(HAL_NRF_0DBM);
	
	
	// Set payload width to 4 bytes
  hal_nrf_set_rx_payload_width(HAL_NRF_PIPE1, 4);
	
		// Set operational mode (PRX == receiver)
	hal_nrf_set_operation_mode(HAL_NRF_PRX);
	
    // Power up radio
  hal_nrf_set_power_mode(HAL_NRF_PWR_UP);
	
	delay_us(150);
	
	// Enable receiver
  CE_HIGH();
	
	delay_us(130);

while(true) { }
}
  • To receive data from the nRF24LU1 + via RF communication, should I send data via USB?

I just want to receive the data, so I set it as follows app_state = APP_SEARCHING;

However, nRF24LU1 + does not pass to APP_CONNECTED.

hal_nrf_set_crc_mode
hal_nrf_set_address
hal_nrf_set_address_width
hal_nrf_set_rf_channel

Even though I applied the same function above to the main function, it doesn't work either.

I want to know what went wrong. Thank you.

Related