STM32F4 CAN怎么判断数据是否发送成功

  • Post author:
  • Post category:其他


#平台:STM32F405RGT6 库函数版本

最近在做一个CAN/2.4G冗余的通信设计,CAN在线就用CAN通信,反之则切换到无线。一般有线如RS485通信须从机返回一个应答帧来确认数据发送成功与否,但是这种方法会降低通信效率。

CAN可以通过邮箱状态来判断数据是否发送成功。如果邮箱中的报文被成功发送,那么邮箱状态变为空邮箱。如果邮箱中的报文发送失败了,那么邮箱状态变为无空闲邮箱。

void CAN1_Send_Msg(u8* msg,u8 len)
{	
  u8 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x12;	 // 标准标识符为0
  TxMessage.ExtId=0x12;	 // 设置扩展标示符(29位)
  TxMessage.IDE=0;		   // 使用扩展标识符
  TxMessage.RTR=0;		   // 消息类型为数据帧,一帧8位
  TxMessage.DLC=len;	   // 发送两帧信息
  for(i=0;i<len;i++)
  TxMessage.Data[i]=msg[i];				 // 第一帧信息          
  CAN_Transmit(CAN1, &TxMessage);  
	delay_ms(10);//最小时间间隙为5ms
	while((CAN1->TSR&CAN_TSR_TME0) != CAN_TSR_TME0)//如果邮箱0不是空,代表数据发送失败
	{
		can1Error=true;
		return;
	}
	
	can1Error=false;

}

特别注意,此方法只能在两台设备之间通信有用,多台设备不合适。

下面是工程文件,里面还包括CAN2的数据发送状态判断。


STM32F4 CAN怎么判断数据是否发送成功



版权声明:本文为qq_39927210原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。