Communication between two NUCLEO 144 using CAN bus.

Dependencies:   mbed CANMsg

Revision:
10:c73d30edad03
Parent:
9:3211e88e30a5
--- a/main.cpp	Fri Feb 08 13:16:55 2019 +0000
+++ b/main.cpp	Fri Mar 22 14:53:12 2019 +0000
@@ -16,16 +16,16 @@
  *
  */
 
-//#define TARGET_STM32F103C8T6    1       // uncomment this line to use STM32F103C8T6 boards
+#define TARGET_NUCLEOF767ZI   1       // uncomment this line to use STM32F103C8T6 boards
 
 #define BOARD1                  1       // comment out this line when compiling for board #2
 
-#if defined(TARGET_STM32F103C8T6)
-    #define LED_PIN     PC_13
+#if defined(TARGET_NUCLEOF767ZI)
+    #define LED_PIN     PB_7
     const int           OFF = 1;
     const int           ON = 0;
 #else
-    #define LED_PIN     LED1
+    #define LED_PIN     PB_7
     const int           OFF = 0;
     const int           ON = 1;
 #endif
@@ -40,9 +40,10 @@
 
 #include "mbed.h"
 #include "CANMsg.h"
-
+#include "mbed_error.h"
+CircularBuffer<char, 1024> rxbuf;    // PC receiving Buffer
 Serial              pc(USBTX, USBRX);
-CAN                 can(PB_8, PB_9);  // CAN Rx pin name, CAN Tx pin name
+CAN                 can(PD_0, PD_1);  // CAN Rx pin name, CAN Tx pin name
 //CAN                 can(p30, p29);  // CAN Rx pin name, CAN Tx pin name
 CANMsg              rxMsg;
 CANMsg              txMsg;
@@ -76,21 +77,29 @@
  * @param
  * @retval
  */
+ 
+ 
+ 
+ 
+ 
 void onCanReceived(void)
 {
     can.read(rxMsg);
     pc.printf("-------------------------------------\r\n");
     pc.printf("CAN message received\r\n");
     printMsg(rxMsg);
+ 
+    rxbuf.reset();
 
     if (rxMsg.id == RX_ID) {
         // extract data from the received CAN message 
         // in the same order as it was added on the transmitter side
         rxMsg >> counter;
-        rxMsg >> voltage;    
+        rxMsg >> voltage;   
         pc.printf("  counter = %d\r\n", counter);
         pc.printf("  voltage = %e V\r\n", voltage);
     }
+    
     timer.start(); // to transmit next message in main
 }
 
@@ -101,6 +110,9 @@
  * @param
  * @retval
  */
+
+
+
 int main(void)
 {
     pc.baud(9600);          // set serial speed
@@ -108,16 +120,17 @@
     can.filter(RX_ID, 0xFFF, CANStandard, 0); // set filter #0 to accept only standard messages with ID == RX_ID
     can.attach(onCanReceived);                // attach ISR to handle received messages
 
+    
 #if defined(BOARD1)
     led = ON;               // turn the LED on
     timer.start();          // start timer
-    pc.printf("CAN_Hello board #1\r\n");
+    pc.printf("reset pressed from board #1\r\n");
 #else
     led = OFF;      // turn LED off
-    pc.printf("CAN_Hello board #2\r\n");
+    pc.printf("reset pressed from board #2\r\n");
 #endif
     while(1) {
-        if(timer.read_ms() >= 2000) {    // check for timeout
+        if(timer.read_ms() >= 3000) {    // check for timeout
             timer.stop();                // stop timer
             timer.reset();               // reset timer
             counter++;                   // increment counter
@@ -127,7 +140,9 @@
             // append data (total data length must not exceed 8 bytes!)
             txMsg << counter;   // one byte
             txMsg << voltage;   // four bytes
-             
+             if (counter==10){
+                 break;
+                 }
             if(can.write(txMsg)) {       // transmit message
                 led = OFF;               // turn the LED off
                 pc.printf("-------------------------------------\r\n");
@@ -139,6 +154,8 @@
             }
             else
                 pc.printf("Transmission error\r\n");
+                
+                
         }
     }
 }