第26集can通信实验_第1页
第26集can通信实验_第2页
第26集can通信实验_第3页
第26集can通信实验_第4页
第26集can通信实验_第5页
免费预览已结束,剩余23页可下载查看

付费下载

下载本文档

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

文档简介

1、7.12CAN总线回环实验17.12.1意义与作用17.12.2实验原理87.12.3实验原理117.12.4硬件设计177.12.5设计207.12.6与验证277.12.7实验现象277.12CAN总线回环实验向大家介绍STM32的CAN总线的基本使用。有了STM32,CAN总线将变这一节得简单,俗话说“百闻不如一见”,应当再加上“百见不如一试”。在本小节,初始化CAN总线,分别测试轮询模式和中断模式下的CAN总线环回,并通过神舟IV号的LED和串口等指示CAN环回的数据传送结果。本节分为如下几个部分:123456CAN总线回环实验的意义与作用实验原理设计硬件设计与验证实验现象7.12.1

2、 意义与作用CAN 总线?CAN,全称“Controller Area Network”,即控制器局域网,是国际上应用最广泛的工业级现场总线之一。它是一种具有国际标准而且性能价格比又较高的现场总线,自动控制领域的发展中能发挥重要的作用。最初 CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成控制网络。比如:发管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入 CAN 控制装置。CAN 控制器局部网是CH 公司为现代汽车应用领先推出的一种多主机局部网,由于其卓越性能现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部

3、门。在和西欧,CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。控制器局部网将在我国迅速普及推广。由于 CAN 为愈来愈多不同领域采用和推广,导致要求各种应用领域通信报文的标准化。为此,1991 年 9 月 PHILIPS SEMICONDUCTORS 制订并发布了 CAN 技术规范(VER 2.0)。该技术规范包括 A 和 B 两部分。2.0A 给出了曾在

4、 CAN 技术规范版本 1.2 中定义的CAN 报文格式,而 2.0B 给出了标准的和扩展的两种报文格式。此后,1993 年 11 月 ISO 正式颁布了道路交通运载工具-数字信息交换-高速通信控制器局部网(CAN)国际标准(ISO11898),为控制器局部网标准化、规范化推广铺平了道路。CAN 总线特点CAN 总线是一种串行数据通信协议,它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导。通信速率可达 1MBPS。CAN 总线通口中集成了 CAN 协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。CAN 协议的一个最大特点

5、是了传统的站地址编码,而代之以对通信数据块进行编码。采用这种方法的优点可使网络内的节点个数在理论上不受限制,数据块的标识码可由 11 位或 29 位二进制数组成,因此可以定义 211 或 229 个不同的数据块,这种按数据块编码的方式,还可使不同的节点同时接收到相同的数据,这一点在分布式控制系统中非常有用。数据段长度最多为 8 个字节,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。同时,8 个字节不会占用总线时间过长,从而保证了通信的实时性。CAN 协议采用CRC 检验并可提供相应的错误处理功能,保证了数据通信的可靠性。CAN 卓越的特性、极高的可靠性和独特的设计,特别适合工业过

6、程重视,并已公认为最有前途的现场总线之一。设备的互连,因此,越来越受到工业界的另外,CAN 总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。CAN 总线上任意节点可在任意时刻主动地向网络上其它节点发送信息而不分主次,因此可在各节点之间实现通信。CAN 总线协议已被国际标准化组织认证,技术比较成熟,控制的已经商品化,性价比高,特别适用于分布式测控系统之间的数通讯。CAN 总线插卡可以任意插在 PC AT XT 兼容机上,方便地分布式系统。3. CAN 总线技术介绍3.1 位仲裁要对数据进行实时处理,就必须将数据快速传送,这就要求数据的物理传输通路有较高的速度。

7、在几个站同时需要发送数据时,要求快速地进行总线分配。实时处理通过网络交换的紧急数据有较大的不同。一个快速变化的物理量,如汽车引擎负载,将比类似汽车引擎温度这样相对变化较慢的物理量更频繁地传送数据并要求更短的延时。CAN 总线以报文为进行数据传送,报文的优先级结合在 11 位标识符中,具有最低二进制数的标识符有最高的优先级。这种优先级一旦在系统设计时被确立后就不能再被更改。总线中的可通过位仲裁解决。当几个站同时发送报文时,站1 的报文标识符为011111;站 2 的报文标识符为 0100110;站 3 的报文标识符为 0100111。所有标识符都有相同的两位 01,直到第 3 位进行比较时,站

