Pankaj Bhagchandani
/
Nucleo_CANbus
Communication between two NUCLEO 144 using CAN bus.
Revision 10:c73d30edad03, committed 2019-03-22
- Comitter:
- Pankaj2201
- Date:
- Fri Mar 22 14:53:12 2019 +0000
- Parent:
- 9:3211e88e30a5
- Commit message:
- Communication between two NUCLEO 144 using CAN bus;
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 3211e88e30a5 -r c73d30edad03 main.cpp --- 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"); + + } } }