重学STM32---(九) ——CAN通信(一)

  

一.CAN简介

1.CAN是什么?

CAN 是 Controller Area Network的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。

2.CAN特点

(1)  多主控制

(2)  消息的发送

在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新

消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier  以下称为 ID)决定优先级。ID 并不

是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消

息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的

单元则立刻停止发送而进行接收工作。

(3)       系统的柔软性

(4)       通信速度

。。。。。等等

3.  错误状态的种类

          

(1)  主动错误状态

主动错误状态是可以正常参加总线通信的状态。

处于主动错误状态的单元检测出错误时,输出主动错误标志。

(2)  被动错误状态

被动错误状态是易引起错误的状态。

处于被动错误状态的单元虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。

处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被

认为是没有错误的。

处于被动错误状态的单元检测出错误时,输出被动错误标志。

另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内

必须插入“延迟传送”(8 个位的隐性位)。

(3)  总线关闭态

总线关闭态是不能参加总线上通信的状态。

信息的接收和发送均被禁止。

这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。

                

4. 总线拓扑

CAN 收发器根据两根总线(CAN_High 和 CAN_Low)的电位差来判断总线电平。

总线电平分为显性电平和隐性电平两种。 总线必须处于两种电平之一。 总线上执行逻辑上的线“与”时,显性电平为“0”,隐性电平为“1”。物理层的特征如图所示。

            

5.CAN协议

5.1 帧的种类

通信是通过以下 5 种类型的帧进行的。

•  数据帧

•  遥控帧

•  错误帧

•  过载帧

•  帧间隔

另外, 数据帧和遥控帧有标准格式和扩展格式两种格式。 标准格式有 11 个位的标识符 (Identifier:  以下称 ID) ,扩展格式有 29 个位的 ID。

              

              

              

5.2  数据帧

数据帧由 7 个段构成。

数据帧的构成如图所示。

(1)  帧起始

表示数据帧开始的段。

(2)  仲裁段

表示该帧优先级的段。

(3)  控制段

表示数据的字节数及保留位的段。

(4)  数据段

数据的内容,可发送 0~8 个字节的数据。

(5) CRC 段

检查帧的传输错误的段。

(6) ACK段

表示确认正常接收的段。

(7)  帧结束

表示数据帧结束的段。

•  数据帧和遥控帧的不同

? 遥控帧的 RTR 位为隐性位,没有数据段。

? 没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。

•  遥控帧没有数据段,数据长度码该如何表示?

? 遥控帧的数据长度码以所请求数据帧的数据长度码表示。

•  没有数据段的数据帧有何用途?

? 例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。

5.3 优先级的决定

在总线空闲态,最先开始发送消息的单元获得发送权。

多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继

续发送。

仲裁的过程如图所示。

            

5.4  错误的种类

错误共有 5 种。多种错误可能同时发生。

•  位错误

•  填充错误

•  CRC 错误

•  格式错误

•  ACK错误

错误的种类、错误的内容、错误检测帧和检测单元如表所示。

5.5  位时序

由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。

•  同步段(SS)

•  传播时间段(PTS)

•  相位缓冲段 1(PBS1)

•  相位缓冲段 2(PBS2)

这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成。

1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序。

1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可

同时采样,也可任意设定采样点。

各段的作用和 Tq 数如表 11 所示。1 个位的构成如图所示。

          

详情请参考CAN入门教程。。。

时间: 2024-07-30 13:34:09

重学STM32---(九) ——CAN通信(一)的相关文章

重学计算机组成原理(二)- 制定学习路线,攀登“性能”之巅

0 学习路线的知识点概括 学习计算机组成原理,就是学习计算机是如何协调运行的 计算机组成原理的英文叫Computer Organization Organization 意"组织机构". 该组织机构能够进行各种计算.控制.读取输入,进行输出,达成各种强大的功能. 把整个计算机组成原理的知识点拆分成了四大部分 计算机的基本组成 计算机的指令和计算 处理器设计 存储器和I/O设备. 0.1 计算机的基本组成 计算机的硬件组成 这些硬件,怎么对应到经典的冯·诺依曼体系结构的 除此之外,还需要

重学ps_1