8、1 的报文被丢掉,因为它的第 3 位为高,而其它两个站的报文第 3 位为低。站 2 和站 3 报文的 4、5、6 位相同,直到第 7 位时,站 3 的报被丢失。注意,总线中最后获得总线权的站的报文。在此例中,站 2 的报文被的信号持续。这种非破坏性位仲裁方法的优点在于,在网络最终确定哪一个站的报文被传送以前,报文的起始部分已经在网络上传送了。所有未获得总线权的站都成为具有最高优先权报文的接收站,并且不会在总线再次空闲前发送报文。CAN 具有较高的效率是因为总线仅仅被那些请求总线悬而未决的站利用,这些请求是根据报文在整个系统中的重要性按顺序处理的。这种方法在网络负载较重时有很多优点,因为总线的优

9、先级已被按顺序放在每个报文中了,这可以保证在实时系统中较低的时间。隐伏对于主站的可靠性,由于 CAN 协议执行非集中化总线控制,所有主要通信,包括总线)控制,在系统中分几次完成。这是实现有较高可靠性的通信系统的唯一方法。(3.2 CAN 与其它通信方案的比较在实践中,有两种重要的总线分配方法:按时间表分配和按需要分配。在第法中 ,不管每个节点是否申请总线,都对每个节点按最大期间分配。由此,总线可被分配给每个站并且是唯一的站,而不论其是立即进行总线存取或在一特定时间进行总线存取。这将保证在总线存取时有明确的总线分配。在第二种方法中,总线按传送数据的基本要求分配给一个站 ,总线系统按站希望的传送分

10、配(如:Ethernet CSMA/CD)。因此,当多个站同时请求总线存取时,总线将终止所有站的请求,这时将不会有任何一个站获得总线分配。为了分配总线,多于一个总线存取是必要的。CAN 实现总线分配的方法,可保证当不同的站申请总线存取时,明确地进行总线分配。这种位仲裁的方法可以解决当两个站同时发送数据时产生的碰撞问题。不同于 Ethernet 网络的消息仲裁,CAN 的非破坏性解决总线存取的方法,确保在不传送有用消息时总线不被占用。甚至当总线在重负载情况下,以消息内容为优先的总线存取也被证明是一种有效的系统。虽然总线的传输能力,所有未解决的传输请求都按重要性顺序来处理。在 CSMA/CD 这样

11、的网络中,如 Ethernet,系统往往由于过载而,而这种情况在 CAN 中不会发生。3.3 CAN 的报文格式在总线中传送的报文,每帧由 7 部分组成。CAN 协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为 11 位,扩展格式为 29 位。在标准格式中,报文的起始位称为帧起始(SOF),然后是由 11 位标识符和发送请求位(RTR)组成的仲裁场。RTR 位标明是数据帧还是请求帧,在请求帧中没有数据字节。控制场包括标识符扩展位(IDE),(ro),为将来扩展使用。它的最后是标准格式还是扩展格式。它还包括一个保留位节用来指明数据场中数据的长度(DLC)。数据场范围为 08

12、 个字节,其后有一个检测数据错误的循环冗余检查(CRC)。应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑 1),这时正确接收报文的接收站发送主控电平(逻辑 0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。3.4 数据错误检测不同于其它总线,CAN 协议不能使用应答信息。事实上,它可以将发生的任何错误用信号发出。CAN 协议可使用五种检查错误的方法,其中前三种为基于报文内容检查。3.4.1 循环冗余检查(CRC)在一帧报文中加入冗余检

13、查位可保证报文正确。接收站通过 CRC 可判断报文是否有错。3.4.2 帧检查这种方法通过位场检查帧的格式和大小来确定报文的正确性,用于检查格式上的错误。3.4.3.应答错误如前所述,被接收到的帧由接收站通过明确的应答来确认。如果发送站未收到应答,那么表明接收站发现帧中有错误,也就是说,ACK 场已损坏或网络中的报文无站接收。CAN 协议也可通过位检查的方法探测错误。3.4.4 总线检测有时,CAN 中的一个节点可监测自己发出的信号。因此,发送报文的站可以观测总线电平并探测发送位和接收位的差异。3.4.5 位填充一帧报文中的每一位都由不归零码表示,可保证位编码的最大效率。然而,如果在一帧报文中

14、有太多相平的位,就有可能失去同步。为保证同步,同步沿用位填充产生。在五个生。在五个连续相等位后,发送站自动一个与之互补的补码位;接收时,这个填充位被自动丢掉。例如,五个连续的低电平位后,CAN 自动一个位。CAN 通过这种编码规则检查错误,如果在一帧报文中有 6 个相同位,CAN 就知道发生了错误。如果至少有一个站通过以上方法探测到一个或多个错误,它将发送出错标志终止当前的发送。这可以其它站接收错误的报文,网络上报文的一致性。当大量发送数据被终止后,发送站会自动地重新发送数据。作为规则,在探测到错误后 23 个位周期内重新开始发送。在特殊场合,系统的恢复时间为 31 个位周期。但这种方法存在一

15、个问题,即一个发生错误的站将导致所有数据被终止,其中也包括正确的数据。因此,如果不采取自监测措施,总线系统应采用模块化设计。为此,CAN 协议提供一种将偶然错误从错误和局部站失败中区别出来的办法。这种方法可以通过对出错站统计评估来确定一个站本身的错误并进入一种不会对其它站产生不良影响的运行方法来实现,即站可以通过关闭自己来正常数据因被错误地当成不正确的数据而被终止。3.4.6 CAN 可靠性造成,汽车的安全系统要求为防止汽车在使用期内由于错误而对数据传输具有较高的安全性。如果数据传输的可靠性足够高,或者残留下来的数据错误足够低的话,这一目标不难实现。从总线系统数据的角度看,可靠性可以理解为,对

16、传输过程产生的数据错误的识别能力。残余数据错误的概率可以通过对数据传输可靠性的统计测量获得。它描述了传送数据被破坏和这种破坏不能被探测出来的概率。残余数据错误概率必须非常小,使其在系统整个寿命周期内,按平均统计时几乎检测不到。计算残余错误概率要求能够对数据错误进行分类 ,并且数据传输路径可由一模型描述。如果要确定 CAN 的残余错误概率,可将残留错误的概率作为具有 8090 位的报文传送时位错误概率的函数,并假定这个系统中有 510 个站,并且错误率为 1/1000,那么最大位错误概率为 1013 数量级。例如,CAN 网络的数据传输率最大为 1Mbps,如果数据传输能力仅使用 50%,那么对

17、于一个工作长度为 80 位的系统,所传送的数据总量为 91010。在系统运行4000 小时、平均报文期内,不可检测的传输错误的统计平均小于 102 量级。换句话说,一个系统按每年 365 天,每天工作 8 小时,每秒错误率为 0. 7 计算,那么按统计平均,每 1000 年才会发生一个不可检测的错误。4.应用举例某医院现有 5 台 16T/H 德国菲斯曼燃气锅炉,向、制剂室、供应室、生活用水、暖气等设施提供 5kg/cm2 的蒸汽,全年耗用天然气 1200 万 m3,耗用 20 万吨自来水。医院采用接力式方式供热,对热网进行地域性管理,分四大供热区。其中冬季暖气的用气量很大,据此设计了基于 C

18、AN 现场总线的分布式锅炉蒸汽热网智能系统。现场应用表明:该楼宇自动化系统具有能力强,现场组态容易,网络化程度高,人机界面友好等特点。CAN 总线典型特征CAN 总线有如下基本特点传统的站地址编码,代之以对通信数据块进行编码,可以多主方式工作; 采用非破坏性仲裁技术,当两个节点同时向网络上传送数据时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响继续传输数据,有效避免了总线; 采用短帧结构,每一帧的有效字节数为 8 个,数据传输时间短,受干扰的概率低,重新发送的时间短; 每帧数据都有 CRC 校验及其他检错措施,保证了数据传输的高可靠性,适于在扰环境下使用; 节点在错误严重的情况下

19、,具有自动关闭总线的功能,切断它与总线的联系,以使总线上其他操作不受影响; 可以点对点,一对多及广播集中方式传送和接受数据。CAN 总线的优点具有实时性强、传输距离较远、抗电磁干扰能力强、成本优点;采线串行通信方式,检错能力强,可在高噪声干扰环境中工作;具有优先权和仲裁功能,多个控制模块通过 CAN 控制器挂到 CAN-bus 上,形成多主机局部网络;可根据报文的 ID 决定接收或该报文;可靠的错误处理和检错机制;发送的信息遭到破坏后,可自动重发;节点在错误严重的情况下具有自动退出总线的功能;报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。STM32 处理器的 CAN 总线,

20、支持 CAN 协议 2.0A 和 2.0B。具有以下特点:支持CAN协议2.0A和2.0B主动模式波特率最高可达1兆位/秒发送支持时间触发通信功能接收3个发送邮箱发送报文的优先级特性可配置发送SOF时刻的时间戳3级深度的2个接收FIFO14个位宽可变的过滤器组由整个CAN共享标识符列表FIFO溢出处理方式可配置接收SOF时刻的时间戳可支持时间触发通信模式自动重传模式16位运行定时器定时器分辨率可配置可在最后2个数据字节发送时间戳管理中断可邮箱占用单独1块地址空间,便于提高效率STM32 的 CAN 一共有 3 个主要的工作模式,分别是初始化、正常和睡眠模式。初始化模式通过对CAN_MCR寄存器

21、的INRQ位置1,来请求bxCAN进入初始化模式,然后等待硬件对CAN_MSR寄存器的INAK位置1来进行确认通过对CAN_MCR寄存器的INRQ位清0,来请求bxCAN退出初始化模式,当硬件对CAN_MSR寄存器的INAK始化模式的退出。0就确认了初当bxCAN处于初始化模式)。文的接收和发送都被,并且CANTX引脚输出隐性位(正常模式在初始化完成后,应该让硬件进入正常模式,以便正常接收和发送报文。可以通过对CAN_MCR寄存器的INRQ0,来请求从初始化模式进入正常模式,然后要等待硬件对CAN_MSR寄存器的INAK位置1的确认。在跟CAN总线取得同步,即在CANRX引脚上监测到11个连续

22、的隐性位(等效于总线空闲)后,bxCAN才能正常接收和发送报文。睡眠模式(低功耗)通过对CAN_MCR寄存器的SLEEP位置1,来请求进入这一模式。在该模式下,bxCAN的时钟停止了,但仍然可以邮箱寄存器。当bxCAN处于睡眠模式,想通过对CAN_MCR寄存器的INRQ位置1,来进入初始化式,那么0才行。必须同时对SLEEP有2种方式可以唤醒(退出睡眠模式)bxCAN:通过CAN总线的活动。对SLEEP0,或硬件检测7.12.2 实验原理CAN 发送报文介绍应用程序选择1个空发送邮箱;设置标识符,数据长度和待发送数据;然后对CAN_TIxR寄存器的TXRQ位置1,来请求发送。TXRQ位置1后,

23、邮箱就不再是空邮箱;而一旦邮箱不再为空,对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上进入挂号状态,并等待成为最高优先级的邮箱,参见发送优先级。一旦邮箱成为最高优先级的邮箱,其状态就变为预定发送状态。一旦CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送(进入发送状态)。一旦邮箱中的报文被成功发送后,它马上变为空邮箱;硬件相应地对CAN_TSR寄存器的RQCP和TXOK位置1,来表明一次成功发送。如果发送失败,由于仲裁引起的就对CAN_TSR寄存器的ALST位置1,由于发送错误引起的,就对TERR位置1。发送的优先级可以由标识符和发送请求次序决定:由标识符决定当有超过1个发送邮

24、箱在挂号时,发送顺序由邮箱中报文的标识符决定。根据CAN协议,标识符数值最低的报文具有最高的优先级。如果标识符的值相等,那么邮箱号小的报文先被发送。由发送请求次序决定通过对CAN_MCR寄存器的TXFP位置1,可以把发送邮箱配置为发送FIFO。在该模式下,发送的优先级由发送请求次序决定。该模式对分段发送很有用。CAN 接收报文介绍 接收到的报文,被CPU的处理负荷,简化了在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了了数据的一致性。应用程序只能通过FIFO输出邮箱,来FIFO中最先收到的报文。根据CAN协议,当报文被正确接收(直到EOF域的最后1位都没有错误),且通过了标识符

25、过滤,那么该报文被认为是有效报文。接收相关的中断条件一旦往FIFO存入1个报文,硬件就会更新FMP1:0位,并且如果CAN_IER寄存器的FMPIE位为1,那么就会产生一个中断请求。当FIFO变满时(即第3个报文被存入),CAN_RFxR寄存器的FULL位就被置1,并且如果CAN_IER寄存器的FFIE位为1,那么就会产生一个满中断请求。在溢出的情况下,FOVR位被置1,并且如果CAN_IER寄存器的FOVIE位为1,那么就会产生一个溢出中断请求标识符过滤在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。(注:不是一对一通信

26、,而是多机通信)节点在接收报文时根据标识符的值决定SRAM里;如果不需要,报文就被丢弃且无需是否需要该报文;如果需要,就拷贝到的干预。为满足这一需求,bxCAN为应用程序提供了14个位宽可变的、可配置的过滤器组(130),以便只接收那些需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由过滤从而占用一定的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和CAN_FxR1组成。过滤器的模式的设置通过设置CAN_FM0R的FBMx位,可以配置过滤器组为标识符列表模式或式。位模为了过滤出一组标识符,应该设置过滤器组工作在位模式。为了过滤出一个标识符,应该设置过滤器组工作在标识符列表

27、模式。应用程序不用的过滤器组,应该保持在禁用状态。过滤器优先级规则位宽为32位的过滤器,优先级高于位宽为16位的过滤器对于位宽相同的过滤器,标识符列表模式的优先级高于位模式位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高上面的例子说明了bxCAN的过滤器规则:在接收一个报文时,其标识符首先与配置在标识符列表模式下的过滤器相比较;如果匹配上,报文就被存放到相关联的FIFO中,并且所匹配的过滤器的序号被存入过滤器匹配序号中。如同例子中所显示,报文标识符跟#4标识符匹配,因此报文内容和FMI4被存入FIFO。如果没有匹配,报文标识符接着与配置在位模式下的过滤器进行比较。如果报文标

28、识符没有跟过滤器中的任何标识符相匹配,那么硬件就丢弃该报文,且不会对有任何打扰。接收邮箱(FIFO)在接收到一个报文后,了报文(如把它读出来),就可以接收FIFO的输出邮箱来它。一旦处理就应该对CAN_RFxR寄存器的RFOM位进行置1,来该报文,以便为后面收到的报文留出空间。中断bxCAN占用4个的中断向量。通过设置CAN中断允许寄存器(CAN_IER),每个中断源都可以单独允许和禁用。发送中断可由下列事件产生:发送邮箱0变为空,CAN_TSR寄存器的RQCP0位被置1。发送邮箱1变为空,CAN_TSR寄存器的RQCP1位被置1。发送邮箱2变为空,CAN_TSR寄存器的RQCP2位被置1。F

29、IFO0中断可由下列事件产生: FIFO0接收到一个文,CAN_RF0R寄存器的FMP0位不再是00。FIFO0变为满的情况,CAN_RF0R寄存器的FULL0位被置1。FIFO0发生溢出的情况,CAN_RF0R寄存器的FOVR0位被置1。 FIFO1中断可由下列事件产生: FIFO1接收到一个文,CAN_RF1R寄存器的FMP1位不再是00。FIFO1变为满的情况,CAN_RF1R寄存器的FULL1位被置1。FIFO1发生溢出的情况,CAN_RF1R寄存器的FOVR1位被置1。错误和状态变化中断可由下列事件产生:出错情况,关于出错情况的详细信息请参考CAN错误状态寄存器(CAN_ESR)。唤

30、醒情况,在CAN接收引脚上监视到帧起始位(SOF)。CAN进入睡眠模式。波特率设定CAN总线通信的难点在于波特率的设定 ,当然如果是近距离通信,只有几十米那就可以忽略了,如果几公里 波特率位序时序 都需要好好计算不然通信是不成功的。CAN控制器器只需要进行少量的设置就可以进行通信,就可以像RS232/485那样使用。其中较难设置的部分就是通信波特率的计算。CAN总线能够在一定的范围内总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。实际上,CAN总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实

31、际的波特率可能为200300KB/S(具体值取决于寄存器的设置),简单介绍一个波特率的计算,在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:A 位同步时间(Tsync)B 时间段1(Tseg1)C 时间段2(Tseg2)其中位同步时间占用1个Tscl;时间段2占用(Tseg1+1)个Tscl;时间段2占用(Tseg2+1)个 Tscl,所以CAN控制器的位时间(TBit)就是: TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,那么CAN的波特率(CANbps)就是 1/TBit。但是这样计算出的值是一

32、个理论值。在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等,使得网络CAN的波特率的计算变得复杂起来。CAN在技术上便引入了重同步的概念,以更好的解决这些问题。这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有一个范围:1/(Tbit+Tsjw) CANbps1/(Tbit-Tsjw)CAN有波特率的值四以下几个元素决定:最小时间段Tscl;时间段1 TSEG1;时间段2 TSEG2;同步跳转宽度 SJW那么Tscl又是怎么计算的呢?这是总总线时序寄存器中的预分频寄存器BRP派上了用场,Tsc

33、l(BRP+1)/FVBP。FVBP为微处理器的外设时钟。而TSEG1与TSEG2又是怎么划分的呢?TSEG1与TSEG2的长度决定了CAN数据的采样点,这种方式允许宽范围的数据传输延迟和晶体的误差。其中TSEG1用来调整数据传输延迟时间造成的误差,而TSEG2则用来调整不同点节点晶体频率的误差。但是他们由于过于灵活,而使初次接触CAN的人有点无所适从。TSEG1与TSEG2的是分大体遵循以下规则:Tseg2Tscl2,Tseg22TSJW,Tseg1Tseg2总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为:BitRate = Fpclk/( (BRP+1)

34、 * (Tseg1+1)+(Tseg2+1)+1)7.12.3 实验原理CAN 配置成环回模式进行数据的发送和接收,通过将接收本实验的基本原理是:到的数据和发送的数据进行对比,判断实验是否成功,并通过 LED 灯和串行显示实验是否 。实验的基本流程:CAN 总线进行数据的发送和接收,发送接收前需要进行相应的配置。本实验中数据的发送和接收流程如下:1)对 CAN 总线进行配置。比如将 CAN 重置,配置 CAN 为环回模式及波特率等。2)对 CAN 总线过滤器进行设置。在接收数据时数据要通过过滤器。因此在接收数据前需要对过滤器进行配置。指定过滤器的,设定过滤器的标识符,对过滤器进行使能。3)CA

