pub
Dependencies: CANnucleo mbed-dev
Fork of CANnucleo_Hello by
Diff: main.cpp
- Revision:
- 25:e2907bcba75e
- Parent:
- 24:069287e799cd
- Child:
- 26:1d0488a03905
diff -r 069287e799cd -r e2907bcba75e main.cpp --- 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 @@ } } } + + +