CAN总线基础详解以及stm32的CAN控制器

news2024/12/27 15:09:45

目录

CAN简介

CAN总线拓扑图

CAN总线特定

CAN应用场景

CAN的物理层

CAN的协议层

CAN数据帧介绍

CAN位时序介绍

数据同步过程

硬件同步

再同步

CAN总线仲裁

stm32的CAN控制器

CAN控制器介绍

CAN控制器模式

CAN控制器框图

接收过滤器

CAN控制器波特率计算

CAN相关寄存器

CAN主控制寄存器(CAN_MCR)

CAN位时序寄存器(CAN_BTR)

CAN 标识符寄存器(CAN_(T/R)IxR)

数据长度和时间戳寄存器(CAN_(T/R)DTxR)

CAN低位数据寄存器(CAN_(T/R)DLxR)

CAN高位数据寄存器(CAN_(T/R)DHxR)

CAN过滤器模式寄存器(CAN_FM1R)

CAN过滤器位宽寄存器(CAN_FS1R)

CAN 过滤器FIFO关联寄存器(CAN_FFA1R)

​CAN 过滤器激活寄存器(CAN_FA1R)

CAN 过滤器组x寄存器(CAN_FxR(1/2))


CAN简介

        CAN(Controller Area Network),是IOS国际标准化的串行通信协议 。为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。

CAN总线的发展史:

  • 低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000米
  • 高速CAN(ISO11898)通信速率125Kbps~1Mbps,总线长度≤40米(经典CAN
  • CANFD 通信速率可达5Mbps,并且兼容经典CAN,遵循ISO 11898-1 做数据收发

CAN总线拓扑图

CAN总线由两根线( CANL 和 CANH )组成,允许挂载多个设备节点(低速CAN:20 高速CAN:30)。

CAN总线特定

  1.   多主控制  每个设备都可以主动发送数据
  2.   系统的柔软性  没有类似地址的信息,添加设备不改变原来总线的状态
  3.   通信速度  速度快,距离远
  4.   错误检测&错误通知&错误恢复功能
  5.   故障封闭  判断故障类型,并且进行隔离
  6.   连接节点多  速度与数量找个平衡

CAN应用场景

CAN总线协议已广泛应用在汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。

CAN的物理层

  1. CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差来判断总线电平。
  2. 总线电平分为显性电平(逻辑0)和隐性电平(逻辑1),二者必居其一。
  3. 显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方。

电平

高速CAN

低速CAN

显性电平(0)

UCAN_H – UCAN_L=  2V

UCAN_H – UCAN_L = 3V

隐性电平(1)

UCAN_H – UCAN_L = 0V

UCAN_H – UCAN_L = - 1.5V

CAN的协议层

CAN总线以“帧”形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。

帧类型

帧作用

数据帧(Data Frame)

用于发送单元向接收单元传输数据的帧

遥控帧(Remote Frame)

用于接收单元向具有相同ID的发送单元

请求数据的帧

错误帧(Error Frame)

用于当检测出错误时向其他单元通知

错误的帧

过载帧(Overload Frame)

用于接收单元通知其尚未做好接收准备

的帧

间隔帧(Inter Frame Space)

用于将数据帧 及遥控帧与前面的帧

分离开来的帧

CAN数据帧介绍

  1. 帧起始:表示数据帧开始的段,显性信号
  2. 数据段:数据的内容,一帧可发送0~8字节数据
  3. 仲裁段:表示该帧优先级的段,优先级
  4. CRC段:检查帧的传输错误的段
  5. ACK段:表示确认正常接收的段
  6. 控制段:表示数据的字节数及保留位的段
  7. 帧结束:表示数据帧结束的段,7个隐性信号

CAN位时序介绍

  CAN总线以“位同步”机制,实现对电平的正确采样。位数据都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段又由多个位时序Tq组成。

​采样点是指读取总线电平,并将读到的电平作为位值的点。

​根据位时序,就可以计算CAN通信的波特率。

​注意 : 节点监测到总线上信号的跳变在SS段范围内,表示节点与总线的时序是同步,此时采样点的电平即该位的电平。

数据同步过程

CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步。

硬件同步

节点通过CAN总线发送数据,一开始发送帧起始信号。总线上其他节点会检测帧起始信号在不在位数据的SS段内,判断内部时序与总线是否同步。如果起始信号不在SS段内,采样点获取的电平是不正确的,节点会采用硬件同步机制进行调整,把自己的SS段平移到检测到边沿的地方,此时采样点获取的电平是正确的。

再同步

再同步利用普通数据为的边沿信号进行同步。再同步的情况分为两种,边沿信号相对于SS段的位置即超前和滞后。

再同步时,PSB1和PSB2中增加或减少的时间被称为“再同步步长宽度(SJW)”,其范围时1-4Tq,限定了SJW的值后,再同步时,不能增加限定长度的SJW值,SJW值较大时,吸收误差的能力更强,但是通信速率会下降。

CAN总线仲裁

当CAN总线处于空闲时,最先开始发送消息的单元获取发送权,当多个单元同时发送时,从报文ID的第一位开始进行仲裁,连续输出显性电平最多的单元可以继续发送,即首先出现隐形电平的单元失去对总线的控制权,变为接收。竞争失败的单元自动检测总线是否空闲,当总线空闲会第一时间再次检测发送。

stm32的CAN控制器

CAN控制器介绍

​STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本协议。

​CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。CAN 2.0B Passive只能处理标准数据帧且扩展帧的内容会忽略。

​bxCAN主要特点:

  •   波特率最高可达1M bps
  •   支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳)
  •   具有3级发送邮箱
  •   具有3级深度的2个接收FIFO
  •   可变的过滤器组(最多28个)