35、N 总线的发送设置。在发送数据之前,需要对报文进行设置。比如,发送的报文是使用标准标识符还是扩展标识符。数据帧的长度是多少。具体发送什么数据等。4)发送数据。数据发送的时候也有它自己的流程。5)CAN 总线的接收设置。经过前面的步骤已经将数据发送到 FIFO 里边。数据出来之前,需要对用来存放接收数据的变量进行清 0。6)接收数据。将接收到的数据和发送的数据一一进行对比,就可以判断实验的成功与否。当然接收数据它也有自己的一个流程。下面对实验的原理进行详细的分析:在环回模式下,bxCAN 在把 Tx 输出回馈到 Rx 输入上,而完全忽略 CANRX 引脚的实际状态。环回模式是一个自发自收模式。如

36、下如图:本实验中,数据的流向非常的简单。把 CAN1 配置成环回模式,环回模式下数据自发自收。数据从邮箱经过接收过滤器进入接收 FIFO。在 STM32 互联型产品中,带有 2个 CAN 控制器,而使用的 STM32F107VCT6 属于互联型,双 CAN 的框图如下:从图中可以看出两个 CAN 都分别拥有自己的发送邮箱和接收 FIFO,但是它们共用 28个过滤器(互联型)。每个滤波器组由 2 个 32 位的寄存器,CAN_FxR1 和 CAN_FxR2 组成。通过 CAN_FMR 寄存器,设置滤波器组的位宽和工作模式。CAN 发送报文介绍应用程序选择1个空发送邮箱;设置标识符,数据长度和待发

