labview的CAN驱动程序

71 篇文章 8 订阅
61 篇文章 9 订阅

CSDN话题挑战赛第2期
参赛话题:学习笔记

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

CAN属于现场工业总线的一个范畴,与LIN、FlexRay并称三大汽车总线。CAN与RS485最大的不同在于采取了数据位仲裁的方式来取代传统的站地址轮询方式,因此,CAN可以支持多主多从的工作方式。在总线中传输的所有报文都有一个唯一的ID,并且理论上挂在CAN总线的设备数量没有上限。正是由于CAN底层的协议栈要比RS232和RS485更加复杂,因此,CAN总线在容错与纠错能力、传输速率、稳定性几方面都要优于前者。越复杂的协议实现起来越困难,但好在目前市面上已经有很多现成的CAN总线收发器芯片供我们选择。最重要的是STM32内部已经集成了CAN协议控制器,极大地方便了用户的使用。

与RS232不同的是,RS485是半双工通信,因此,还需要一根额外的信号线来控制SP3485收发器的通信方向。一般情况下,默认为接收模式,需要发送数据的时候,通过该引脚输出高电平使其进入发送模式。

需要切记的是,RS485工作在主从模式下,当其中一台设备进入数据发送模式时,其余的设备必须设置为接收模式,否则RS485总线上的数据无法成功发送和接收。

CAN与前面介绍的RS232点对点通信方式不同,CAN总线中的每一帧报文都是以广播形式发送出去的,网络中的每个节点都可以正常接收这些报文。当然,在实际应用场合中,每个CAN节点有属于自己的角色,并非所有报文都去接收,它可以通过提前设置一些过滤器来筛选出指定的ID报文。关于CAN总线通信协议的更多介绍可以上网查询一下。

在介绍STM32芯片中的基本CAN(bxCAN)控制器之前,先来简单了解一下CAN数据帧的基本构成,

在这里插入图片描述
数据帧由以下7段组成:帧起始、仲裁段、控制段、数据段、CRC段、ACK段以及帧结束。其中,需要软件编程修改的有以下3段:

·仲裁段,即报文的ID号,ID号越小,该报文的优先级越高。
·控制段,表明该帧是哪种类型,比如,是标准帧还是扩展帧,是数据帧还是远程帧。
·数据段,表示一次需要发送的实际字节数组,最多可以一次发送8个字节。

CAN通信过程中,一般有5种类型帧:数据帧、远程帧、错误帧、过载帧、帧间隔。其中,平时使用最多的是前两种:数据帧和远程帧。下面我们详细介绍一下这两种帧的具体含义。

1)数据帧:顾名思义,就是携带有将要发送数据的报文,其ID号是该报文的唯一标识。该报文通过广播形式发送出去,任何想要接收该帧数据的CAN终端节点只要能够过滤出该报文的ID号,就能正常解析出其中包含的数据。

2)远程帧:一般情况下,CAN网络中的节点有主从之分,有时候,CAN主节点需要指定其中的一个从节点发送一些反馈数据回来。比如,主节点想要获取一个温度传感器上的温度值,这个传感器节点传输数据采用的是CAN总线,即CAN的从节点,那么主节点可以先发送一个从节点能够正常接收到的ID远程帧,从节点收到之后,就可以将温度数据作为一个具有相同ID号的数据帧返回给主节点。大家可以将“远程帧”理解为CAN节点回读命令。远程帧一般只有ID号,不携带数据,即其数据场一般为0,这样可以加快传输速度。

STM32中的CAN控制器又称基本扩展CAN,即bxCAN,大家可以理解成支持基本帧与扩展帧的CAN控制器。这个独立于CPU的硬件CAN可以解析常用的CAN2.0A和CAN2.0B协议。因此,bxCAN可以满足用户的各种应用。

在这里插入图片描述
上图显示的是STM32内部集成的基本CAN控制器的系统框图,从中可以看出整个CAN收发器的工作流程。

STM32接收外部报文的流程是:当CAN总线上出现一帧报文时,首先由CAN收发器将CAN总线上的差分信号(隐性或显性电平)转换为bxCAN控制能够识别的高低电平,经STM32上的CAN RX引脚输入CAN的硬件过滤器中;将符合预先设定过的ID和帧为了进一步理解bxCAN的工作原理,我们按照从下至上的顺序,分别介绍CAN节点的每个功能模块。一般情况下,完成一帧报文的接收需要经过以下5个环节:

·CAN收发器
·CAN过滤器
·两个3级(共6个)接收邮箱
·两个FIFO缓冲区
·接收缓冲区(1KB)
而发送则相对比较简单,用户将需要发送的数据帧或远程帧直接放到3级发送邮箱中即可。

(1)CAN收发器
收发器相当于CAN控制器和物理总线之间的接口。市面上有很多这样的收发芯片,目前普遍使用的是TJA1050,这是因为TJA1050不仅可以为总线提供不同的发送和接收性能,还有以下5个优点:
·传输速度高(60Kbps~1Mbps)。
·具有带宽输入范围的差动接收器,可抗电磁干扰(EMI)。
·没有上电的节点不会对总线造成干扰。
·输入级与3.3V电平兼容。
·可以连接至少110个节点。

(2)CAN过滤器
前面说过,CAN总线上的每个节点地位都是同等的,没有地址之分。那么其中一个节点如何将数据传给另一个或者多个指定的节点呢?CAN协议很巧妙地解决了这个问题,那就是通过过滤出总线上自己想要的ID号报文。为了避免过多地占用CPU,过滤器一般都由独立硬件负责完成。STM32中的CAN控制器就集成了14个这样的过滤器,它位于CAN控制器的最底层。

14个过滤器分成两组,每组7个,分别与FIFO0和FIFO1相关联。总线上只有那些与过滤器中设定一致的ID报文才能够通过接收,并存放到CAN的接收邮箱中去。当用户同时设置了多个过滤器,一般会按照优先级的顺序逐个筛选,通过的报文将会放到对应的3级邮箱的任意一个中。STM32的互联型产品中,有两个CAN控制器,因此,最多有28个过滤器,而My_ARM系列产品中使用的STM32F103ZET6芯片只有14个。

(3)CAN接收邮箱
当一帧报文通过了过滤器之后,就会进入该过滤器对应的3个邮箱之一并挂号,如果这3个邮箱都满了,就会产生溢出中断。一旦FIFO中的数据被读走,挂起邮箱中的数据就会立刻转移到FIFO中,并产生相应的接收中断,此时用户就可以在中断服务子程序中读取该帧报文。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Robot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值