CAN总线的原理及使用教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

CAN总线及应用MSCAN08/MSCAN122一、目标定位目标:以MSCAN08和MSCAN12为示例,讲述CAN现场总线,初步掌握CAN总线技术的应用。基本要求:了解CAN通信协议基本概念,掌握CAN通信接口硬件设计和MSCAN08和MSCAN12编程方法MSCAN08/MSCAN123二、主要内容CAN技术规范MSCAN08模块MSCAN08通信接口硬件电路MSCAN08模块的编程结构MSCAN08通信子函数与测试实例MSCAN12模块MSCAN12模块的编程结构MSCAN12的自环测试实例MSCAN08/MSCAN124CAN通信协议主要描述设备之间的信息传递方式。CAN各层的定义与开放系统互连模型OSI一致。CAN技术规范定义了模型的最下面两层:数据链路层和物理层,是设计CAN应用系统的基本依据。1991年9月Bosch公司发布了CAN技术规范Version2.0。该技术规范包括A和B两部分,2.0A给出了在Version1.2中定义的CAN报文格式,而2.0B给出了标准的和扩展的两种报文格式。规范主要是针对CAN控制器的设计者,对大多数应用系统设计人员来说,只需对Version2.0版技术规范的基本结构、概念、规则作一般了解,知道一些基本参数和可访问的硬件即可。CAN技术规范MSCAN08/MSCAN125CAN的基本概念报文信息路由位速率优先权远程数据请求多主机仲裁错误标志和恢复时间故障界定连接单通道总线数据表示应答MSCAN08/MSCAN126报文和信息路由报文(Messages)在总线上传输的信息。信息路由(InformationRouting)CAN不对通信单元分配地址,报文的寻址内容由报文的标识符指定。所有CAN节点通过报文滤波来判断是否接收报文。MSCAN08/MSCAN127位速率位速率(BitRate)指总线的传输速率,下表列出了距离与位速率的相关数据。这里的最大距离是指不接中继器的两个单元之间的距离。MSCAN08/MSCAN128位定位与同步标称位速率(NominalBitRate):理想的发送器在没有重新同步的情况下每秒发送的位数量。标称位时间(NominalBitTime):是标称位速率的倒数。分成几个不重叠的片段:同步段(SYNC_SEG)、传播段(PROG_SEG)、相位段1(PHASE_SEG1)、相位段2(PHASE_SEG2)。同步段相位段1相位段2传播段采样点标称位时间MSCAN08/MSCAN129优先权优先权(Priorities)在CAN总线上发送的每一个报文都具有唯一的一个11位或29位的标识符,标识符越小,则报文优先权越高,因此一个为全0标识符的报文具有最高级优先权。MSCAN08/MSCAN1210单通道单通道(SingleChannel)CAN总线由单一通道组成,借助数据的同步实现信息传输,可以是单线(加地线)、两条差分线、光纤等,通常使用双绞线。MSCAN08/MSCAN1211总线表示总线数据表示(BusValues)CAN总线上用显性(Dominant)和隐性(Recessive)表示0和1。当在总线上出现同时发送显性位和隐性位时,总线上数值将出现显性。总线上的信号使用差分电压传送,两条信号线被称为CAN_H和CAN_L。MSCAN08/MSCAN1212标识符检验滤波当总线上有报文到达时,MSCAN08会将该报文的标识符与本地的标识符校验寄存器中进行比较,本地标识符屏蔽寄存器则是用于指定比较结果是否有影响,1表示相应位的比较结果不影响报文的接收。MSCAN08/MSCAN1213报文传输类型报文传输由4种不同的帧类型表示和控制:数据帧:数据帧将数据从发送器传输到接收器。远程帧:总线单元发出远程帧,请求发送具有同一标识符的数据帧。错误帧:任何单元检测到总线错误就发出错误帧。过载帧:过载帧用于在先行和后续数据帧(或远程帧)之间提供一附加的延时。MSCAN08/MSCAN1214数据帧结构帧间空间仲裁场控制场数据场CRC场帧结束数据帧帧起始应答场帧间空间或过载帧数据帧组成MSCAN08/MSCAN1215远程帧结构远程帧的组成帧间空间仲裁场控制场CRC场帧结束远程帧帧起始应答场帧间空间或过载帧MSCAN08/MSCAN1216错误帧结构错误帧的组成数据帧错误标志错误标志的重叠错误界定符错误帧帧间空间或过载帧MSCAN08/MSCAN1217过载帧结构过载帧的组成数据帧过载标志过载标志的重叠过载界定符过载帧帧间空间或过载帧MSCAN08/MSCAN1218MSCAN08特性MSCAN08---Freescale可升级控制器局域网(Motorolascalablecontrollerareanetwork,MSCAN):符合CAN2.0A/B协议标准,支持标准和扩展数据帧位速率可编程,最大1Mbps数据帧长度为0~8字节支持远程请求帧1个FIFO接收缓冲区,3个具有局部优先级的FIFO发送缓冲区标识符验收模式可配置成1个32位过滤码、2个16位过滤码、4个8位过滤码,或者关闭滤波器内置低通滤波的远程唤醒功能自环工作模式MSCAN08/MSCAN1219MSCAN08外部引脚MSCAN08有2根外部引脚:CANRX(输入)和CANTX(输出)CANTX代表CAN上的逻辑电平:0为高电平(显性),1为低电平(隐性)。MSCAN08模块构建的典型的CAN系统如图所示:MSCAN08/MSCAN1220MSCAN08通信接口电路MSCAN08/MSCAN1221MSCAN08的编程结构—内存映射MSCAN08/MSCAN1222MSCAN08的编程结构—报文收发缓冲区MSCAN08/MSCAN1223MSCAN08的编程结构—寄存器MSCAN08模式控制寄存器0(ModuleControlRegister0,CMCR0)MSCAN08模式控制寄存器1(ModuleControlRegister1,CMCR1)MSCAN08总线定时寄存器0(BusTimingRegister0,CBTR0)MSCAN08总线定时寄存器1(BusTimingRegister1,CBTR1)MSCAN08接收标志寄存器(ReceiverFlagRegister,CRFLR)MSCAN08接收中断使能寄存器(ReceiverInterruptEnableRegister,CRIER)MSCAN08发送标志寄存器(TransmitterFlagRegister,CTFLR)MSCAN08发送控制存器(TransmitterControlRegister,CTCR)MSCAN08标识符验收控制寄存器(IdentifierAcceptanceControlRegister,CIDACR)MSCAN08接收错误计数器(ReceiverErrorCounter,CRXERR)MSCAN08发送错误计数器(TransmitErrorCounter,CTER)MSCAN08标识符验收寄存器(IdentifierAcceptanceRegister,CIDAR)MSCAN08标识符屏蔽寄存器(IdentifierMaskRegister,CIDMR0-3)MSCAN08/MSCAN1224MSCAN08通信实现初始化第一步:初始化配置寄存器2(CONFIG2),启用MSCAN08。该位在复位后只能写1次。第二步:将模式控制寄存器0的SFTRES位置1,进入软复位状态。第三步:设置节点标识符。第四步:设置总线通信位速率。第五步:定义报文验收模式和验收屏蔽位。第六步:定义中断方式。第七步:进入正常工作方式。MSCAN08/MSCAN1225MSCAN08通信实现发送和接收函数//--------------函数声明--------------------------////发送1帧远程帧unsignedcharCANsnd1RFrm(unsignedintrid);//CAN发送1帧数据帧(数据长度=8)unsignedcharCANsnd1DFrm(unsignedintrid,unsignedchar*databuf,unsignedcharlen);//查找空闲发送缓冲区unsignedcharGetSndBuf(void);//接收1帧unsignedcharCANrcv1Frm(unsignedchar*canrcvbuf);MSCAN08/MSCAN1226MSCAN08自环通信测试实例(1).回环工作方式测试工程文件列表表17-8回环工作方式测试工程文件列表工程文件名CANSelfTest.prj所在路径MC08Ex2007\GP32\GP32C\C16_CAN\01_SelfTest文件类型文件名功能简述讲解章节GZ60C.h芯片头文件参见工程实例Includes.h总头文件[08C工程文件组织]5.3Type.h数据类型头文件[08C工程文件组织]5.3CANInit.h声明CAN初始化函数本章CAN.hCAN收发子函数头文件本章头文件Commsubs.h串行通信等通用子函数头文件参见工程实例vectors.c中断向量表参见工程实例MCUInit.c芯片系统初始化函数定义参见工程实例CANInit.cMSCAN08初始化函数定义[本章]C语言子函数文件CAN.cCAN收发子函数定义[本章]C语言主函数Main.c主函数[本章]MSCAN08/MSCAN1227MSCAN08自环通信测试实例(2).回环工作方式C语言主程序//工程名:CANSelfTest.prj*//硬件连接:MCU的串行口与PC机的串行口相连*//程序描述:将MSCAN08设置在回环自测方式下,每隔1秒左右*//MSCAN08自发自收字符串Hello!!!,并将之通过*//串口送出。*//说明:因MSCAN08工作在回环方式下,故不用将CAN*//接口与CAN总线相连*//目的:掌握MSCAN08模块基本收发子程序编程*//-----------------------------------------------------------------------*MSCAN08/MSCAN1228MSCAN08正常通信测试实例(1).查询方式服务器节点C语言主程序//-----------------------------------------------------------------------*//工程名:CANServer.prj*//硬件连接:MCU的串行口与PC机的串行口相连*//MCU的CAN接口与CAN总线相连*//程序描述:接收CAN网络中的报文,通过本地串口送出.并根据*//该报文是数据帧还是远程帧分别给对方回送*//DeviceN:Data!!!!或DeviceN:Remote!!*//N(1-9)为对方标识符低8位*//说明:连在同一个CAN网络中的节点的位速率需相同*//本程序运行在服务端节点上,需与客户端节点*//同时运行在一个CAN网络中.*//此处收发CAN报文均为标准帧格式,未处理扩展格式*//目的:初步掌握利用MSCAN08实现CAN协议通信*//-----------------------------------------------------------------------*MSCAN08/MSCAN1229MSCAN08正常通信测试实例(2).查询方式客户节点C语言主程序//-----------------------------------------------------------------------*//工程名:CANClient.prj*//硬件连接:MCU的串行口与PC机的串行口相连*//MCU的CAN接口与CAN总线相连*//程序描述:每隔1秒左右MSCAN08发送Hello!!!或1个无数据*//的远程帧到CAN总线(8次数据帧1次远程帧)*//发送完便以死等方式接收数据,并将收到

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功