I am no longer actively working on the ppCANOpen library, however, I want to publish this project so that anyone who wants to pick up any of the pieces can have a good example. This is a a project I was working on using the ppCANOpen library. It has a pretty in deep use of the object dictionary structure. And a number of functions to control high voltage pinball drivers, if you're into that sort of thing.

Dependencies:   CANnucleo mbed ppCANOpen

Revision:
10:ec59d628ebdc
Parent:
9:8352cfe17ab1
--- a/main.cpp	Wed Dec 23 10:38:02 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/*
- * An example showing how to use the CANnucleo library:
- *
- * Two affordable (less than $4 on ebay) STM32F103C8T6 boards (20kB SRAM, 64kB Flash), 
- * compatible with the NUCLEO-F103RB platform (20kB SRAM, 128kB Flash), 
- * are connected to the same CAN bus via transceivers (MCP2551 or TJA1040, or etc.). 
- * CAN transceivers are not part of NUCLEO boards, therefore must be added by you. 
- * Remember also that CAN bus (even a short one) must be terminated with 120 Ohm resitors at both ends.
- *
- * For more details see the wiki page <https://developer.mbed.org/users/hudakz/code/CAN_Nucleo_Hello/>
- *
- * NOTE: If you'd like to use the official NUCLEO-F103RB boards
- *       comment out the line #define TARGET_STM32F103C8T6  1
- *
- * The same code is used for both NUCLEO boards, but:
- *      For board #1 compile the example without any change.
- *      For board #2 comment out the line #define BOARD1 1 before compiling 
- *
- * Once the binaries have been downloaded to the boards reset board #1.
- *
- */ 
-
-#include "mbed.h"
-#include "CAN.h"
-
-#define BOARD1    1                 // comment out this line when compiling for board #2
-
-#if defined(BOARD1)
-    #define RX_ID   0x100
-    #define TX_ID   0x101
-#else
-    #define RX_ID   0x101
-    #define TX_ID   0x100
-#endif
-
-// See wiki page <https://developer.mbed.org/users/hudakz/code/CAN_Nucleo_Hello/>
-//#define TARGET_STM32F103C8T6  1     // comment out this line if you'd like to use the official NUCLEO-F103RB boards
-                                    
-#if defined(TARGET_STM32F103C8T6)  
-    DigitalOut  led(PC_13);
-#else
-    DigitalOut  led(LED1);
-#endif
-
-int             ledReceived;
-Timer           timer;
-CAN             can(PA_11, PA_12);  // CAN Rx pin name, CAN Tx pin name, Automatic recovery from bus-off state enabled by default
-CANMessage      rxMsg;
-CANMessage      txMsg;
-int             counter = 0;
-volatile bool   msgAvailable = false;
-
-/**
- * @brief   'CAN receive-complete' interrup handler.
- * @note    Called on arrival of new CAN message.
- *          Keep it as short as possible.
- * @param   
- * @retval  
- */
-void onMsgReceived() {
-    msgAvailable = true;
-}
-
-/**
- * @brief   Main
- * @note
- * @param 
- * @retval
- */
-int main() {
-    can.frequency(1000000);                     // set bit rate to 1Mbps
-    can.attach(&onMsgReceived, CAN::RxIrq);     // attach 'CAN receive-complete' interrupt handler
-    
-#if defined(BOARD1)
-    #if defined(TARGET_STM32F103C8T6)
-        led = 0;    // turn LED on
-    #else
-        led = 1;    // turn LED on
-    #endif
-    timer.start();
-#else
-    #if defined(TARGET_STM32F103C8T6)
-        led = 1;    // turn LED off
-    #else
-        led = 0;    // turn LED off
-    #endif
-#endif
-
-    while(1) {
-        if(timer.read() >= 1.0) {               // check for timeout
-            timer.stop();                       // stop timer
-            timer.reset();                      // reset timer (to avaoid repeated send)
-            counter++;                          // increment counter
-            txMsg.clear();                      // clear Tx message storage
-            txMsg.id = TX_ID;                   // set ID
-            txMsg << counter;                   // append first data item (make sure that CAN message total data lenght <= 8 bytes!)
-            txMsg << led.read();                // append second data item (make sure that CAN message total data lenght <= 8 bytes!)
-            can.write(txMsg);                   // transmit message
-            printf("CAN message sent\r\n");
-            
-            #if defined(TARGET_STM32F103C8T6)
-                led = 1;                        // turn LED off
-            #else
-                led = 0;                        // turn LED off
-            #endif
-        }
-        if(msgAvailable) {
-            msgAvailable = false;               // reset flag for next use
-            can.read(rxMsg);                    // read message into Rx message storage
-            printf("CAN message received:\r\n");
-            printf("  ID     = %#x\r\n", rxMsg.id);
-            printf("  Type   = %d\r\n", rxMsg.type);
-            printf("  Format = %d\r\n", rxMsg.format);
-            printf("  Length = %d\r\n", rxMsg.len);
-            printf("  Data   =");            
-            for(int i = 0; i < rxMsg.len; i++)
-                printf(" %x", rxMsg.data[i]);
-            printf("\r\n");            
-            if(rxMsg.id == RX_ID) {             // if ID matches
-                rxMsg >> counter;               // extract first data item
-                rxMsg >> ledReceived;           // extract second data item
-                led = ledReceived;              // set LED
-                printf("counter = %d\r\n", counter);
-                timer.start();
-            }
-        }
-    }
-}
-