STM32 CAN学习(二)
发布时间:2024年01月09日
STM32 CAN 学习
- CAN_TX和CAN_RX通过P24跳线接入到TJA1050芯片上,TJA1050芯片是一个CAN收发器,能将CAN控制器发来的数据转换成CAN_H和CAN_L的差分信号。
- 在STM32单片机内部,集成了一个标准的CAN控制器,控制器通过CAN_TX端口发送数据到收发器芯片的TXD(1脚),CAN总线接收的数据通过RXD(4脚),发送到单片机内部的CAN总线控制器(CAN_RX),这样就实现了基本的收发。
- CAN_H和CAN_L之间连接了一个120Ω的电阻,起到了稳定总线的作用,这两条线通过P25的端口(也就是端子),端子可以连接外部的双绞线和其他CAN总线设备连接。
- CAN总线是一种总线结构,可以连接多个CAN总线设备,理论上同一条CAN总线上,所能连接的设备是无限多的。
- CAN总线使用的线材是双绞线,双绞线具有很好的抗干扰能力
- CAN总线的通讯距离可以达到10KM,在总线的两端需要连接两个120Ω的电阻,其中每个CAN设备的CAN_H都要连接到总线上的H端,每个CAN设备的CAN_L都要连接到总线上的L端,如果H和L接反了,总线将无法通信。
- 只有两个设备时,可以使用简单的通讯方式,不需要使用单片机内部的CAN总线控制器硬件的相关功能,只要发送和接收数据即可,可以当作一个简单的USART串口来使用。其中一个设备发送数据,另一个设备接收数据即可。这样的应用,不需要涉及CAN总线内部复杂的协议,而且还能利用CAN总线的高稳定性和长远的传输距离,相当于把它当作一个稳定性更高,距离更远的USART串口来使用。
- 当CAN总线上连接了很多个CAN设备,这个时候就要使用CAN总线协议来通信了。因为在一条总线上,设备很多,设备与设备之间需要传输大量数据,如果只是简单的收发,可能会导致通讯混乱,只有利用CAN的通信协议,使用CAN总线的内部功能邮箱、标识符、过滤器功能,才能更好地使用CAN总线。
-
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。
在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统
被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很
多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需
要, 1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。
-
此后, CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
- ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准
- ISO11519-2是针对通信速率为125Kbps一下的低速通信标准
-
现在, CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。
-
CAN 协议具有以下特点。
-
多主控制
- 在总线空闲时,所有的单元都可开始发送消息(多主控制)。
- 最先访问总线的单元可获得发送权(CSMA/CA 方式)。
- 多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权。
- CAN的设备不同于I2C,在I2C总线当中只允许有一个主设备和多个从设备,而在CAN总线当中每一个设备都可以是主设备,都可以主动发送数据。
-
消息的发送
- 在 CAN 协议中,所有的消息都以固定的格式发送。
- 总线空闲时,所有与总线相连的单元都可以开始发送新消息。
- 两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。
- ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消
息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的
单元则立刻停止发送而进行接收工作。
-
系统的柔软性
-
与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬
件及应用层都不需要改变。
-
通信速度
-
根据整个网络的规模,可设定适合的通信速度。
-
在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。
-
远程数据请求
-
可通过发送“遥控帧” 请求其他单元发送数据。
-
错误检测功能-错误通知功能-错误恢复功能
- 所有的单元都可以检测错误(错误检测功能)。
- 检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。
- 正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
-
故障封闭
- CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部
故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上
隔离出去。
-
连接
- CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元
数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接
的单元数减少。
- 在CAN总线中,数据的发送是通过邮箱,然后通过CAN总线的TX引脚以一定的波特率发送数据,接收端则以相同的波特率接收数据,送入到过滤器。CAN总线所发送或接收的数据就是报文。
- 与I2C总线不同的是,CAN总线中所有设备都会接收报文,但标识符不符的报文会被过滤器删除
- 在CAN总线中,没有地址的概念,而是通过识别符来识别数据的,识别符是包含在报文中的一部分内容,每一个报文当中都会包含一个识别符。当一个CAN设备发送报文时,其他所有设备都会接收报文的全部内容,接收完成后,再来通过识别符来判断数据是否是自己需要的,如果不是则删除,如果是则保留。
文章来源:https://blog.csdn.net/m0_73640344/article/details/135473430
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!