Example based on UDAKZ example + OWEN EDWARDS example to test nRF24L01P with STM32F103C8T6 board

Dependencies:   mbed-STM32F103C8T6 mbed nRF24L01P

Fork of STM32F103C8T6_Hello by Zoltan Hudak

Revision:
8:c3006edbb507
Parent:
7:accb2c83a007
--- a/main.cpp	Tue Jul 05 18:57:42 2016 +0000
+++ b/main.cpp	Fri Jul 29 14:45:55 2016 +0000
@@ -1,18 +1,92 @@
 #include "stm32f103c8t6.h"
 #include "mbed.h"
+#include "nRF24L01P.h"
+
+// 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
+
+
+#define LED2 PB_15
+
+#define CSN  PC_14
+#define CE   PC_15
+#define IRQ  PB_1
+
+#define LED_ON 0
+#define LED_OFF 1
 
 Serial      pc(PA_2, PA_3);
-DigitalOut  myled(LED1);
+DigitalOut  myled1(LED1);//tx activity
+DigitalOut  myled2(LED2);//rx activity
+
+
+nRF24L01P my_nrf24l01p(SPI_MOSI, SPI_MISO, SPI_SCK, CSN, CE, IRQ);    // mosi, miso, sck, csn, ce, irq
 
 int main() {
+    char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
+    int txDataCnt = 0;
+    int rxDataCnt = 0;
     confSysClock();     // Configuring system clock
-    while(1) {
-        // The on-board LED is connected, via a resistor, to +3.3V (not to GND). 
-        // So to turn the LED on or off we have to set it to 0 or 1 respectively
-        myled = 0;      // turn the LED on
-        wait(0.2);      // 200 ms
-        myled = 1;      // turn the LED off
-        wait(1.0);      // 1 sec
-        pc.printf("Blink\r\n");
+    pc.baud(115200);
+    myled1 = LED_OFF;      // turn the LED off
+    myled2 = LED_OFF;    
+    pc.printf("STM32+nRF24L01+ Test\r\n");
+    
+
+    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();
+    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+...
+        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;
+        }
     }
+
 }