37、送数据;然后对CAN_TIxR寄存器的TXRQ位置1,来请求发送。TXRQ位置1后,邮箱就不再是空邮箱;而一旦邮箱不再为空,对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上进入挂号状态,并等待成为最高优先级的邮箱,参见发送优先级。一旦邮箱成为最高优先级的邮箱,其状态就变为预定发送状态。一旦CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送(进入发送状态)。一旦邮箱中的报文被成功发送后,它马上变为空邮箱;硬件相应地对CAN_TSR寄存器的RQCP和TXOK位置1,来表明一次成功发送。如果发送失败,由于仲裁引起的就对CAN_TSR寄存器的ALST位置1,由于发送错误引起的,就对TER

38、R位置1。发送的优先级可以由标识符和发送请求次序决定:由标识符决定当有超过1个发送邮箱在挂号时,发送顺序由邮箱中报文的标识符决定。根据CAN协议,标识符数值最低的报文具有最高的优先级。如果标识符的值相等,那么邮箱号小的报文先被发送。由发送请求次序决定通过对CAN_MCR寄存器的TXFP位置1,可以把发送邮箱配置为发送FIFO。在该模式下,发送的优先级由发送请求次序决定。该模式对分段发送很有用。CAN 接收报文介绍 接收到的报文,被CPU的处理负荷,简化了在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了了数据的一致性。应用程序只能通过FIFO输出邮箱,来FIFO中最先收到的报文。

