AnsweredAssumed Answered

NUCLEO L476RG with a nRF24L01+

Question asked by Jan M on Oct 20, 2017

Hello,

 

i try to connect my NUCLEO L476RG with a nRF24L01+. For this i use the Lib from Owen Edwards. I use mBed and tested my RF24 Dongles with a Arduino Nano before. It works perfect with them. My Code is the following:

 

The problem is a freeze at my_nrf24l01p.powerUp() and i don't understand this. The Registeraddresses be the same as the adresses in the Arduino Lib. I suspect that the connection over spi isn't working.

 

Have somebady a idea or a working project with a RF24 and a NUCLEO Board?

 

Thank you so much.

 

#include "mbed.h"
#include "nRF24L01P.h"

Serial pc(USBTX, USBRX,9600); // tx, rx

nRF24L01P my_nrf24l01p(D11, D12, D13, D10, D9, D7); // mosi, miso, sck, csn, ce, irq

DigitalOut myled1(LED1);
DigitalOut myled2(LED2);

int main() {

// The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's
// "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019)
// only handles 4 byte transfers in the ATMega code.
#define TRANSFER_SIZE 4

char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
int txDataCnt = 0;
int rxDataCnt = 0;
pc.printf("Setup");

my_nrf24l01p.powerUp();

// Display the (default) setup of the nRF24L01+ chip
pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );

pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );

//my_nrf24l01p.setTransferSize( TRANSFER_SIZE );

my_nrf24l01p.setReceiveMode();
pc.printf("Receive");
my_nrf24l01p.enable();

while (1) {

// If we've received anything over the host serial link...
//if ( pc.readable() ) {

// ...add it to the transmit buffer
// txData[txDataCnt++] = pc.getc();

// If the transmit buffer is full
// if ( txDataCnt >= sizeof( txData ) ) {

// Send the transmitbuffer via the nRF24L01+
// my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );

// txDataCnt = 0;
// }

// Toggle LED1 (to help debug Host -> nRF24L01+ communication)
// myled1 = !myled1;
// }

// If we've received anything in the nRF24L01+...
pc.printf("while");
if ( my_nrf24l01p.readable() ) {

// ...read the data into the receive buffer
rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );

// Display the receive buffer contents via the host serial link
for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) {

pc.putc( rxData[i] );
}

// Toggle LED2 (to help debug nRF24L01+ -> Host communication)
myled2 = !myled2;
}
}
}

Outcomes