Ejemplo CAN Hello W!

Dependencies:   mbed-dev CANnucleo

Revision:
24:e2907bcba75e
Parent:
23:069287e799cd
Child:
25:1d0488a03905
--- a/main.cpp	Tue Mar 07 19:12:22 2017 +0000
+++ b/main.cpp	Tue Mar 07 21:28:19 2017 +0000
@@ -18,10 +18,9 @@
  * Once the binaries have been downloaded to the boards reset board #1.
  *
  */ 
-#include "CANnucleo.h"
 
 #define BOARD1                1     // comment out this line when compiling for board #2
-//#define TARGET_STM32F103C8T6  1     // uncomment this line when using STM32F103C8T6 boards!                                    
+#define TARGET_STM32F103C8T6  1     // uncomment this line when using STM32F103C8T6 boards!                                    
 
 #if defined(TARGET_STM32F103C8T6)
     #include "stm32f103c8t6.h"
@@ -42,6 +41,7 @@
     const unsigned int TX_ID = 0x100;
 #endif
 
+#include "CANnucleo.h"
 #include "mbed.h"
 
 /* 
@@ -53,7 +53,7 @@
 CANnucleo::CANMessage   rxMsg;
 CANnucleo::CANMessage   txMsg;
 DigitalOut              led(LED_PIN);
-int                     ledStatus;
+int                     ledState;
 Timer                   timer;
 int                     counter = 0;
 volatile bool           msgAvailable = false;
@@ -81,7 +81,6 @@
     confSysClock();     //Configure system clock (72MHz HSE clock, 48MHz USB clock)
 #endif
     pc = new Serial(PA_2, PA_3);
-    pc->baud(115200);
     can = new CANnucleo::CAN(PA_11, PA_12);      // CAN Rx pin name, CAN Tx pin name
     can->frequency(1000000);                     // set bit rate to 1Mbps
     can->attach(&onMsgReceived);                 // attach 'CAN receive-complete' interrupt handler
@@ -100,20 +99,30 @@
             timer.stop();                       // stop timer
             timer.reset();                      // reset timer
             counter++;                          // increment counter
-            ledStatus = led.read();              // get led state
+            ledState = led.read();              // get led state
             txMsg.clear();                      // clear Tx message storage
             txMsg.id = TX_ID;                   // set ID
-            txMsg << counter;                   // append first data item
-            txMsg << ledStatus;                  // append second data item (total data lenght must be <= 8 bytes!)
+            txMsg << counter << ledState;       // append data (total data length must be <= 8 bytes!)
             led = OFF;                          // turn LED off
-            if(can->write(txMsg))               // transmit message
+            if(can->write(txMsg)) {             // transmit message
+                pc->printf("-----------------------------------\r\n");
                 pc->printf("CAN message sent\r\n"); 
+                pc->printf("  ID      = 0x%.3x\r\n", txMsg.id);
+                pc->printf("  Type    = %d\r\n", txMsg.type);
+                pc->printf("  Format  = %d\r\n", txMsg.format);
+                pc->printf("  Length  = %d\r\n", txMsg.len);
+                pc->printf("  Data    =");            
+                for(int i = 0; i < txMsg.len; i++)
+                    pc->printf(" %.2x", txMsg.data[i]);
+                pc->printf("\r\n");
+                pc->printf("  counter = %d\r\n", counter);
+            }
             else
                 pc->printf("Transmission error\r\n");
         }
         if(msgAvailable) {
             msgAvailable = false;               // reset flag for next use
-            can->read(rxMsg);                    // read message into Rx message storage
+            can->read(rxMsg);                   // read message into Rx message storage
             pc->printf("CAN message received\r\n");
             pc->printf("  ID      = 0x%.3x\r\n", rxMsg.id);
             pc->printf("  Type    = %d\r\n", rxMsg.type);
@@ -124,9 +133,8 @@
                 pc->printf(" %.2x", rxMsg.data[i]);
             pc->printf("\r\n");
             // Filtering performed by software:           
-            if(rxMsg.id == RX_ID) {             // See comments in CANnucleo.cpp for filtering performed by hardware
-                rxMsg >> counter;               // extract first data item
- //               rxMsg >> ledStatus;              // extract second data item
+            if(rxMsg.id == RX_ID) {             // About filtering performed by hardware see comments in CANnucleo.cpp 
+                rxMsg >> counter >> ledState;   // extract data
                 pc->printf("  counter = %d\r\n", counter);
                 led = ON;                       // turn LED on
                 timer.start();                  // transmission lag
@@ -134,3 +142,6 @@
         }
     }
 }
+
+
+