2019 Off season development Test of CAN communication Nucleo Board STM32 F446RE

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /** NucleoF446re CAN1,CAN2 TEST CODE **/
00002 /** 2019/11/27 Coding by Nagito Sukegawa **/
00003 /** 2019/11/28 Add can2Rcv Function **/
00004 /** 参考元 福島B Coding by YutaTogashi,@nitfc_togatogah URL:https://os.mbed.com/users/YutaTogashi/code/robocon2019_AutoRobot_mbed_testVer/ **/
00005 
00006 #include "mbed.h"
00007 
00008 void can1Trans(void);
00009 void can2Rcv(void);
00010 char counter[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
00011 char RcvData[8];
00012 Ticker ticker;
00013 DigitalOut myled(LED1);
00014 CAN can1(PB_8, PB_9,500000);    //データ吐く方//D15,D14
00015 CAN can2(PB_5, PB_6,500000);    //データ受ける方//D4,D10
00016 Serial pc(USBTX,NC,115200);
00017 CANMessage msg1(0x456,counter,8,CANData,CANStandard);
00018 CANMessage msg2(0x539,CANStandard);
00019 
00020 
00021 int main()
00022 {
00023     ticker.attach(&can1Trans, 0.05);
00024     can2.attach(&can2Rcv,CAN::RxIrq);
00025     pc.printf("\033[2J");
00026     while(1) {
00027 //        pc.printf("TEST_CAN\n");
00028         wait(0.01);
00029     }
00030 }
00031 
00032 
00033 /** CAN1送信関数 **/
00034 void can1Trans(void)
00035 {
00036     if(counter[0] % 0x10 == 0) {
00037         msg1.id = 0x456;
00038         for(uint8_t i=0; i<8; i++) {
00039             msg1.data[i] = counter[i]++;
00040         }
00041     } else {
00042         msg1.id = 0x500;
00043         for(uint8_t i=0; i<8; i++) {
00044             msg1.data[i] = counter[i]++;
00045         }
00046     }
00047     if(can1.write(msg1)) {
00048         myled = !myled;
00049         pc.printf("\033[1;1HCAN1 TRANSID: 0x%x", msg1.id);
00050         pc.printf("\033[2;1HCAN1 DATA[0]: 0x%x", msg1.data[0]);
00051         pc.printf("\033[3;1HCAN1 DATA[1]: 0x%x", msg1.data[1]);
00052         pc.printf("\033[4;1HCAN1 DATA[2]: 0x%x", msg1.data[2]);
00053         pc.printf("\033[5;1HCAN1 DATA[3]: 0x%x", msg1.data[3]);
00054         pc.printf("\033[6;1HCAN1 DATA[4]: 0x%x", msg1.data[4]);
00055         pc.printf("\033[7;1HCAN1 DATA[5]: 0x%x", msg1.data[5]);
00056         pc.printf("\033[8;1HCAN1 DATA[6]: 0x%x", msg1.data[6]);
00057         pc.printf("\033[9;1HCAN1 DATA[7]: 0x%x", msg1.data[7]);
00058     }
00059     if(counter[0] >= 0xF0)
00060         pc.printf("\033[2J");
00061 }
00062 
00063 /** CAN2受信関数 **/
00064 void can2Rcv(void)
00065 {
00066     can2.read(msg2);
00067     pc.printf("\033[1;25HCAN2 RCVID: 0x%x\n", msg2.id);
00068     if(msg2.id == 0x539) {
00069         for(uint8_t i=0; i<8; i++) {
00070             RcvData[i] = msg2.data[i];
00071         }
00072         pc.printf("\033[2;25HCAN2 DATA[0]: 0x%x", RcvData[0]);
00073         pc.printf("\033[3;25HCAN2 DATA[0]: 0x%x", RcvData[1]);
00074         pc.printf("\033[4;25HCAN2 DATA[0]: 0x%x", RcvData[2]);
00075         pc.printf("\033[5;25HCAN2 DATA[0]: 0x%x", RcvData[3]);
00076         pc.printf("\033[6;25HCAN2 DATA[0]: 0x%x", RcvData[4]);
00077         pc.printf("\033[7;25HCAN2 DATA[0]: 0x%x", RcvData[5]);
00078         pc.printf("\033[8;25HCAN2 DATA[0]: 0x%x", RcvData[6]);
00079         pc.printf("\033[9;25HCAN2 DATA[0]: 0x%x", RcvData[7]);
00080         myled = !myled;
00081     }
00082 }