出自flip the world 檢視CAN bus的原始碼 頁面討論 閱讀檢視原始碼檢視歷史 ←CAN bus 您沒有權限執行編輯此頁面,由於以下原因: 您請求的操作只有這個群組的使用者能使用:使用者 您可以檢視並複製此頁面的原始碼。 Bringing up a '''CAN bus''' with an SN65HVD251 transceiver, looped between the two CAN controllers of an mbed LPC1768. == CAN TRANSCEIVER Module - SN65HVD251 == [[File:CAN_TRANSCEIVER_Module.jpg|border|350px|CAN TRANSCEIVER Module]] [[File:CAN_TRANSCEIVER_Module_01.jpg|CAN TRANSCEIVER Module]] == Setup CAN bus == * loops the data between the mbed LPC1768's two CAN buses. [[File:Can.jpg|border|350px|CAN bus + LPC1768]] [[File:CAN_self_test.png|border|350px|CAN bus looping]] == Code == <syntaxhighlight lang="c"> #include "mbed.h" #include "CAN.h" Ticker ticker; DigitalOut led1(LED1); DigitalOut led2(LED2); CAN can1(p9, p10); CAN can2(p30, p29); Serial pc(USBTX, USBRX); char counter = 0; void send() { //pc.printf("send()\n"); if(can1.write(CANMessage(1337, &counter, 1))) { //pc.printf("wloop()\n"); counter++; //pc.printf("Message sent: %d\n", counter); } led1 = !led1; } int main() { pc.printf("main()\n"); ticker.attach(&send, 1); CANMessage msg; while(1) { //pc.printf("loop()\n"); if(can2.read(msg)) { pc.printf("Message received: %4d\n\r", msg.data[0]); led2 = !led2; } wait(0.2); } } </syntaxhighlight> == Result == * stty -F /dev/ttyACM0 speed 9600 -crtscts cs8 -cstopb -parenb -icrnl * cat < /dev/ttyACM0 <pre> The following will using CAN bus to send counting message from 0 to 255 and repeat again: ... Message received: 246 Message received: 247 Message received: 248 Message received: 249 Message received: 250 Message received: 251 Message received: 252 Message received: 253 Message received: 254 Message received: 255 Message received: 0 Message received: 1 Message received: 2 Message received: 3 Message received: 4 Message received: 5 ... </pre> == Reference == * [https://developer.mbed.org/handbook/CAN ARMmbed CAN] [[Category:Connectivity]] 返回到「CAN bus」。