STM32 CAN多个报文发送程序调试遇到的疑问

2019-07-21 04:50发布

关于以下程序我的疑问是:
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};
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
jondorthird
1楼-- · 2019-07-22 02:21
嘿嘿 发送固定报文的程序 调试过了没有问题了,只剩下发送变量的问题了。
正点原子
2楼-- · 2019-07-22 07:01
 精彩回答 2  元偷偷看……
jondorthird
3楼-- · 2019-07-22 12:06
嘿嘿,解决了,调试进行中,希望能顺利。谢谢@原子
wang12zhe
4楼-- · 2019-07-22 12:57
回复【10楼】jondorthird:
---------------------------------
请教一个问题,STM32是怎么选择使用哪个邮箱的,
比如我想使用邮箱0 发送  怎么选择邮箱0????

http://www.openedv.com/posts/list/38867.htm
jondorthird
5楼-- · 2019-07-22 14:01
原子的CAN 初始化函数里面有的,你仔细看看
jondorthird
6楼-- · 2019-07-22 17:44
回复【11楼】wang12zhe:
---------------------------------
原子的CAN 初始化函数里面有的,你仔细看看

一周热门 更多>