Alfred Lind-Anderton
/
CAN_Hello_XAVIER
Using CAN bus with (not just NUCLEO) mbed boards
Diff: main.cpp
- Revision:
- 3:87a128bca8f5
- Parent:
- 2:6546e4a2d593
- Child:
- 4:09d564da0e24
diff -r 6546e4a2d593 -r 87a128bca8f5 main.cpp --- a/main.cpp Wed Oct 11 16:29:04 2017 +0000 +++ b/main.cpp Thu Mar 29 18:57:18 2018 +0000 @@ -1,7 +1,7 @@ /* * An example showing how to use the mbed CAN API: * - * Two affordable (less than $3 on ebay) STM32F103C8T6 boards (20kB SRAM, 64kB Flash), + * Two affordable (about $2 on ebay) STM32F103C8T6 boards (20kB SRAM, 64kB Flash), * (see [https://developer.mbed.org/users/hudakz/code/STM32F103C8T6_Hello/] for more details) * 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. @@ -13,9 +13,9 @@ * * The same code is used for both mbed boards, but: * For board #1 compile the example without any change. - * For board #2 comment out line 23 before compiling + * For board #2 comment out line 21 before compiling * - * Once the binaries have been downloaded to the boards reset board #1. + * Once the binaries have been downloaded to the boards reset both boards at the same time. * */ #define BOARD1 1 // comment out this line when compiling for board #2 @@ -42,8 +42,8 @@ #include "mbed.h" #include "CANMsg.h" -Serial pc(PA_2, PA_3); -CAN can(PA_11, PA_12); // CAN Rx pin name, CAN Tx pin name +Serial pc(USBTX, USBRX); +CAN can(p30, p29); // CAN Rx pin name, CAN Tx pin name CANMsg rxMsg; CANMsg txMsg; DigitalOut led(LED_PIN); @@ -56,7 +56,7 @@ * @brief Prints CAN msg to PC's serial terminal * @note * @param CANMessage to print - * @retval none + * @retval */ void printMsg(CANMessage& msg) { pc.printf(" ID = 0x%.3x\r\n", msg.id); @@ -91,16 +91,16 @@ pc.printf("CAN_Hello board #2\r\n"); #endif while(1) { - if(timer.read_ms() >= 1000) { // check for timeout - timer.stop(); // stop timer - timer.reset(); // reset timer - counter++; // increment counter - voltage = (analogIn * 3.3f) / 4096.0f; // read the small drifting voltage from analog input - txMsg.clear(); // clear Tx message storage - txMsg.id = TX_ID; // set ID - txMsg << counter << voltage;// append data (total data length must be <= 8 bytes!) - if(can.write(txMsg)) { // transmit message - led = OFF; // turn the LED off + if(timer.read_ms() >= 1000) { // check for timeout + timer.stop(); // stop timer + timer.reset(); // reset timer + counter++; // increment counter + voltage = analogIn * 3.3f; // read the small drifting voltage from analog input + txMsg.clear(); // clear Tx message storage + txMsg.id = TX_ID; // set ID + txMsg << counter << voltage; // append data (total data length must not exceed 8 bytes!) + if(can.write(txMsg)) { // transmit message + led = OFF; // turn the LED off pc.printf("-------------------------------------\r\n"); pc.printf("CAN message sent\r\n"); printMsg(txMsg);