您的位置 首页 发布

根据STM32的CAN通讯试验

本章我们将向大家介绍如何使用STM32自带的CAN控制器来实现两个开发板之间的CAN通讯,并将结果显示在TFTLCD模块上。本章分为如下几个部分:3

本章咱们将向咱们介绍怎么运用STM32自带的CAN操控器来完成两个开发板之间的CAN通讯,并将成果显现在TFTLCD模块上。本章分为如下几个部分:

30.1 CAN简介
30.2 硬件规划
30.3 软件规划
30.4 下载验证

30.1 CAN简介

CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO世界规范化的串行通讯协议。在当时的轿车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各式各样的电子操控体系被开发了出来。因为这些体系之间通讯所用的数据类型及对牢靠性的要求不尽相同,由多条总线构成的状况许多,线束的数量也随之添加。为习惯“削减线束的数量”、“经过多个LAN,进行很多数据的高速通讯”的需求,1986 年德国电气商博世公司开发出面向轿车的CAN 通讯协议。尔后,CAN 经过ISO11898 及ISO11519 进行了规范化,现在在欧洲已是轿车网络的规范协议。   
现在,CAN 的高性能和牢靠性已被认同,并被广泛地运用于工业自动化、船只、医疗设备、工业设备等方面。现场总线是当今自动化范畴技术发展的热门之一,被誉为自动化范畴的核算机局域网。它的出现为分布式操控体系完成各节点之间实时、牢靠的数据通讯供给了强有力的技术支撑。
CAN 操控器依据两根线上的电位差来判别总线电平。总线电平分为显性电平缓隐性电平,二者必居其一。发送方经过使总线电平产生变化,将音讯发送给接纳方。
CAN协议具有一下特色:
1)多主操控。在总线闲暇时,一切单元都能够发送音讯(多主操控),而两个以上的单元一同开端发送音讯时,依据标识符(Identifier 以下称为 ID)决议优先级。ID 并不是表明发送的意图地址,而是表明拜访总线的音讯的优先级。两个以上的单元一同开端发送音讯时,对各音讯ID 的每个位进行逐一裁定比较。裁定取胜(被判定为优先级最高)的单元可持续发送音讯,裁定失利的单元则马上中止发送而进行接纳作业。
2)体系的若软性。与总线相连的单元没有类似于“地址”的信息。因而在总线上添加单元时,衔接在总线上的其它单元的软硬件及运用层都不需求改动。
3)通讯速度较快,通讯距离远。最高1Mbps(距离小于40M),最远可达10KM(速率低于5Kbps)。
4)具有过错检测、过错告诉和过错康复功用。一切单元都能够检测过错(过错检测功用),检测出过错的单元会当即一同告诉其他一切单元(过错告诉功用),正在发送音讯的单元一旦检测出过错,会强制完毕当时的发送。强制完毕发送的单元会不断重复地从头发送此音讯直到成功发送停止(过错康复功用)。
5)毛病封闭功用。CAN 能够判别出过错的类型是总线上暂时的数据过错(如外部噪声等)仍是持续的数据过错(如单元内部毛病、驱动器毛病、断线等)。由此功用,当总线上产生持续数据过错时,可将引起此毛病的单元从总线上阻隔出去。
6)衔接节点多。CAN 总线是可一同衔接多个单元的总线。可衔接的单元总数理论上是没有约束的。但实际上可衔接的单元数受总线上的时刻延迟及电气负载的约束。下降通讯速度,可衔接的单元数添加;进步通讯速度,则可衔接的单元数削减。
正是因为CAN协议的这些特色,使得CAN特别合适工业进程监控设备的互连,因而,越来越遭到工业界的注重,并已公认为最有出路的现场总线之一。
CAN协议经过ISO规范化后有两个规范:ISO11898规范和ISO11519-2规范。其间ISO11898是针对通讯速率为125Kbps~1Mbps的高速通讯规范,而ISO11519-2是针对通讯速率为125Kbps以下的低速通讯规范。
本章,咱们运用的是450Kbps的通讯速率,运用的是ISO11898规范,该规范的物理层特征如图30.1.1所示:
图30.1.1 ISO11898物理层特性
从该特性能够看出,显性电平对应逻辑0,CAN_H和CAN_L之差为2.5V左右。而隐性电平对应逻辑1,CAN_H和CAN_L之差为0V。在总线上显性电平具有优先权,只需有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有容纳的意味,只要一切的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。别的,在CAN总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以削减回波反射。
CAN协议是经过以下5种类型的帧进行的:
l数据帧
l要控帧
l过错帧
l过载帧
l帧距离
别的,数据帧和遥控帧有规范格局和扩展格局两种格局。规范格局有11 个位的标识符(ID),扩展格局有29 个位的ID。各种帧的用处如表30.1.1所示:
帧类型
帧用处
数据帧
用于发送单元向接纳单元传送数据的帧
遥控帧
用于接纳单元向具有相同 ID 的发送单元恳求数据的帧
过错帧
用于当检测出过错时向其它单元告诉过错的帧
过载帧
用于接纳单元告诉其没有做好接纳预备的帧
距离帧
用于将数据帧及遥控帧与前面的帧别离开来的帧
表30.1.1 CAN协议各种帧及其用处
因为篇幅所限,咱们这儿仅对数据帧进行具体介绍,数据帧一般由7个段构成,即:
(1) 帧开端。表明数据帧开端的段。
(2) 裁定段。表明该帧优先级的段。
(3) 操控段。表明数据的字节数及保存位的段。
(4) 数据段。数据的内容,一帧可发送0~8个字节的数据。
(5) CRC段。查看帧的传输过错的段。
(6) ACK段。表明承认正常接纳的段。
(7) 帧完毕。表明数据帧完毕的段。
数据帧的构成如图30.1.2所示:

