关于以下程序我的疑问是:
1.以下程序在编译时候并未出错,在can.h中对发送函数:u8 CAN1_SendData(u8 *TXmsg1,u8 *TXmsg2)无法完成声明,一声明编译就过不了,由于main函数还没去写,所以这个问题不解决就没法去写main函数,是不是发送函数的参数写的不太对?。
2.can发送部分我的想法是实现2个报文的发送,在发送函数中我初始化了两次发送这样的做法对吗,可以实现我的想法吗?
3.潜在的错误:为了让can调试可以顺利进行,我将发送的数据定义为了常量;然而实际应一般肯定是变量,那么我该使用什么样的方式去实现变量的发送?
在此我诚挚请求论坛前辈能帮帮我,特别是原子大哥哥。
/*发送数据(8Byte)声明*/
u8 Data_ECU_Base1[8] = { Tem,speed_L,speed_H,Thro_L, Thro_H,BoostFlag,Tem_Null_6, Tem_Null_7};
u8 Data_ECU_Base2[8] = {TPressFlag,VIN_L, VIN_M,VIN_H, DoorFlag,LBeltFlag, OilPress_L,OilPress_H};
/*CAN发送部分*/
//发送2组报文,扩展格式ID
//数据长度 8 byte
//TXmsg:数据指针 8 byte
//返回值0:发送成功;其它:发送失败
u8 CAN1_SendData(u8 *TXmsg1,u8 *TXmsg2)
{
u8 i,j;
u8 TMailbox;
CanTxMsg TxMessage; //申请报文空间
/*ECU发送广播报文1*/
TxMessage.StdId = (ExtId_ECU_B1>>18)&0x7ff; //设置扩展CAN ID 标准基本ID部分 11位
TxMessage.ExtId = ExtId_ECU_B1&0x3FFFF; //设置扩展CAN ID 扩展ID部分 18位
TxMessage.RTR = CAN_RTR_DATA; //数据帧 0
TxMessage.IDE = CAN_ID_EXT; //设置IDE为扩展格式ID标志 0
TxMessage.DLC = 8; //数据长度 8byte,每次发送1帧(1byte)
for(i=0;i<8;i++) //小端方式发送,共8帧
{
TxMessage.Data = TXmsg1; //发送数据
}
TMailbox = CAN_Transmit(CAN1,&TxMessage);//发送的数据
i=0;
while((CAN_TransmitStatus(CAN1, TMailbox)==CAN_TxStatus_Failed)&&(i<0XFF))i++; //等待发送结束
/*ECU发送广播报文2*/
TxMessage.StdId = (ExtId_ECU_B2>>18)&0x7ff; //设置扩展CAN ID 标准基本ID部分 11位
TxMessage.ExtId = ExtId_ECU_B2&0x3FFFF; //设置扩展CAN ID 扩展ID部分 18位
TxMessage.RTR = CAN_RTR_DATA; //数据帧 0
TxMessage.IDE = CAN_ID_EXT; //设置IDE为扩展格式ID标志 0
TxMessage.DLC = 8; //数据长度 8byte,每次发送1帧(1byte)
for(j=0;j<8;j++) //小端方式发送,共8帧
{
TxMessage.Data[j] = TXmsg2[j]; //发送数据
}
TMailbox = CAN_Transmit(CAN1,&TxMessage);//发送的数据
j=0;
while((CAN_TransmitStatus(CAN1, TMailbox)==CAN_TxStatus_Failed)&&(j<0XFF))j++; //等待发送结束
if(i>=0XFFF||j>=0XFFF)return 1;
return 0;
}
can.h文本中关于CAN发送部分我是这样写的
/*发送报文ID宏定义*/
#define ExtId_ECU_B1 0x16FE03E4
#define ExtId_ECU_B2 0x16FE04E4
/*为了能调试过我把发送的数据在h文件中定义为常量*/
enum{Tem = 38,speed_L = 0xFF,speed_H = 0x03,Thro_L = 0xFF,Thro_H = 0xAF,
BoostFlag = 0x01,Tem_Null_6 = 0xFF,Tem_Null_7 = 0xFF};
enum{TPressFlag = 0x02,VIN_L = 0x12,VIN_M = 0x34,VIN_H = 0x56,DoorFlag = 0xaa,
LBeltFlag = 0x00,OilPress_L = 0x1E,OilPress_H =0x11};
|