CAN总线工作原理

CAN是什么?

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

在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,现在在欧洲已是汽车网络的标准协议。

现在,CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

下图是车载网络的构想示意图。CAN通信协议的开发,使多种LAN通过网关进行数据交换得以实现。

CAN的特点

(1)  多主控制

在总线空闲时,所有的单元都可以发送消息(多主控制)。最先访问总线的单元可获得发送权。多个单元同时开始发送时,发送高优先级ID消息的单元可获得发送权,所有的消息都以固定的格式发送。

(2)  系统的柔软性

与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

(3)  通信速度

根据整个网络的规模,可设定适合的通信速度。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。

(4)  远程数据请求

可通过发送“遥控帧”  请求其他单元发送数据。

(5)  错误检测功能·错误通知功能·错误恢复功能

所有的单元都可以检测错误(错误检测功能)。

检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。

正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

(6)  故障封闭

CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

(7)  连接

CAN总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

STM32 bxCAN主要特点

●  支持CAN协议2.0A和2.0B主动模式

●  波特率最高可达1兆位/秒

●  支持时间触发通信功能

发送

●  3个发送邮箱

●  发送报文的优先级特性可软件配置

●  记录发送SOF时刻的时间戳

接收

● 3级深度的2个接收FIFO

●  可变的过滤器组:

─  在互联型产品中,CAN1和CAN2分享28个过滤器组

─  其它STM32F103xx系列产品中有14个过滤器组

●  标识符列表

●  记录接收SOF时刻的时间戳

时间触发通信模式

●  禁止自动重传模式

●  16位自由运行定时器

●  可在最后2个数据字节发送时间戳管理

●  中断可屏蔽

初学者需要关注的几个重点

1.隐性位与显性位

CAN总线为“隐性”(逻辑1)时,CAN_H和CAN_L的电平为2.5V(电位差为0V);

CAN总线为“显性”(逻辑0)时,CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差为2.5V)

2.数据帧类型:

(1) 标准数据帧

(2) 扩展数据帧

(3) 标准远程帧

(4) 扩展远程帧

3.位时间特性

CAN总线上的所有器件都必须使用相同的比特率。然而,并非所有器件都要求具有相同的主振荡器时钟频率。对于采用不同时钟频率的器件,应通过适当设置波特率预分频比以及每一时间段中的时间份额的数量来对比特率进行调整。

● 同步段(SYNC_SEG):同步段为首段,用于同步CAN总线上的各个节点。输入信号的跳变沿就发生在同步段,该段持续时间为1TQ。

● 时间段1(BS1):定义采样点的位置。其值可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。

● 时间段2(BS2):定义发送点的位置。其值可以编程为1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。

重新同步跳跃宽度(SJW)定义了,在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。

CAN波特率计算公式

CAN波特率=系统时钟/分频数/(1*tq+tBS1+tBS2)

其中

tBS1=tq*(TS1[3:0]+1)

tBS2=tq*(TS2[2:0]+1)

tq=(BRP[9:0]+1)*tPCLK

这里tq表示1个时间单元

tPCLK=APB时钟的时间周期

BRP[9:0],TS1[3:0]和TS2[2:0]在CAN_BTR寄存器中定义

总体配置保持

tBS1>=tBS2,tBS2>=1个CAN时钟周期,tBS2>=2tSJW

4.屏蔽滤波

(1) 屏蔽位模式

在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。

(2) 标识符列表模式

在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。

为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。

5.bxCAN工作模式

bxCAN有3个主要的工作模式:初始化、正常和睡眠模式。

还包括:测试模式、静默模式、环回模式、环回静默模式