图30.1.2数据帧的构成

图中D表明显性电平,R表明隐形电平(下同)。
帧开端,这个比较简略,规范帧和扩展帧都是由1个位的显性电平表明帧开端。
裁定段,表明数据优先级的段,规范帧和扩展帧格局在本段有所区别,如图30.1.3所示:

图30.1.3数据帧裁定段构成
规范格局的ID 有11 个位。从ID28 到ID18 被顺次发送。制止高7 位都为隐性(制止设定:ID=1111111XXXX)。扩展格局的 ID 有29 个位。根本ID 从ID28 到ID18,扩展ID 由ID17 到ID0 表明。根本ID 和规范格局的ID 相同。制止高7 位都为隐性(制止设定:根本ID=1111111XXXX)。
其间RTR位用于标识是否是长途帧(0,数据帧;1,长途帧),IDE位为标识符挑选位(0,运用规范标识符;1,运用扩展标识符),SRR位为替代长途恳求位,为隐性位,它替代了规范帧中的RTR位。
操控段,由6个位构成,表明数据段的字节数。规范帧和扩展帧的操控段稍有不同,如图30.1.4所示:

图30.1.4数据帧操控段构成
上图中,r0和r1为保存位,有必要悉数以显性电平发送,可是接纳端能够接纳显性、隐性及恣意组合的电平。DLC段为数据长度表明段,高位在前,DLC段有效值为0~8,可是接纳方接纳到9~15的时分并不认为是过错。
数据段,该段可包含0~8个字节的数据。从最高位(MSB)开端输出,规范帧和扩展帧在这个段的界说都是相同的。如图30.1.5所示:

图30.1.5数据帧数据段构成
CRC段,该段用于查看帧传输过错。由15个位的CRC次序和1个位的CRC界定符(用于分隔的位)组成,规范帧和扩展帧在这个段的格局也是相同的。如图30.1.6所示:

图30.1.6数据帧CRC段构成
此段CRC的值核算规模包含:帧开端、裁定段、操控段、数据段。接纳方以相同的算法核算 CRC 值并进行比较,不一致时会通报过错。
ACK段,此段用来承认是否正常接纳。由ACK槽(ACK Slot)和ACK界定符2个位组成。规范帧和扩展帧在这个段的格局也是相同的。如图30.1.7所示:

图30.1.7数据帧CRC段构成
发送单元的ACK,发送2个位的隐性位,而接纳到正确音讯的单元在ACK槽(ACK Slot)发送显性位,告诉发送单元正常接纳完毕,这个进程叫发送ACK/回来ACK。发送 ACK 的是在既不处于总线封闭态也不处于休眠态的一切接纳单元中,接纳到正常音讯的单元(发送单元不发送ACK)。所谓正常音讯是指不含填充过错、格局过错、CRC 过错的音讯。
帧完毕,这个段也比较简略,规范帧和扩展帧在这个段格局相同,由7个位的隐性位组成。
至此,数据帧的7个段就介绍完了,其他帧的介绍,请咱们参阅光盘的CAN入门书.pdf相关章节。接下来,咱们再来看看CAN的位时序。
由发送单元在非同步的状况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。
l同步段(SS)
l传达时刻段(PTS)
l相位缓冲段1(PBS1)
l相位缓冲段2(PBS2)
这些段又由可称为 Time Quantum(以下称为Tq)的最小时刻单位构成。
1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序。
1 位由多少个Tq 构成、每个段又由多少个Tq 构成等,能够恣意设定位时序。经过设定位时序,多个单元可一同采样,也可恣意设定采样点。各段的效果和 Tq 数如表30.1.2所示:

表30.1.2 一个位各段及其效果
1个位的构成如图30.1.8所示:

