Gerardo Antonio
/
CANnucleo_Hello3
CAN a enviar_TLMoto
Fork of CANnucleo_Hello by
Diff: main.cpp
- Revision:
- 12:4f5cec652e77
- Parent:
- 11:07d927da1a94
- Child:
- 13:77261ea62081
--- a/main.cpp Fri Mar 11 12:29:38 2016 +0000 +++ b/main.cpp Sun Jun 26 13:59:00 2016 +0000 @@ -1,122 +1,34 @@ -/* - * An example showing how to use the CANnucleo library: - * - * 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/CANnucleo_Hello/> - * - * NOTE: If you'd like to use the official NUCLEO boards comment out line 25 - * - * The same code is used for both NUCLEO boards, but: - * For board #1 compile the example without any change. - * For board #2 comment out line 26 before compiling - * - * Once the binaries have been downloaded to the boards reset board #1. - * - */ - #include "mbed.h" #include "CAN.h" -#define TARGET_STM32F103C8T6 1 // comment out this line when using official NUCLEO boards! -#define BOARD1 1 // comment out this line when compiling for board #2 - -#if defined(TARGET_STM32F103C8T6) - #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 + // const unsigned int TX_ID = 0x101; + const unsigned int TX_ID = 0x155; //em binario: 101010101 -#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 - -DigitalOut led(LED_PIN); +DigitalOut led(PA_5); int ledState; -Timer timer; CAN can(PA_11, PA_12); // CAN Rx pin name, CAN Tx pin name -CANMessage rxMsg; CANMessage txMsg; int counter = 0; -volatile bool msgAvailable = false; -/** - * @brief 'CAN receive-complete' interrup handler. - * @note Called on arrival of new CAN message. - * Keep it as short as possible. - * @param - * @retval - */ -void onMsgReceived() { - msgAvailable = true; -} - -/** - * @brief Main - * @note - * @param - * @retval - */ int main() { - can.frequency(1000000); // set bit rate to 1Mbps - can.attach(&onMsgReceived, CAN::RxIrq); // attach 'CAN receive-complete' interrupt handler - -#if defined(BOARD1) - led = ON; // turn LED on - timer.start(); // start timer -#else - led = OFF; // turn LED off -#endif + can.frequency(100000); // set bit rate to 1Mbps + led = 1; // turn LED on while(1) { - if(timer.read() >= 1.0) { // check for timeout - timer.stop(); // stop timer - timer.reset(); // reset timer + wait(10); + counter++; // increment counter - ledState = led.read(); // get led state - txMsg.clear(); // clear Tx message storage - txMsg.id = TX_ID; // set ID - txMsg << counter; // append first data item - txMsg << ledState; // append second data item (total data lenght must be <= 8 bytes!) - led = OFF; // turn LED off + // ledState = led.read(); // get led state + ledState = 1; + txMsg.clear(); // clear Tx message storage + txMsg.id = TX_ID; // set ID (9 bits) + txMsg << counter; // append first data item (32? bits?=4bytes) + txMsg << ledState; // append second data item (total data lenght must be <= 8 bytes!) (=4bytes) + if(can.write(txMsg)) // transmit message - printf("CAN message sent\r\n"); + led = 1; // turn LED on else - printf("Transmission error\r\n"); - } - if(msgAvailable) { - msgAvailable = false; // reset flag for next use - can.read(rxMsg); // read message into Rx message storage - printf("CAN message received:\r\n"); - printf(" ID = %#x\r\n", rxMsg.id); - printf(" Type = %d\r\n", rxMsg.type); - printf(" Format = %d\r\n", rxMsg.format); - printf(" Length = %d\r\n", rxMsg.len); - printf(" Data ="); - for(int i = 0; i < rxMsg.len; i++) - printf(" %x", rxMsg.data[i]); - printf("\r\n"); - // Filtering performed by software: - if(rxMsg.id == RX_ID) { // See comments in CAN.cpp for filtering performed by hadware - rxMsg >> counter; // extract first data item - rxMsg >> ledState; // extract second data item - printf("counter = %d\r\n", counter); - led = ledState; // set LED - timer.start(); // transmission lag - } - } + led = 0; // turn LED off + } -} - +} \ No newline at end of file