1,选取 打开图片->点击选取工具->ctrl+c->ctrl+n->ctrl+v 2,去除图片背景 打开你要去除背景的图片->在图层面板中->双击图层把图层改为0层->用魔棒点击背景->然后点击delete键->最后将图片存储为png格式 如果存为jpg他会默认添加背景 3,改变图片上文字的颜色 打开要改变的图片->选择快速工具->在你要改变的文字上点击一下->然后在点击油漆桶工具->在选择你想要改变的颜色->然后点击文

重学html

html是描述网页结构的标记语言. 1.html中标记是由尖括号和标记名组成,例如:<h1>,一个元素是指开始标记.闭合标记和他们之间的内容组成,例如:<h1>北京</h1> 2.很多时候,我们用html创建的网页在浏览器中运行的时候,会利用浏览器自带的默认样式来表现结构. 3.css级联样式表,用来描述如何表现内容. <style type="text/css">   <!--type告诉浏览器你所使用的样式的种类--> &

重学线代——声明篇

为啥重学线代呢? 1.当初学得模棱两可,时间长了啥也没剩下 2.越来越发现线代很流弊,很有用(不只是线代,各门数学都有此感触) 3.比较巧合地在网络上发现了个很好的线代教学资源 4.假期浪费了太可惜了 你这堆博客要写点啥呢? 课程笔记.个人领悟.无知吐槽.等等等等 你还想说点啥么? 没了 哦 恩

重学C++ (1)

写在开头的话:这学期没有写太多的代码,终于把中英文两篇论文弄完了,趁着中间的空隙,想想找工作的处境.自己也定了自己的方向.不管学什么语言吧,每个语言都有自己的优势和使用的群体.只要自己是良马,终会有伯乐赏识. 定的标题为“重学C++” 本人之前使用C++基本上用作算法编写,MFC界面的学习编写,集成OpencV进行图像处理的项目开发或者论文实验 总的来说,能处理基本问题.但是远不能达到灵活的地步.所以下载了两本书<effective C++>和<effective STL>我希望能

stm32之USART通信

任何USART通信,需要用到2个对外连接的引脚:RxD,TxD: RxD是输入引脚,用于串行数据接收: TxD是输出引脚,用于串行数据发送: SCLK引脚:发生器时钟输出(同步模式下,异步模式下不需要) 在IrDA模式(红外模式)下需要下列引脚: IrDA_RDI: 红外模式下的数据输入: IrDA_TDO:红外模式下的数据输出: 调制解调模式下需要: nCTS:清除发送: nRTS:发送请求: 数据的接收/发送过程示意图: 异步串行通信协议需要定义以下5个内容: 1.起始位 2.数据位(8/9

STM32之串口通信

一.RS232通信协议 1.概念 个人计算机上的通讯接口之一,由电子工业协会(Electronic Industries Association,EIA) 所制定的异步传输标准接口. 2.电气特性 逻辑1(MARK): -3V--15V 逻辑0(SPACE):  +3-+15V 3.接口 实现全双工异步通信只需要三根线:RX.TX和GND. 二.常见COMS电平转RS232电平的芯片--MAX3232 1.逻辑输入与逻辑输出特性 2.RS232接口端输入特性 3.RS232接口端输出特性 三.S

C#&amp;java重学笔记(函数)

C#部分  1.写在函数定义的()中的关键字: a.params关键字:用来满足函数的参数为数组时,而数组的长度不固定的情况.且该关键字只能用来修饰数组型参数.这样一修饰,就达成了类似JavaScript函数书写参数的特点. b.ref关键字:让参数按引用传递,类似于C中的传指针参数.比如经典的数值交换函数,你传形参和传指针的结果应该知道,加了ref关键字就相当于传指针.注意:ref只接收变量做参数,你字面量怎么弄指针?而且该变量必须初始化!     c.out关键字:功能和ref一样,区别在于

Java集合类简单总结(重学)

java集合类简介(重学) 一.Collection(集合).Map接口两者应该是平行关系吧. 1.Map介绍 Map是以键值(key-value)对来存放的,2个值.通过key来找到value(例:姓名-电话,通过姓名得到电话),通过Map创建的对象key都 不可以重复. 它的两个常用子类:HashMap类和HashTable类. HashMap类:无序存放的,key不允许重复 HashTable类:无序存放,key不允许重复 key值可通过Map的方法keyset获取全部的key值,返回是个