CAN控制器模式

CAN控制器的工作模式有三种:初始化模式、正常模式和睡眠模式。

CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式,这三种测试模式需要再初始化模式下进行配置。

CAN控制器框图

  • CAN内核:包含各种控制/状态/配置寄存器,可以配置模式、波特率等
  • 发送邮箱:用来缓存待发送的报文,最多可以缓存3个报文
  • 接收FIFO:缓存接收到的有效报文
  • 接收过滤器:筛选有效报文​

发送处理

发送优先级由邮箱中报文的标识符决定。标识符数值越低有最高优先级。如果标识符值相同,邮箱小的先被发送。

接收处理

​有效报文指的是(数据帧直到EOF段的最后一位都没有错误),且通过过滤器组对标识符过滤。

接收过滤器

当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。

每个过滤器组都有两个32位寄存器CAN_FxR1和CAN_FxR2。根据过滤器组的工作模式不同(位宽和选择模式),寄存器的作用不尽相同。

​位宽可设置32位或16位,寄存器存储的内容就有所区别。

过滤器组Reg

32位

16位(寄存器由两部分组成)

CAN_FxR1

STDID[10:0]、EXTID[17:0]、

IDE、RTR

STDID[10:0]、EXTID[17:15]、

IDE、RTR

CAN_FxR2

STDID[10:0]、EXTID[17:0]、

IDE、RTR

STDID[10:0]、EXTID[17:15]、

IDE、RTR

​      选择模式可设置屏蔽位模式或标识符列表模式,寄存器内容的功能就有所区别。

屏蔽位模式,可以选择出一组符合条件的报文。寄存器内容功能相当于是否符合条件。

​标识符列表模式,可以选择出几个特定ID的报文。寄存器内容功能就是标识符本身。

CAN控制器波特率计算

​STM32的CAN外设位时序分为三段:

  • 同步段SYNC_SEG
  • 时间段1 BS1(PTS +PBS1)
  • ​时间段2 BS2​

波特率=1/(1tq+tq∗(TS1[3:0]+1)+tq∗(TS2[2:0]+1) )

CAN相关寄存器

CAN主控制寄存器(CAN_MCR)

CAN位时序寄存器(CAN_BTR)

CAN 标识符寄存器(CAN_(T/R)IxR)

数据长度和时间戳寄存器(CAN_(T/R)DTxR)

CAN低位数据寄存器(CAN_(T/R)DLxR)

CAN高位数据寄存器(CAN_(T/R)DHxR)

CAN过滤器模式寄存器(CAN_FM1R)

CAN过滤器位宽寄存器(CAN_FS1R)

CAN 过滤器FIFO关联寄存器(CAN_FFA1R)

​CAN 过滤器激活寄存器(CAN_FA1R)

