TxMessage.DLC最多是8字节,我一次要发24个。分三次发,发送程序如下
TestStatus CAN_Polling(void) { u32 i = 0; u8 m=0; //每次发送的字节数 u8 n=0; //总的发送的字节数 u8 p; //清空缓存用 u8 TransmitMailbox; //发送邮箱
TxMessage.StdId=0x11; //对方ID码 TxMessage.RTR=CAN_RTR_DATA; //数据帧 TxMessage.IDE=CAN_ID_STD; //标准帧 TxMessage.DLC=8; //每次放8个字节,三次发24个 for(;n<24;m++,n++) { TxMessage.Data[m]=n;//CAN_SendDataTab[n]; while(m==8) { m=0; TransmitMailbox=CAN_Transmit(&TxMessage);//开始发送数据 i = 0; //检测是否发送成功 while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF)) { i++;//若发送255次仍失败则自动CAN复位 } i = 0; while((CAN_MessagePending(CAN_FIFO0) < 1) && (i != 0xFF)) { i++; } //CAN数据位清空,留着存下一组八字节 for(p=0;p<8;p++) { TxMessage.Data[p]=0; } } //index=+1; return PASSED; /* 24个字节全部发送成功 */ }
运行结果:00 01 02 03 04 05 06 07。剩下来16字节就没得了 而我想要的是:00 01 02 03 04 05 06 07 00 09 0a 0b 0c 0d 0e 0f 00 11 12 13 14 15 16 17
|