STM32 高级 物联网通信之CAN通讯
目录
CAN通讯介绍
CAN(Controller Area Network 控制器局域网,简称CAN或者CAN bus)是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。
它基于消息传递协议(给消息添加了类型),设计之初在车辆上复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。
CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。
物理层
CAN网络节点
一个CAN控制器:
一般由MCU提供,STM32内部提供了一个CAN控制器
一个CAN收发器:
收发器一般需要专门芯片提供。这里采用PD1050收发器芯片
控制器和收发器之间通过CAN_Tx及CAN_Rx信号线相连。
收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。
这两根线做一个差值来表示收发和发
流程:
发数据:。。。
收数据:。。。
CAN总线网络
闭环总线网络:遵循ISO 11898标准的高速短距离,最高传输距离40m,通讯速度最高为1Mbps,总线两端要求有一个120Ω的电阻。
开环总线网络:遵循ISO11519-2标准的低速、远距离。最高传输距离1Km,通讯速度最高为125Kbps,两根总线串联两个2.2KΩ的电阻。
差分信号:
两根信号线:振幅相同,相位相反,然后进行相减,
再电路板要求:差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线。
优点:抗干扰能力强。能有效抑制电磁干扰(EMI)
缺点:差分信号一定要走两根等长、等宽、紧密靠近、且在同一层面的线。对电路板比较小,走线比较紧张的情况下,给布线带来挑战。差分信号线具有这些优点,在 USB 协议、485 协议、以太网协议及 CAN 协议的物理层中,都使用了差分信号传输。
举例
逻辑1(隐性电平)
CAN_High =CAN_Low = 2.5V
电压差 VH-VL=0V
逻辑 0 (显性电平)
CAN_High=3.5V,CAN_Low =1.5V
电压差为 VH-VL=2V
协议层
CAN的帧(报文)种类
CAN总线是广播类型的总线。这意味着所有节点都可以侦听到所有传输的报文。无法将报文单独发送给指定节点;所有节点都将始终捕获所有报文。但是CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应。
CAN使用短报文,最大实用负载是94位。报文中没有任何明确的地址;相反,可以认为报文是通过内容寻址,也就是说,报文的内容隐式地确定其地址。
CAN总线上有5种不同的报文类型(或“帧”):数据帧、远程帧、错误帧、过载帧和帧间隔。
1 数据帧(发送单元->接受单元)
数据帧是最常见的报文类型,用于发送单元向接收单元发送数据。
2 远程帧(接受单元->发送单元)
远程帧用于接收单元向具有相同id的发送单元请求发送数据。
3 错误帧(发送方发送数据错误会发送的状态帧)
错误帧当检测出错误时向其他单元通知错误的帧。
原文地址:https://blog.csdn.net/qq_64219867/article/details/144632632
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!