打印
[STM32L5]

怎样用STM32CAN总线接口发送和接收数据

[复制链接]
3892|90
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CAN协议基础知识

I2C.SPI总线多用于短距离传输,协议简单,数据量少,主要用于IC之间的通讯,而 CAN 总线则不同,CAN(Controller Area Network) 总线定义了更为优秀的物理层、数据链路层,并且拥有种类丰富、简繁不一的上层协议。与I2C、SPI有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。

使用特权

评论回复
沙发
花间一壶酒sd|  楼主 | 2021-10-26 19:59 | 只看该作者
CAN物理层的形式主要分为闭环总线及开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。CAN闭环通讯网络是一种遵循ISO11898标准的高速、短距离网络,它的总线最大长度为40m,通信速度最高为1Mbps,总线的两端各要求有一个
“120欧”的电阻。来做阻抗匹配,以减少回波反射。

使用特权

评论回复
板凳
花间一壶酒sd|  楼主 | 2021-10-26 20:01 | 只看该作者
闭环总线网络

使用特权

评论回复
地板
花间一壶酒sd|  楼主 | 2021-10-26 20:01 | 只看该作者
CAN开环总线网络是遵循ISO11519-2标准的低速、远距离网络,它的最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻

使用特权

评论回复
5
花间一壶酒sd|  楼主 | 2021-10-26 20:02 | 只看该作者
开环总线网络

使用特权

评论回复
6
花间一壶酒sd|  楼主 | 2021-10-26 20:03 | 只看该作者
CAN总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于CAN通讯协议不对节点进行地址编码,而是对数据内容进行编码,所以网络中的节点个数理论上不受限制,只要总线的负载足够即可,可以通过中继器增强负载。

使用特权

评论回复
7
花间一壶酒sd|  楼主 | 2021-10-26 20:05 | 只看该作者
CAN通讯节点由一个CAN控制器及CAN收发器组成,控制器与收发器之间通过CAN_Tx及CAN_Rx信号线相连,收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。其中CAN_Tx及CAN_Rx使用普通的类似TTL逻辑信号,而CAN_High及CAN_Low是一对差分信号线,使用比较特别的差分信号。当CAN节点需要发送数据时,控制器把要发送的二进制编码通过CAN_Tx线发送到收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线CAN_High和CAN_Low线输出到CAN总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的CAN_High及CAN_Low信号转化成普通的逻辑电平信号,通过CAN_Rx输出到控制器中。

使用特权

评论回复
8
花间一壶酒sd|  楼主 | 2021-10-26 20:07 | 只看该作者
差分信号

差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1。相对于单信号线传输的方式,使用差分信号传输具有如下优点:
• 抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而
接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。
• 能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他
们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越
少。
• 时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通
单端信号依靠高低两个阈值电压判断,因而受工艺,温度的影响小,能降低时
序上的误差,同时也更适合于低幅度信号的电路。
• 由于差分信号线具有这些优点,所以在USB协议、485协议、以太网协议及CAN协议的物理层中,都使用了差分信号传输。

使用特权

评论回复
9
花间一壶酒sd|  楼主 | 2021-10-26 20:09 | 只看该作者
CAN协议中的差分信号

CAN协议中对它使用的CAN_High及CAN_Low表示的差分信号做了规定。以高速CAN协议为例,当表示逻辑1时(隐性电平),CAN_High和CAN_Low线上的电压均为2.5v,即它们的电压差V H -V L =0V;而表示逻辑0时(显性电平),CAN_High的电平为3.5V,CAN_Low线的电平为1.5V,即它们的电压差为V H -V L =2V。

使用特权

评论回复
10
花间一壶酒sd|  楼主 | 2021-10-26 20:10 | 只看该作者

使用特权

评论回复
11
花间一壶酒sd|  楼主 | 2021-10-26 20:11 | 只看该作者
CAN 总线的特点
  CAN 总线网络是一种真正的多主机网络,在总线处于空闲状态时,任何一个节点单元都可以申请成为主机,向总线发送消息。其原则是:最先访问总线的节点单元可以获得总线的控制权;多个节点单元同时尝试获取总线的控制权时,将发生仲裁事件,具有高优先级的节点单元将获得总线控制权。

使用特权

评论回复
12
花间一壶酒sd|  楼主 | 2021-10-26 20:11 | 只看该作者
CAN 协议中,所有的消息都以固定的数据格式打包发送。两个以上的节点单元同时发送信息时,根据节点标识符(常称为 ID,亦打包在固定的数据格式中)决定各自优先级关系,所以 ID 并非表示数据发送的目的地址,而是代表着各个节点访问总线的优先级。如此看来,CAN 总线并无类似其他总线“地址”的概念,在总线上增加节点单元时,连接在总线的其他节点单元的软硬件都不需要改变。

使用特权

评论回复
13
花间一壶酒sd|  楼主 | 2021-10-26 20:12 | 只看该作者
CAN 总线的通信速率和总线长度有关,在总线长度小于 40m 的场合中,数据传输速率可以达到 1Mbps,而即便总线长度上升至 1000m,数据的传输速率仍可达到 50Kbps,无论在速率还是传输距离都明显优于常见的 RS232、RS485 和 I2C 总线。

使用特权

评论回复
14
花间一壶酒sd|  楼主 | 2021-10-26 20:12 | 只看该作者
对于总线错误,CAN 总线有错误检测功能、错误通知功能、错误恢复功能三种应对措施,分别应对于下面三点表述:所有的单元节点都可以自动检测总线上的错误;检测出错误的节点单元会立刻将错误通知给其他节点单元;若正在发送消息的单元检测到当前总线发生错误,则立刻强制取消当前发送,并不断反复发送此消息至成功为止。

使用特权

评论回复
15
花间一壶酒sd|  楼主 | 2021-10-26 20:13 | 只看该作者
CAN 总线上的每个节点都可以通过判断得出,当前总线上的错误时暂时的错误(如瞬间的强干扰)还是持续的错误(如总线断裂)。当总线上发生持续错误时,引起故障的节点单元会自动脱离总线。

使用特权

评论回复
16
花间一壶酒sd|  楼主 | 2021-10-26 20:13 | 只看该作者
CAN 总线上的节点数量在理论上没有上限,但在实际上收到总线上的时间延时及电气负载的限制。降低最大通信速率,可以增加节点单元的连接数;反之,减少节点单元的连接数,则最大通信速率可以提高。

使用特权

评论回复
17
花间一壶酒sd|  楼主 | 2021-10-26 20:14 | 只看该作者
CAN总线的数据通信是以数据帧的格式进行的,而数据帧又是由位场组成的,其中每一个位又被划分为四段.即SS(SYNC SEG),PTS(PROP SEG--传播时间段),PBS1(PHASE SEG1--相位缓冲段1),PBS2(PHASE SEG1--相位缓冲段2).

使用特权

评论回复
18
花间一壶酒sd|  楼主 | 2021-10-26 20:14 | 只看该作者

使用特权

评论回复
19
花间一壶酒sd|  楼主 | 2021-10-26 20:15 | 只看该作者
数据帧的结构图:

使用特权

评论回复
20
花间一壶酒sd|  楼主 | 2021-10-26 20:16 | 只看该作者
图中D表示显性电平,R表示隐形电平.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

1138

帖子

2

粉丝