Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CANnucleo CANnucleo_Hello LTC68041 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 @@
}
}
}
-
-