STM32 CAN总线工作原理相关推荐

  1. Linux设备驱动模型3——platform平台总线工作原理

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 四.platform平台总线工作原理1 1.何为平台总线? (1)属于总线中的一种,相对于usb.pci.i2c等物理总线来说,platfo ...

  2. uart怎么判断帧错误_UART通讯总线工作原理的理解

    奥的斯电梯OCSS/LCBII /TCBC/GECB板与电梯轿厢和电梯井道之间的串行通讯采用了UART通讯,将井道和轿厢的输入.输出和开关部件的信号转换成串行通讯信号传输给电梯操作控制系统,大大节省了 ...

  3. uart怎么判断帧错误_UART通讯总线工作原理的理解--龚玉山

    奥的斯电梯OCSS/LCBII /TCBC/GECB板与电梯轿厢和电梯井道之间的串行通讯采用了UART通讯,将井道和轿厢的输入.输出和开关部件的信号转换成串行通讯信号传输给电梯操作控制系统,大大节省了 ...

  4. can硬件结构和工作原理_汽车CAN总线工作原理及测量方法详解

    点滴分享 ALtium designer 快捷键分享 ctrl+r                      复制并重复黏贴 ctrl+shift+v             只能黏贴 shift+c ...

  5. 【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第8章通用和复用功能IO(GPIO和AFIO ) 芯片数据手册(datasheet) STM32的GPIO介绍 STM32引 ...

  6. stm32看门狗工作原理

    一.为什么需要看门狗? 在MCU微型计算机系统中,MCU运行程序很容易受到外界电磁场的干扰,从而造成程序运行错误甚至造成跑飞现象,从而陷入死循环,程序的正常运行被打乱,从而造成不可预料的严重后果,于是 ...

  7. MPU6050工作原理及STM32控制MPU6050

    一·简介: 1.要想知道MPU6050工作原理,得先了解下面俩个传感器: ①陀螺仪传感器: 陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的.人们根据这个道理,用它来保持 ...

  8. STM32 之十六 深入了解 ADC 工作原理及参考电压变动的影响

    缘起   最近项目中用到了终端在仅有电流的情况下启动并正常工作的需要.此时需要先给系统充电,充电时间是毫秒级别.而 MCU 在 2V 基本就可以工作了,此时的 ADC 的基准电压也在 2V(使用的基准 ...

  9. 【常用芯片】ULN2003工作原理及中文资料(实例:STM32驱动28BYJ48步进电机)

    ULN2003的基本介绍 ULN2003的概述 ULN2003是高耐压.大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成.一般采用DIP-16 或SOP-16 塑料封装. ULN2003的主要特点 ...

最新文章

  1. 英特尔在移动芯片为何衰败 看完此文豁然开朗
  2. map集合根据value找key,默认取第一个key
  3. Linux CentOS命令行界面字体重复问题解决记录
  4. mysql数据备份与恢复_MySQL数据备份与恢复
  5. 创业者眼中的小程序:某个岗位工资会翻番
  6. qq空间代码查询_Mysql千万级大数据查询优化经验,一点课堂(多岸学院)
  7. 无聊开始玩路由器,入门Tomato固件
  8. latex加下划线_Latex学习系列之粗体、斜体和下划线
  9. 冲激脉冲抽样定理matlab,信号抽样及抽样定理分析.doc
  10. Java基础知识(八) Java平台与内存管理
  11. PADS9.5如何导出的光绘文件(Gerber),应该检查什么?
  12. Ubuntu 下PupBot 搭建QQ机器人
  13. 如何知道,你真正想要什么?
  14. camera调试基础经验分享
  15. 绘图工具Origin Pro 2022在Win10系统下的安装使用
  16. 达梦数据备份还原(物理逻辑)
  17. Linux SDIO WIFI Marvell8801/Marvell88w8801(六) --- Marvell Linux Wi-Fi driver介绍-WIFI插入卡槽内发生的事情
  18. 多模式MaaS仅仅适用于大城市吗?
  19. Python镜像安装vim
  20. 一看就会一学就废之SpringBoot整合通用Mapper以及常用方法

热门文章

  1. 世界第五大外包公司(CGI group inc)能够做出来多烂的网站,通过系分的课程设计我对于人机交互和团队合作的几个总结
  2. 网页计数器---代码
  3. 网页下拉框智能诱导输入
  4. vue3 setup ts 基于 element-plus 组件的二次封装
  5. 什么是恒流源?如何工作的?
  6. 颈椎不太好适合学计算机那,拒绝颈椎病 挑选人体工学电脑桌椅看这几点
  7. python自制个人网盘_超简单!基于Python搭建个人“云盘”
  8. python 实现验证码识别
  9. 真正射影像(TrueOrtho)的生产和应用
  10. 通过外部交换平台发送xml文件,手动加载能正常发送,但是通过代码拼xml文件发送报错找不到用户,userid is pfxx-user 16dXXXX