图30.1.8 一个位的构成
上图的采样点,是指读取总线电平,并将读到的电平作为位值的点。方位在 PBS1 完毕处。依据这个位时序,咱们就能够核算CAN通讯的波特率了。具体核算方法,咱们等下再介绍,前面说到的CAN协议具有裁定功用,下面咱们来看看是怎么完成的。
在总线闲暇态,最早开端发送音讯的单元取得发送权。
当多个单元一同开端发送时,各发送单元从裁定段的第一位开端进行裁定。接连输出显性电平最多的单元可持续发送。完成进程,如图30.1.9所示:

图30.1.9 CAN总线裁定进程
上图中,单元1和单元2一同开端向总线发送数据,开端部分他们的数据格局是相同的,故无法区别优先级,直到T时刻,单元1输出隐性电平,而单元2输出显性电平,此刻单元1裁定失利,马上转入接纳状况作业,不再与单元2竞赛,而单元2则顺畅取得总线运用权,持续发送自己的数据。这就完成了裁定,让接连发送显性电平多的单元取得总线运用权。
经过以上介绍,咱们对CAN总线有了个大约了解(具体介绍参阅光盘的:《CAN入门书.pdf》),接下来咱们介绍下STM32的CAN操控器。
STM32自带的是bxCAN,即根本扩展CAN。它支撑CAN协议2.0A和2.0B。它的规划方针是,以最小的CPU负荷来高效处理很多收到的报文。它也支撑报文发送的优先级要求(优先级特性可软件装备)。关于安全重要的运用,bxCAN供给一切支撑时刻触发通讯形式所需的硬件功用。
STM32的bxCAN的主要特色有:
l支撑CAN协议2.0A和2.0B自动形式
l波特率最高达1Mbps
l支撑时刻触发通讯
l具有3个发送邮箱
l具有3级深度的2个接纳FIFO
l可变的过滤器组(最多28个)
在STM32互联型产品中,带有2个CAN操控器,而咱们运用的STM32F103ZET6归于增强型,不是互联型,只要1个CAN操控器。双CAN的框图如图30.1.10所示:

图30.1.10 双CAN框图
从图中能够看出两个CAN都别离具有自己的发送邮箱和接纳FIFO,可是他们共用28个滤波器。经过CAN_FMR存放器的设置,能够设置滤波器的分配方法。
STM32的标识符过滤是一个比较复杂的东东,它的存在削减了CPU处理CAN通讯的开支。STM32的过滤器组最多有28个(互联型),可是STM32F103ZET6只要14个(增强型),每个滤波器组x由2个32为存放器,CAN_FxR1和CAN_FxR2组成。
STM32每个过滤器组的位宽都能够独立装备,以满意运用程序的不同需求。依据位宽的不同,每个过滤器组可供给:
● 1个32位过滤器,包含:STDID[10:0]、EXTID[17:0]、IDE和RTR位
● 2个16位过滤器,包含:STDID[10:0]、IDE、RTR和EXTID[17:15]位
此外过滤器可装备为,屏蔽位形式和标识符列表形式。
在屏蔽位形式下,标识符存放器和屏蔽存放器一同,指定报文标识符的任何一位,应该依照“有必要匹配”或“不必关怀”处理。
而在标识符列表形式下,屏蔽存放器也被当作标识符存放器用。因而,不是选用一个标识符加一个屏蔽位的方法,而是运用2个标识符存放器。接纳报文标识符的每一位都有必要跟过滤器标识符相同。
经过CAN_FMR存放器,能够装备过滤器组的位宽和作业形式,如图30.1.11所示:

图30.1.11 过滤器组位宽形式设置
为了过滤出一组标识符,应该设置过滤器组作业在屏蔽位形式。
为了过滤出一个标识符,应该设置过滤器组作业在标识符列表形式。
运用程序不必的过滤器组,应该保持在禁用状况。
过滤器组中的每个过滤器,都被编号为(叫做过滤器号,图30.1.11中的n)从0开端,到某个最大数值-取决于过滤器组的形式和位宽的设置。
举个简略的比如,咱们设置过滤器组0作业在:1个32为位过滤器-标识符屏蔽形式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其间存放到CAN_F0R1的值便是期望收到的ID,即咱们期望收到的映像(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00便是设置咱们需求有必要关怀的ID,表明收到的映像,其位[31:24]和位[15:8]这16个位的有必要和CAN_F0R1中对应的位一模相同,而别的的16个位则不关怀,能够相同,也能够不相同,都认为是正确的ID,即收到的映像有必要是0XFFxx00xx,才算是正确的(x表明不关怀)。
关于标识符过滤的具体介绍,请参阅《STM32参阅手册》的22.7.4节(431页)。接下来,咱们看看STM32的CAN发送和接纳的流程。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/260538.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部