CAN相关简单记录

CAN高速与低速/容错:

电气特性
高速:5K-1M的通信速率,在每个端点接上120欧姆的电阻。
低速:也叫容错CAN,通信速率为5K-125K,此标准下,允许CAN通信连线失败的情况下通信继续。

显性电平的逻辑值为“0”,隐性电平为“1”。
加入120欧姆电阻是为了匹配总线抗阻,提高数据的抗干扰性以及可靠性。


CAN通信的特点:

优点:
1.采用两线串行通讯方式,具有较强的错误检测能力,可以在高噪声干扰环境下工作
2.具有实时性强,传输距离长,抗电磁干扰强,成本低的优点。
3.可靠的错误处理和错误检测机制
4.可根据报文的ID决定接收或屏蔽该报文
5.具有通过CAN控制器将多个控制模块连接到CAN总线以形成多主机本地网络的优先级和仲裁功能
6.消息的身份可以决定接收还是屏蔽消息
7.如果传输的信息已损坏,则可以自动重新传输
8.该消息不包含源地址和目标地址,仅使用标志来指示功能信息和优先级信息
9.节点在错误严重的情况下具有自动退出总线的功能

缺点:
1.不一致性:节点A认为帧出错,节点B不认为出错
2.不可预测性:由接收错误计数器的值,进而影响节点状态
3.信道出错堵塞:数据帧正确,但是因为一些原因数据一直发送不出去


CAN速率与距离:

通信距离最远可达10KM(速率低于5Kbps),速率最高可达到1Mbps(通信距离小于40M)。传输距离和速率成反比,且对线材要求比较高。


CAN帧格式:

can帧结构


CAN远程帧与数据帧:

远程帧与数据帧的差异
远程用于向某一can节点请求数据,相对于数据帧缺少数据段,且数据帧的发送优先级远高于远程帧的优先级。
远程帧就像命令,请求指定的ID节点返回数据。主要用于请求某个指定的节点发送数据,避免总线冲突。


CAN标准帧与扩展帧:

can的标准帧与扩展帧相差不大,扩展帧的仲裁段ID部分有29位而标准帧只有11位(仲裁段还包括1位远程帧标识符,1:远程帧 0:数据帧)。扩展帧主要是帧ID的扩展,即为了增加更多的can节点。
注意:帧ID不是表示发送的目的地址,表示的是其优先级,ID越小,优先级越高,最高优先级为0X000。


CAN总线仲裁:

CAN控制器在发送数据时,实时监测数据线的电平是否与发送数据对应电平相同,如果不同则做其他处理。如果处于仲裁段则退出总线竞争,处于其他段则产生错误事件(除去帧ACK时间段或被动错误标志传输期间)。


CAN协议:

CAN协议的保温传输过程中有数据帧、远程帧、错误帧、过载帧和帧间隔。
1.数据帧:用于发送节点向接收节点传输数据的帧(传统数据发送)。
2.远程帧:用于接收节点向具有相同ID的发送节点传送数据的帧(请求某一节点发送数据)。
3.错误帧:用于当检测出错误时向其他节点通知错误的帧(数据有问题)。
4.过载帧:用于接收节点通知其尚未做好准备的帧(接收不过来了)。
5.帧间隔:用于将数据帧及远程帧与前面的帧分隔开来(间隔时间)。


CAN在STM32中的应用:

STM32F4中can的发送:

	ptx_msg->StdId = m->cob_id;//帧ID
	if(m->rtr){	 
		ptx_msg->RTR = CAN_RTR_REMOTE;
	}
	else{
		 ptx_msg->RTR = CAN_RTR_DATA;
	}
	ptx_msg->IDE = CAN_ID_STD;
	ptx_msg->DLC = m->len;
	for(int i = 0; i < m->len; i++){
		 ptx_msg->Data[i] = m->data[i];
	}		
	if( CAN_Transmit( CAN1, ptx_msg )==CAN_NO_MB ){
		//发送 并判断是否发送失败
	}

STM32H7中can的发送:

while(!(HAL_FDCAN_GetTxFifoFreeLevel(&FDCANx_Handler))){
	delay_100us(100);
	//查询队列是否满
}
FDCANx_TxHeader.Identifier = canID;//帧ID
FDCANx_TxHeader.IdType = FDCAN_STANDARD_ID;//标准ID
FDCANx_TxHeader.TxFrameType = FDCAN_DATA_FRAME;//数据帧
FDCANx_TxHeader.DataLength = FDCAN_DLC_BYTES_8;//数据长度
FDCANx_TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;//激活错误状态指示            
FDCANx_TxHeader.BitRateSwitch = FDCAN_BRS_OFF;//关闭速率切换
FDCANx_TxHeader.FDFormat = FDCAN_CLASSIC_CAN;//传统的CAN模式
FDCANx_TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;//无事件
FDCANx_TxHeader.MessageMarker = 0; //标识状态                          
if(HAL_FDCAN_AddMessageToTxFifoQ(&FDCANx_Handler,&FDCANx_TxHeader,msg)!= HAL_OK){
	//msg是8字节的数组指针  此处发送数据
	Error_Handler(__FILE__, __LINE__);
}

//接收can数据
//FDCAN_HandleTypeDef *hfdcan
HAL_FDCAN_GetRxMessage(hfdcan,FDCAN_RX_FIFO0,&FDCANx_RxHeader,rxdata);

STM32H7中的CAN是可以为FDCAN的,其是在CAN上的升级版本。
具有
1.数据长度由8个字节上升到64字节。
2.通信速率由1M上升到5M。其在仲裁段的通信速率跟CAN一样最高为1M,这样可以保证总线的健壮性,但是在数据段的速率可以达到5M,一个数据帧采用不同的速率发送,这就是FD的由来。
3.向下兼容CAN。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值