2019 Off season development Test of CAN communication Nucleo Board STM32 F446RE
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Fri Jul 15 2022 11:33:58 by
1.7.2