39、根据CAN协议,当报文被正确接收(直到EOF域的最后1位都没有错误),且通过了标识符过滤,那么该报文被认为是有效报文。接收相关的中断条件一旦往FIFO存入1个报文,硬件就会更新FMP1:0位,并且如果CAN_IER寄存器的FMPIE位为1,那么就会产生一个中断请求。当FIFO变满时(即第3个报文被存入),CAN_RFxR寄存器的FULL位就被置1,并且如果CAN_IER寄存器的FFIE位为1,那么就会产生一个满中断请求。在溢出的情况下,FOVR位被置1,并且如果CAN_IER寄存器的FOVIE位为1,那么就会产生一个溢出中断请求标识符过滤在CAN协议里,报文的标识符不代表节点的地址,而是跟报文

40、的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。(注:不是一对一通信,而是多机通信)节点在接收报文时根据标识符的值决定SRAM里;如果不需要,报文就被丢弃且无需是否需要该报文;如果需要,就拷贝到的干预。为满足这一需求,bxCAN为应用程序提供了14个位宽可变的、可配置的过滤器组(130),以便只接收那些需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由过滤从而占用一定的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和CAN_FxR1组成。过滤器的模式的设置通过设置CAN_FM0R的FBMx位,可以配置过滤器组为标识符列表模式或式。位模为了过滤出一组标识符,