CAN 过滤器组x寄存器(CAN_FxR(1/2))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的图书商城(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的图书商城(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMv…

libexif库介绍

libexif是一个用于解析、编辑和保存EXIF数据的库。它支持EXIF 2.1标准(以及2.2中的大多数)中描述的所有EXIF标签。它是用纯C语言编写的,不需要任何额外的库。源码地址:https://github.com/libexif/libexif ,最新发布版本为0.6.24,…

topsis算法

TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )模型中文叫做“逼近理想解排序方法”,是根据评价对象与理想化目标的接近程度进行排序的方法,是一种距离综合评价方法。基本思路是通过假定正、负理想…

C#,数值计算,基础函数——任意位数π的数值算法源程序与数据可视化

对于数学常数 PI 后面位数的计算与追求,是数学家与计算机科学家们乐此不疲的游戏。 一、圆周率PI简史 圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母π表示,是一个在数学及物理学中普遍存在的数学常数。π也等于圆…

关于图像分割任务中按照比例将数据集随机划分成训练集和测试集

1. 前言 之前写了分类和检测任务划分数据集的脚本,三大任务实现了俩,基于强迫症,也实现一下图像分割的划分脚本 分类划分数据:关于图像分类任务中划分数据集,并且生成分类类别的josn字典文件 检测划分数据&#xff…

如何计算ThreadLocal对象的hash值?【ThreadLocal技术】(含AtomicInteger的介绍)

如何计算ThreadLocal对象的hash值? 一、前置知识二、问题三、剖析源码:如何计算ThreadLocal对象的hash值?1、源码1.1 咱先得知道nextHashCode的起始值1.1.1 那就要先了解AtomicInteger创建AtomicInteger原子的增减操作原子的加法操作原子的获…

对Tor的去匿名化攻击的调查

文章信息 论文题目:De-Anonymisation Attacks on Tor: A Survey 期刊(会议): IEEE Communications Surveys & Tutorials 时间:2021 级别:中科院1区(IF:35.6) 文章链…

Python 面向对象之反射

Python 面向对象之反射 【一】概念 反射是指通过对象的属性名或者方法名来获取对象的属性或调用方法的能力反射还指的是在程序额运行过程中可以动态获取对象的信息(属性和方法) 【二】四个内置函数 又叫做反射函数 万物皆对象(整数、字符串、函数、模块、类等等…

黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目——第三部分

黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot mybatis plus开发核心技术的真java实战项目——第三部分 1. 菜品管理的业务功能1.1 文件的上传和下载🙇‍♂️1.2 新增菜品1.3 接收页面提交的数据🙇‍♂️(涉及两张表&a…

大数据技术架构

1 技术架构矩阵 大数据技术栈虽然比较多,但可以抽象为输入(数据接入)--处理(数据处理、数据分析)--输出(数据应用)。工作角色分工,数据处理以数据仓库开发人员为主,数据分析以数据分析师为主,其他所有组件、系统、技术相关归为数据平台。 2 数据源 大数据的数据来源…

媒体捕捉-iOS自定义二维码扫描功能

引言 随着iOS 7引入AV Foundation框架,二维码扫描功能已经成为iOS应用程序中不可或缺的一部分。现今,几乎每个应用都充分利用这一功能,为用户提供了诸如扫码登录、扫码填充等丰富多彩的便捷体验。这项技术不仅丰富了应用功能,也为…

我与nano实验室交流群

感兴趣的同学、朋友可以加入群聊共同学习聊天哦。 主要是工训赛、电赛、光电、集成电路等等,会分享一些开源代码,博主自己做的项目,自己画的PCB等等,包含但不限于STM32、K210、V831、机器视觉,机械臂,ROS&a…

Packet Tracer - Configure AAA Authentication on Cisco Routers

Packet Tracer - 在思科路由器上配置 AAA 认证 地址表 目标 在R1上配置本地用户账户,并使用本地AAA进行控制台和vty线路的身份验证。从R1控制台和PC-A客户端验证本地AAA身份验证功能。配置基于服务器的AAA身份验证,采用TACACS协议。从PC-B客户端验证基…

我的隐私计算学习——联邦学习(2)

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具,经由自己阅读后整理而成 (三)联邦学习的算子 ------------------------ 算子是什么?--------------------------- ​ 从广义上讲,对任何函数进行某一项操作都可…

【Verilog】基于Verilog的DDR控制器的简单实现(一)——初始化

在FPGA中,大规模数据的存储常常会用到DDR。为了方便用户使用,Xilinx提供了DDR MIG IP核,用户能够通过AXI接口进行DDR的读写访问,然而MIG内部自动实现了许多环节,不利于用户深入理解DDR的底层逻辑。 本文以美光(Micro…

Linux驱动学习—中断

1、中断基础概念 1.1 什么是中断 CPU在正常运行期间&#xff0c;由外部或者内部引起的时间&#xff0c;让CPU停下当前正在运行的程序&#xff0c;转而去执行触发他的中断所对应的程序&#xff0c;这就是中断。 响应中断的过程&#xff1a; <1>中断请求 <2>中断…

给您的应用添加弹窗

概述 在我们日常使用应用的时候&#xff0c;可能会进行一些敏感的操作&#xff0c;比如删除联系人&#xff0c;这时候我们给应用添加弹窗来提示用户是否需要执行该操作&#xff0c;如下图所示&#xff1a; 弹窗是一种模态窗口&#xff0c;通常用来展示用户当前需要的或用户必须…

cookie和session、请求转发和重定向

会话 分为有状态会话和无状态会话 在HTML中&#xff0c;"会话"一般指的是Web服务器与客户端&#xff08;通常是浏览器&#xff09;之间进行的一系列请求和响应。它是一种在网络上模拟人与人之间通信的方式&#xff0c;常见于Web应用程序中。 会话、Cookie和Sessio…

JavaScript 基础二part1.运算符:赋值、一元、比较、逻辑运算符

JavaScript 基础二 1.1 赋值运算符1.2 一元运算符自增运算符的用法&#xff1a;例题 1.3 比较运算符不同类型间的比较严格相等对 null 和 undefined 进行比较 1.4 逻辑运算符例题 1.5 运算符优先级 1.1 赋值运算符 赋值运算符&#xff1a;对变量进行赋值的运算符 已经学过的赋…

c++学习第八讲---类和对象---继承

继承&#xff1a; 使子类&#xff08;派生类&#xff09;拥有与父类&#xff08;基类&#xff09;相同的成员&#xff0c;以节约代码量。 1.继承的基本语法&#xff1a; class 子类名&#xff1a;继承方式 父类名{} &#xff1b; 例&#xff1a; class father { public:in…