Kevin Konradt
/
CanBusExample1
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "CAN.h" 00003 00004 Ticker ticker; 00005 00006 DigitalOut led1(LED1); 00007 DigitalOut led2(LED2); 00008 00009 // CAN_RS pin at Philips PCA82C250 can bus controller. 00010 // activate transceiver by pulling this pin to GND. 00011 // (Rise and fall slope controlled by resistor R_s) 00012 // (+5V result in tranceiver standby mode) 00013 // For further information see datasheet page 4 00014 DigitalOut can_Pca82c250SlopePin(p28); 00015 00016 // second can controller on these pins. Not used here. 00017 // CAN can1(p9, p10); 00018 00019 // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD). 00020 CAN can2(p30, p29); 00021 00022 void send() { 00023 static char counter = 0; 00024 if (can2.write(CANMessage(0x200, &counter, 1))) { 00025 printf("CanTx--> id: 0x200 dlc: 1 data: %x\n\r", counter); 00026 counter++; 00027 } 00028 // toggle led1 after every transmission 00029 led1 = !led1; 00030 } 00031 00032 int main() { 00033 // 500kbit/s 00034 can2.frequency(500000); 00035 // activate external can transceiver 00036 can_Pca82c250SlopePin = 0; 00037 // every 500ms 00038 ticker.attach(&send, 0.5); 00039 /// create message object for message reception 00040 CANMessage can_MsgRx; 00041 while (1) { 00042 // send received messages to the pc via serial line (9k6, 8n1) 00043 if (can2.read(can_MsgRx)) { 00044 printf("CanRx--> id: 0x%x dlc: %d data: ", can_MsgRx.id, can_MsgRx.len); 00045 for (char i=0; i<can_MsgRx.len; i++) { 00046 printf("%x ", can_MsgRx.data[i]); 00047 } 00048 printf("\n\r"); 00049 // any incoming message: toggle led2 00050 led2 = !led2; 00051 } 00052 } 00053 }
Generated on Thu Jul 28 2022 01:59:18 by 1.7.2