comit to publish
Dependencies: CANnucleo CANnucleo_Hello mbed
Fork of CANnucleo_Hello by
Diff: main.cpp
- Revision:
- 6:7ff95ce72f6d
- Parent:
- 5:c6503b7ae971
- Child:
- 7:2dce8ed51091
--- a/main.cpp Fri Oct 23 19:54:49 2015 +0000 +++ b/main.cpp Sat Dec 05 10:20:00 2015 +0000 @@ -1,30 +1,29 @@ /* * An example showing how to use the CANnucleo library: * - * Two NUCLEO boards are connected to the same CAN bus via CAN transceivers (MCP2551 or TJA1040, or etc.). - * Transceivers are not part of the NUCLEO boards, therefore must be added by you. - * Remember also that CAN bus must be terminated with 120 Ohm resitors on both ends. - * See <https://developer.mbed.org/users/WiredHome/notebook/can---getting-started/> - * The same source code is used for both NUCLEO boards, but: + * 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 compiled, download the binaries to the boards. - * To start ping/ponging messages reset both boards at the same time. + * Once the binaries have been downloaded to the boards reset board #1. * - * Note: - * To simplify adding/getting data to/from a CAN message - * inserter "<<" and extractor ">>" operators have been defined. - * Please be aware that CAN message maximum data length is limited to eight bytes. - * To make sure this limitation is not violated I recommend to first compile - * your application with DEBUG enabled in "CAN.h" file. - * Then run it and check for error messages. */ #include "mbed.h" #include "CAN.h" -#define BOARD1 1 // please comment out this line when compiling for board #2 +#define BOARD1 1 // comment out this line when compiling for board #2 #if defined(BOARD1) #define RX_ID 0x100 @@ -34,7 +33,15 @@ #define TX_ID 0x100 #endif -DigitalOut led(LED1); +// 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 @@ -63,12 +70,20 @@ int main() { can.frequency(1000000); // set bit rate to 1Mbps can.attach(&onMsgReceived, CAN::RxIrq); // attach 'CAN receive-complete' interrupt handler - timer.reset(); + #if defined(BOARD1) - led = 1; + #if defined(TARGET_STM32F103C8T6) + led = 0; // turn LED on + #else + led = 1; // turn LED on + #endif timer.start(); #else - led = 0; + #if defined(TARGET_STM32F103C8T6) + led = 1; // turn LED off + #else + led = 0; // turn LED off + #endif #endif while(1) { @@ -82,7 +97,12 @@ 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"); - led = 0; // turn off LED + + #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 @@ -106,5 +126,3 @@ } } } - -