41、应该设置过滤器组工作在位模式。为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。应用程序不用的过滤器组,应该保持在禁用状态。过滤器优先级规则位宽为32位的过滤器,优先级高于位宽为16位的过滤器对于位宽相同的过滤器,标识符列表模式的优先级高于位模式位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高上面的例子说明了bxCAN的过滤器规则:在接收一个报文时,其标识符首先与配置在标识符列表模式下的过滤器相比较;如果匹配上,报文就被存放到相关联的FIFO中,并且所匹配的过滤器的序号被存入过滤器匹配序号中。如同例子中所显示,报文标识符跟#4标识符匹配,因此报文内容和FMI4被存

42、入FIFO。如果没有匹配,报文标识符接着与配置在位模式下的过滤器进行比较。如果报文标识符没有跟过滤器中的任何标识符相匹配,那么硬件就丢弃该报文,且不会对有任何打扰。接收邮箱(FIFO)在接收到一个报文后,了报文(如把它读出来),就可以接收FIFO的输出邮箱来它。一旦处理就应该对CAN_RFxR寄存器的RFOM位进行置1,来该报文,以便为后面收到的报文留出空间。本实验中,过滤器,配置成无论送来什么数据,都接收的状态。过滤器的详细介绍,请参考【中文】STM32F 系列 ARM 内核 32 位高性能微控制器参考手册 V10_1.pdf的 22.7.4 章节。中断bxCAN占用4个的中断向量。通过设置

