Can sample
Dependencies: mbed-dev
Fork of CAN_Hello by
Revision 2:3dac3d4b0aeb, committed 2017-08-11
- Comitter:
- tknara
- Date:
- Fri Aug 11 05:59:03 2017 +0000
- Parent:
- 1:6f8ffb2c2dd7
- Commit message:
- Can test program;
Changed in this revision
--- a/CANMsg.lib Sat Mar 18 18:37:21 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/users/hudakz/code/CANMsg/#3d11ed680b6a
--- a/main.cpp Sat Mar 18 18:37:21 2017 +0000 +++ b/main.cpp Fri Aug 11 05:59:03 2017 +0000 @@ -1,129 +1,22 @@ -/* - * An example showing how to use the mbed CAN API: - * - * Two affordable (less than $3 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. - * 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_Hello/> - * - * NOTE: If you'd like to use an STM32F103C8T6 board uncomment line 23 - * - * 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 - * - * Once the binaries have been downloaded to the boards reset board #1. - * - */ -#define BOARD1 1 // comment out this line when compiling for board #2 - -//#define TARGET_STM32F103C8T6 1 // uncomment this line when using STM32F103C8T6 boards! - -#if defined(TARGET_STM32F103C8T6) -#include "stm32f103c8t6.h" -#define LED_PIN PC_13 -const int OFF = 1; -const int ON = 0; -#else -#define LED_PIN LED1 -const int OFF = 0; -const int ON = 1; -#endif -#if defined(BOARD1) -const unsigned int RX_ID = 0x100; -const unsigned int TX_ID = 0x101; -#else -const unsigned int RX_ID = 0x101; -const unsigned int TX_ID = 0x100; -#endif #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 -CANMsg rxMsg; -CANMsg txMsg; -DigitalOut led(LED_PIN); -Timer timer; -uint8_t counter = 0; -AnalogIn analogIn(A0); -float voltage; - -/** - * @brief Prints CAN msg to PC's serial terminal - * @note} - * @param CANMessage to print - * @retval none - */ -void printMsg(CANMessage& msg) { - pc.printf(" ID = 0x%.3x\r\n", msg.id); - pc.printf(" Type = %d\r\n", msg.type); - pc.printf(" Format = %d\r\n", msg.format); - pc.printf(" Length = %d\r\n", msg.len); - pc.printf(" Data ="); - for(int i = 0; i < msg.len; i++) - pc.printf(" 0x%.2X", msg.data[i]); - pc.printf("\r\n"); +Ticker ticker; +CAN can1(PA_11,PA_12); +//CAN can2(PB_12,PB_13); +Serial pc(USBTX,USBRX); +char counter = 0; +#define ID 7 +void send() { + printf("send()\n"); + if(can1.write(CANMessage(ID, &counter, 1))) { + printf("Message sent: %d\n", counter); + counter++; + } } - -/** - * @brief Main - * @note - * @param - * @retval - */ -int main(void) -{ -#if defined(TARGET_STM32F103C8T6) - confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock) -#endif - pc.baud(9600); // set Serial speed - can.frequency(1000000); // set bit rate to 1Mbps -#if defined(BOARD1) - led = ON; // turn the LED on - timer.start(); // start timer - pc.printf("CAN_Hello board #1\r\n"); -#else - led = OFF; // turn LED off - pc.printf("CAN_Hello board #2\r\n"); -#endif + +int main() { + printf("main()\n"); + ticker.attach(&send,0.001); + CANMessage msg; 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 - pc.printf("-------------------------------------\r\n"); - pc.printf("CAN message sent\r\n"); - printMsg(txMsg); - pc.printf(" counter = %d\r\n", counter); - pc.printf(" voltage = %e V\r\n", voltage); - } - else - pc.printf("Transmission error\r\n"); - } - - if(can.read(rxMsg)) { - led = ON; // turn the LED on - pc.printf("-------------------------------------\r\n"); - pc.printf("CAN message received\r\n"); - printMsg(rxMsg); - - // Filtering performed by software: - if(rxMsg.id == RX_ID) { - rxMsg >> counter >> voltage; // extract data from the received CAN message - pc.printf(" counter = %d\r\n", counter); - pc.printf(" voltage = %e V\r\n", voltage); - timer.start(); // transmission lag - } - } } -} +} \ No newline at end of file
--- a/mbed-STM32F103C8T6.lib Sat Mar 18 18:37:21 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/hudakz/code/mbed-STM32F103C8T6/#09d8c2eacb4d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-dev.lib Fri Aug 11 05:59:03 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/mbed_official/code/mbed-dev/#19eb464bc2be
--- a/mbed.bld Sat Mar 18 18:37:21 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://mbed.org/users/mbed_official/code/mbed/builds/093f2bd7b9eb \ No newline at end of file