定制一个CAN-bus应用层协议及其驱动.ppt_第1页
定制一个CAN-bus应用层协议及其驱动.ppt_第2页
定制一个CAN-bus应用层协议及其驱动.ppt_第3页
定制一个CAN-bus应用层协议及其驱动.ppt_第4页
定制一个CAN-bus应用层协议及其驱动.ppt_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

定制一个CAN应用层协议及其驱动,目 录,CAN应用层协议驱动函数,制定CAN应用层协议说明,CAN应用层协议结构定义,定制CAN应用层协议,本节制定一个简单的CAN应用层协议并实现其驱动,协议中只使用 了标准帧中的数据帧。协议定义如下:,SrcAddr:发送CAN报文节点的地址,DstAddr:接收CAN报文节点的地址,FunCode:功能码,指明一帧数据的作用,FunDataLen:功能参数长度变量,指示功能参数的字节个数,FunData: 功能参数数组,最多包含8个字节,目 录,CAN应用层协议驱动函数,制定CAN应用层协议说明,CAN应用层协议结构定义,CAN应用层协议结构体定义,根据定制的CAN应用层协议,定义CanAppProtocolFrame_t联合数据 类型,如下:,typedef union CanFrame_t CanFrame; struct unsigned long SrcAddr:4; / 源地址 unsigned long DstAddr:4; / 目的地址 unsigned long FunCode:3; / 功能码 unsigned long resev:5; / 保留位 unsigned long resev1:8; / 保留位 unsigned long resev2:8; / 保留位 unsigned char FF; / 是否为扩展帧 unsigned char RTR; / 是否为远程帧 unsigned char FunCodeLen; / 功能参数长度 unsigned char FunCode8; / 功能参数数组 ProtocolFrame; CanAppProtocolFrame_t;,由于联合体成员是共享内存的, 所以ProtocolFrame和 CanFrame_t 结构体实例的成 员之间存在对应关系。,CAN应用层协议结构体定义,ProtocolFrame结构体实例,以小端存储结构为例,ProtocolFrame结构体实例的成员与CanFrame-t 结构 体实例成员占用内存空间是一一对应的。,CanFrame_t 结构体实例,resev1,resev2,FF,RTR,FunCodeLen,FunCode0,FunCode8,ID23:16,ID15:8,ID7:0,FF,RTR,DLC,Data0,Data 8,ID31:24,目 录,CAN应用层协议驱动函数,制定CAN应用层协议说明,CAN应用层协议结构定义,CAN报文处理函数定义,首先,CAN应用层协议驱动定义一个函数指针类型,在CAN帧处理 函数中调用该类型的回调函数识别功能码和功能参数。,CAN报文处理函数,功能码,功能参数,函数功能:处理接收到的CAN帧,本地地址,指向接收到的 CAN帧的指针,具体处理CAN帧 的回调函数指针,返回值:1报文处理成功; 0报文处理过程中出错。,CAN报文处理函数,CAN帧处理函数具体如下:,Int CAN_CapFrameHandle(char LocalAddr, CanFrame_t *pCanFrame, CapHandle_PFUN callback) CanAppProtocolFrame_t *pCp = NULL; if(pCanFrame = NULL) return 0; / 如果指针为空则返回失败 pCp = (CanAppProtocolFrame_t *)pCanFrame; / 转化成指针类型 if (pCp-ProtocolFrame.FF != 0) return 0; / 不使用扩展帧 if (pCp-ProtocolFrame.RTR != 0) return 0; / 不使用远程帧 if (pCp-ProtocolFrame.DstAddr != LocalAddr) return 0; / 保证接收帧的地址等于 / 本地地址 if (callback != NULL) / 调用回调函数处理CAN帧 callback(pCp-ProtocolFrame.FunCode, pCp-ProtocolFrame.FunData0); return 1; / 处理成功返回1 return 0; ,应用层CAN帧发送函数,应用层CAN帧发送函数定义如下:,函数功能:应用层发送CAN帧,源地址:发送CAN帧的节点地址,目的地址:接收CAN帧的节点地址,功能码:表示CAN帧的具体作用,功能参数,功能参数的长度(以字节计数),返回值:1报文发送成功; 0报文发送失败。,应用层CAN帧发送函数,应用层CAN帧发送函数具体如下:,int CAN_CapFrameSend(char SrcAddr, char DstAddr, char cmd, char *pData, char len) CanAppProtocolFrame_t Cp; Cp.CanFrame.FF = 0; / 设定成标准帧 Cp.CanFrame.RTR = 0; / 设定成数据帧 Cp-ProtocolFrame.SrcAddr = SrcAddr; / 设定CAN帧源地址 Cp-ProtocolFrame.DstAddr = DstAddr; / 设定CAN帧目的地址 Cp-ProtocolFrame.FunCode = cmd; / 设置功能码 if (pData != NULL) if (len 8) return 0; / 数据长度大于8个字节发送失败 memcpy(Cp.ProtocolFrame.FunData

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论