43、CAN中断允许寄存器(CAN_IER),每个中断源都可以单独允许和禁用。发送中断可由下列事件产生:发送邮箱0变为空,CAN_TSR寄存器的RQCP0位被置1。发送邮箱1变为空,CAN_TSR寄存器的RQCP1位被置1。发送邮箱2变为空,CAN_TSR寄存器的RQCP2位被置1。FIFO0中断可由下列事件产生: FIFO0接收到一个文,CAN_RF0R寄存器的FMP0位不再是00。FIFO0变为满的情况,CAN_RF0R寄存器的FULL0位被置1。FIFO0发生溢出的情况,CAN_RF0R寄存器的FOVR0位被置1。 FIFO1中断可由下列事件产生: FIFO1接收到一个文,CAN_RF1R寄存

44、器的FMP1位不再是00。FIFO1变为满的情况,CAN_RF1R寄存器的FULL1位被置1。FIFO1发生溢出的情况,CAN_RF1R寄存器的FOVR1位被置1。错误和状态变化中断可由下列事件产生:出错情况,关于出错情况的详细信息请参考CAN错误状态寄存器(CAN_ESR)。唤醒情况,在CAN接收引脚上监视到帧起始位(SOF)。CAN进入睡眠模式。波特率设定CAN总线通信的难点在于波特率的设定 ,当然如果是近距离通信,只有几十米那就可以忽略了,如果几公里 波特率位序时序 都需要好好计算不然通信是不成功的。CAN控制器器只需要进行少量的设置就可以进行通信,就可以像RS232/485那样使用。其

45、中较难设置的部分就是通信波特率的计算。CAN总线能够在一定的范围内总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。实际上,CAN总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200300KB/S(具体值取决于寄存器的设置),简单介绍一个波特率的计算,在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:位同步时间(Tsync)时间段1(Tseg1)时间段2(Tseg2)其中位同步时间占用1个Tscl;时间段2占用(Tseg1+

46、1)个Tscl;时间段2占用(Tseg2+1)个 Tscl,所以CAN控制器的位时间(TBit)就是: TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,那么CAN的波特率(CANbps)就是 1/TBit。但是这样计算出的值是一个理论值。在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等,使得网络CAN的波特率的计算变得复杂起来。CAN在技术上便引入了重同步的概念,以更好的解决这些问题。这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有一个范围:1/(Tb

47、it+Tsjw) CANbps1/(Tbit-Tsjw)CAN有波特率的值四以下几个元素决定:最小时间段Tscl;时间段1 TSEG1;C 时间段2 TSEG2;D 同步跳转宽度 SJW那么Tscl又是怎么计算的呢?这是总总线时序寄存器中的预分频寄存器BRP派上了用场,Tscl(BRP+1)/FVBP。FVBP为微处理器的外设时钟。而TSEG1与TSEG2又是怎么划分的呢?TSEG1与TSEG2的长度决定了CAN数据的采样点,这种方式允许宽范围的数据传输延迟和晶体的误差。其中TSEG1用来调整数据传输延迟时间造成的误差,而TSEG2则用来调整不同点节点晶体频率的误差。但是他们由于过于灵活,而使

48、初次接触CAN的人有点无所适从。TSEG1与TSEG2的是分大体遵循以下规则:Tseg2Tscl2,Tseg22TSJW,Tseg1Tseg2总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为:BitRate = Fpclk/( (BRP+1) * (Tseg1+1)+(Tseg2+1)+1)7.12.4 硬件设计在神舟 IV 号 STM32 开发板中,使用了处理器 STM32F107VCT6 的 CAN 外扩 TI的 VP230 CAN 总线收发来实现 CAN 总线接口。神舟 IV 号开发板板载了 2 组 CAN 总线接口,所以可以在外部将 CAN1 和 CA

49、N2 连接起来完成 CAN 总线实验。STM32F107VCT6 这款处理器集成了 CAN 总线接口,在开发板上使用了 TI 公司的 3.3V 电压的CAN 总线收发器来实现 CAN 物理层,如下图所示。CAN 总线收发器型号为 VP230。相关硬件电路如下:图表 1 CAN 总线接口原理图其中 VP230 是 TI 公司推出的 3.3V CAN 总线收发器。它具有如下特性:工作电压为 3.3V满足 HBM 模式 16KV 的 ESD 防护允许总线上最到 120 个节点符合 ISO 11898 标准要求具有过热关断保护功能VP230 的逻辑框图如下:管脚功能如下:CAN网拓扑结构:7.12.5

50、设计时钟使能配置在本实验中,分别通过轮询和中断两种方式,测试CAN总线的环回,并通过LED指示灯和串口指示CAN总线环回结果。因此,灯,CAN1总线接口,具体代码如下:先初始化使用到的硬件资源有串口和LEDCAN 总线中断配置在本实验中,通过分别利用轮询和中断方式进行CAN的环回(loack)实验,因此,需要设置CAN1接口的接收终端及其优先级,在本例程中,设置中断组1个,CAN1的子优先级级为0,相关代码如下:轮询方式CAN总线环回测试在本实验中,CAN环回实验,分成中断和轮询两种模式进试,其中轮询方式的CAN接口初始化和测试主要是由TestSus CAN_Polling(void)函数实现

51、的。在这个函数中,首先对CAN1接口进行配置,包括bus-off管理,wake-up模式设置等等,其中CAN_Init函数根据CAN_InitStruct中指定的参数初始化CAN寄存器,相关代码如下:CAN_InitStruct 结构体的成员说明见下表CAN_TTCMCAN_TTCM用来使能或去使能时间触发通讯模式CAN_ABOMCAN_ABOM用来使能或者去使能自动离线管理CAN_AWUMCAN_AWUM用来使能或者去使能自动唤醒模式CAN_NARTCAN_NART用来使能或者去使能非自动重传模式CAN_RFLMCAN_RFLM用来使能或者去使能FIFO锁定模式CAN_TXFPCAN_TXF

52、P用来使能或者去使能发送FIFO优先级CAN_MODE设置CAN工作模式,可设置为正常工作模式(CAN_Mode_Normal) 静默模式(CAN_Mode_Silent),环回模式( CAN_Mode_Lo ack)和静默环回模式(CAN_Mode_Silent_Lo ack)CAN_SJW定义重新同步跳跃宽度,即每位中可以延长或缩短多少个时间的上限,可设置为14个时间(CAN_SJW_1tq CAN_SJW_4tq)CAN的基本参数配置,主要在CAN主控制寄存器(CAN_MCR)中完成。感的朋友可以打开函数CAN_Init( )对该寄存器的每一位进行对照。在完成CAN的基本参数配置以后,还

53、需要对滤波器的参数进行配置,这个主要是通过CAN_FilterInit函数实现的,相关代码如下:代码中发现:CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0 x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow=0 x0000;即将过滤的标识符全置0,那么所有发过来的包都接收。完成了CAN总线接口的参数配置和滤波器配置,正常情况下,就可以使用CAN总线接口了,在接下来,来看一下另两个非常重要的函数CAN_Transmit()和CAN_Receive(),如何发送和接收一个正确格式的CAN帧。在的例程中,

54、CAN_Transmit()相关的代码为CAN_FilterNumber指定待初始化的过滤器,它的范围是1到13CAN_FilterMode指定过滤器将被初始化的模式,可设置为标识符位模式(CAN_FilterMode_IdMask)或者标识符列表模式(CAN_FilterMode_IdList)CAN_FilterScale过滤器位宽,可设置为 2 个 16 位过滤器 ( CAN_FilterScale_Two16bit )或者 1 个 32 位过滤器 (CAN_FilterScale_One32bit)。CAN_FilterIDHigh用来设定过滤器标识符(32位位宽时为其高段位,16位宽

55、时为第一个)。它的范围是0 x0000到0 xF。CAN_FilterIDLow用来设定过滤器标识符(32位位宽时为其低段位,16位宽时为第二个)。它的范围是0 x0000到0 xF。CAN_FilterMaskIDHigh用来设定过滤器 标识符或者过滤器标识符(32位位宽时为其高段位,16位宽时为第一个)。它的范围是 0 x0000到0 x F。CAN_FilterMaskIDLow用来设定过滤器 标识符或者过滤器标识符(32位位宽时为其低段位,16位宽时为第二个)。它的范围是 0 x0000到0 x F。CAN_FilterFIFOAssignment设置指向过滤器的FIFO(0或者1)CAN_FilterActivation使能或者去使能过滤器CAN_BS1设定时间段 1 的时间数目, 可设置为 1 16 个时间 (CAN_BS1_1tq CAN_BS1_16tq)。

温馨提示

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

评论

0/150

提交评论