CAN协议详解+常见问题汇总,吐血整理!!!

这篇具有很好参考价值的文章主要介绍了CAN协议详解+常见问题汇总,吐血整理!!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章分两部分,一是CAN的详解,二是常见问题汇总;文章长,但是都是重点精华,往有帮助~

(参考的是火哥的STM32有关CAN协议的文档)

一、CAN的详解

1. 物理层

  • CAN总线:成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线。
  • CAN是异步通讯,只有CAN_High和CAN_Low两条信号线,且这两条信号线是差分信号线,以差分信号的形式通讯;
  • CAN是半双工的,在同一时刻,一个通讯节点发送消息,其他节点只能接收消息;
  • CAN物理层的形式分为闭环总线和开环总线,闭环总线是高速短距离的,长度最长40m,通信速度最高10Mbps;开环总线是低速远距离的,长度最长1km,通信速度最高125kbps。开环闭环的区别在于差分信号线是不是连在一起的。
  • CAN总线可以挂载多个节点:

can csdn,stm32,嵌入式硬件,单片机

can csdn,stm32,嵌入式硬件,单片机

  • 差分信号:两根信号线的幅度相同,相位相反,通过电压差代表电平1和0;差分信号优点:抗干扰能力强,因为有外界噪声干扰时,会同时耦合到这两条信号线上,由于接收端只关心信号的差值,因此噪声可以抵消。
  • 逻辑电平为1是隐性电平,CAN_High和CAN_Low电压都是2.5v,压差为0;逻辑电平为0显性电平,CAN_High电压3.5v和CAN_Low电压1.5v,压差2v。

2. 协议层

  • CAN中,每个数据位又分为多个段,包括:SS、PTS、PBS1、PBS2;一个数据位由8~25个Tq表示,这个段的作用是保证让该节点与总线的时序同步,确保通讯正常;can csdn,stm32,嵌入式硬件,单片机
  • 通讯波特率由Tq的时间长度,以及每位有多少个Tq决定:

can csdn,stm32,嵌入式硬件,单片机

  • CAN协议是如何通讯的?对数据、操作命令(如读/写)以及同步信号进行打包,打包后的这些内容称为报文。具体:在原始数据段的前面加上传输起始标签、片选(识别)标签和控制标签,在数据的尾段加上 CRC 校验标签、应答标签和传输结束标签,把这些内容按特定的格式打包好,就可以用一个通道表达各种信号了,这样的报文就被称为 CAN 的“数据帧”。
  • CAN有5种数据帧,每种数据帧的用途不一样:can csdn,stm32,嵌入式硬件,单片机
  • 具体介绍数据帧:数据帧以一个显性位(逻辑 0)开始,以 7 个连续的隐性位(逻辑 1)结束,在它们之间,分别有仲裁段、控制段、数据段、 CRC 段和 ACK 段。
  • 帧起始,以显性电平开始,用于通知各个节点将有数据传输;
  • 仲裁段:通过仲裁ID来决定优先级,优先级高的ID先把数据发出去,利用隐性和显性电平作为仲裁,谁先出现隐性电平,谁就先失去对总线的占有权。标准格式ID是11位,扩展格式ID为29位。can csdn,stm32,嵌入式硬件,单片机
  • can csdn,stm32,嵌入式硬件,单片机
  • 控制段中的DLC段,表示报文数据段有多少个字节。
  • 数据段有0到8个字节组成。
  • CRC段是校验位,接收节点算出的 CRC 码跟接收到的 CRC 码不同, 则它会向发送节点反馈出错信息,利用错误帧请求它重新发送。
  • ACK段是应答段,发送节点发送的是隐性位,而接收节点则发送显性位以示应答。
  • 帧结束,由7个隐性位表示结束。

3. STM32有关CAN的配置

  • CAN 控制内核包含了各种控制寄存器及状态寄存器,如主控制寄存器 CAN_MCR 及位时序寄存器 CAN_BTR。
  • 主控制寄存器 CAN_MCR 负责管理 CAN 的工作模式,如自动唤醒、自动离线;
  • 位时序寄存器 CAN_BTR 用于配置测试模式、波特率以及各种位内的段参数;

①测试模式包括:正常模式、静默模式、回环模式及静默回环模式;

  1. 正常模式下就是一个正常的 CAN 节点,可以向总线发送数据和接收数据。
  2. 静默模式只可向总线发送数据1,不能发送数据0,可从总线接收数据,用于监测,它可以用于分析总线上的流量;
  3. 回环模式,输入端只接收自己发送端的内容,不接收来自总线上的内容。使用回环模式可以进行自检;
  4. 回环静默模式,输入端只接收自己发送端的内容,不接收来自总线上的内容,用于自检;

②位时序:

STM32 的 CAN 外设位时序中只包含 3 段,分别是同步段 SYNC_SEG、位段 BS1 及位段 BS2,采样点位于 BS1 及 BS2 段的交界处;这个位时序对应了CAN一个数据位的不同段,即N*Tq=一个数据位;

③计算波特率:

一个数据位的Tq是等于同步段、BS1和BS2段这三个段Tq的总和,CAN1和CAN2挂载在APB1上,位时序寄存器可以分频时钟,Tq=分频数/36MHz,CAN的波特率=1/N*Tq。

二、STM32对CAN的发送邮箱

  • 3个发送邮箱,最多可以缓存 3 个待发送的报文;

can csdn,stm32,嵌入式硬件,单片机

  • 当我们要使用 CAN 外设发送报文时,把报文的各个段分解,按位置写入到这些寄存器中;

三、STM32对CAN的接收邮箱FIFO:它一共有 2 个接收 FIFO,每个 FIFO 中有 3 个邮箱,即最多可以缓存 6 个接收到的报文;

can csdn,stm32,嵌入式硬件,单片机

  • 通过中断或状态寄存器知道接收 FIFO 有数据后,我们再读取这些寄存器的值即可把接收到的报文加载到 STM32 的内存中。
  • 接收报文时,通过检测标志位获知接收 FIFO 的状态,若收到报文,可调用库函数CAN_Receive 把接收 FIFO 中的内容读取到预先定义的接收类型结构体中,然后再访问该结构体即可利用报文了。

四、验收筛选器:有 14个筛选器组,每个筛选器组有 2 个寄存器。

发送节点将报文广播给所有接收器时,接收节点会根据报文标识符的值来确定软件是否需要该消息,为了简化软件的工作, STM32 的 CAN 外设接收报文前会先使用验收筛选器检查,只接收需要的报文到 FIFO 中;

  • 筛选器工作的时候,可以调整筛选 ID 的长度及过滤模式

(1) 标识符列表模式,它把要接收报文的 ID 列成一个表,要求报文 ID 与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。

(2) 掩码模式,它把可接收报文 ID 的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码(关键字)相同,就符合要求,报文就会被保存到接收 FIFO。

4. STM32软件编程

can csdn,stm32,嵌入式硬件,单片机

(1)配置GPIO,开时钟,设定好对应的引脚,对应到TX和RX;

  • TX推挽输出、RX浮空输入,引脚复用功能重映射。

(2)配置CAN初始化结构体,即配置工作模式,先开时钟;

(3)配置筛选器

(4)配置发送报文:包括使用扩展还是标准的ID,选择扩展还是标准模式,发送是数据还是其他内容,设置数据的长度,设置将要发送的数据:

can csdn,stm32,嵌入式硬件,单片机

(5)在中断中接收报文,因此要分为以下两个步骤

  1. 配置NVIC结构体,设置好优先级,包括优先级组、抢占优先级、子优先级;
  2. 在中断服务函数中,接收报文时,通过检测标志位获知接收 FIFO 的状态,若收到报文,可调用库函数CAN_Receive 把接收 FIFO 中的内容读取到预先定义的接收类型结构体中,然后再访问该结构体即可利用报文了。(注意:必须要在中断内调用 CAN_Receive 函数读取接收FIFO 的内容,因为只有这样才能清除该 FIFO 的接收中断标志,如果不在中断内调用它清除标志的话,一旦接收到报文, STM32 会不断进入中断服务函数,导致程序卡死)

二、CAN的常见问题

1、Can总线有什么了解?可以从物理层、协议层再到STM32对CAN三个方面去介绍。

2、仲裁机制?以ID来区别优先级,若有两个节点同时发送数据,那么由于是半双工,在一个时间只能一个节点发送数据,那么就要比较这两个节点的ID,谁的ID先出现隐性电平,即高电平,谁就失去了对CAN发送数据的控制权。

3、can总线,波特率?(与Tq的大小,即与时钟大小有关;一个数据位包括的Tq的个数有关)帧?(了解到的是数据帧,包括起始帧、仲裁帧、控制帧、数据帧、校验帧、应答帧、结束帧)报文?(具体:在原始数据段的前面加上传输起始标签、片选(识别)标签和控制标签,在数据的尾段加上 CRC 校验标签、应答标签和传输结束标签,把这些内容按特定的格式打包好,就可以用一个通道表达各种信号了,这样的报文就被称为 CAN 的“数据帧”)

4、can的传输距离,分为开环和闭环,闭环是高速近距离:10Mbps传输40m,开环是低速远距离:125kbps传输1km。

5、CAN初始化配置步骤?看软件编程那里

6、CAN发送数据格式?

总结就是:包括使用扩展还是标准的ID,选择扩展还是标准模式,发送是数据还是其他东西,设置数据的长度,设置将要发送的数据。

7、CAN总线是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电子干扰性,并且能够检测出产生的任何错误。

8、CAN总线原理:CAN总线以广播的方式从一个节点向另一个节点发送数据,当一个节点发送数据时,该节点的CPU把将要发送的数据和标识符发送给本节点的CAN芯片,并使其进入准备状态;一旦该CAN芯片收到总线分配,就变为发送报文状态,该CAN芯片将要发送的数据组成规定的报文格式发出。此时,网络中其他的节点都处于接收状态,所有节点都要先对其进行接收,通过检测来判断该报文是否是发给自己的。文章来源地址https://www.toymoban.com/news/detail-715844.html

到了这里,关于CAN协议详解+常见问题汇总,吐血整理!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git常见问题汇总

    问题: Your branch is ahead of ‘origin/master’ by 1 commit 原因:你的本地分支高于远程仓库一次提交, 同步更新下,执行命令: 问题: warning: LF will be replaced by CRLF in main.lua The file will have its original line endings in your working directory. 原因:CR代表回车(r) LF代表换行(n),在DosWindows平台下

    2024年02月10日
    浏览(42)
  • 机器学习面试中常见问题整理

    机器学习( ML )作为目前一个比较火领域,提供了许多有趣且高薪的工作和机会。 无论你是刚刚踏入机器学习领域的新手,还是已经积累了一定经验的从业者,面试都是检验你技能和知识的重要环节。 本文将梳理一些常见的面试问题,让你在面试中更加自信从容。 想要从事

    2024年03月11日
    浏览(49)
  • Flask基础及常见问题整理

    使用python开发后端,目前主流的框架就是Flask和Django。其中,Flask是一款轻量级的Python web框架,有以下主要特点: Flask很简单易用,可以快速上手开发web应用。它只依赖Werkzeug和Jinja2两个库,没有象Django那样的重量级复杂的功能。 Flask非常灵活,可以适用于不同的项目规模。从简

    2024年02月11日
    浏览(44)
  • 软件平台接口常见问题汇总

    接口常见问题汇总 一、接口技术层面 1、输入参数验证校验不全面。如:      1.1入参数据类型长度边界,范围边界。      1.2 入参数据内容、成员内容,有效无效,合法非法。      1.3 入参数据 特殊字符 敏感字符过滤。      1.4 入参可否必选。 2、接口内部触发的服务相

    2023年04月21日
    浏览(47)
  • 等保2.0常见问题汇总

    等保2.0发布后,整个网络安全行业积极学习并按照新规范进行网络系统的部署。然而许多人仍然对等保制度的来历、发展、演变以及贯彻重点存在疑问。等保2.0依然在整个实施流程上由五个标准环节构成:定级、备案、建设整改、等级测评、监督检查五个方面。本文汇总梳理

    2024年02月04日
    浏览(101)
  • 大数据常见面试问题汇总

    目录 第1章 核心技术 1.1 LinuxShell 1.1.1 Linux常用高级命令 1.1.2 Shell常用工具及写过的脚本 1.1.3 Shell中单引号和双引号区别 1.2 Hadoop 1.2.1 Hadoop常用端口号 1.2.2 HDFS读流程和写流程 1.2.3 HDFS小文件处理 1.2.4 HDFS的NameNode内存 1.2.5 Shuffle及优化 1.2.6 Yarn工作机制 1.2.7 Yarn调度器 1.2.8 HDFS块大

    2024年02月14日
    浏览(101)
  • 毕业设计答辩常见问题汇总

    答:P0口做数据总线用是不需要加上拉电阻,这个书上面有写的,就是8个IO口同时控制输出,比如P0口接1602液晶、12864液晶、数码管的8段段选等等都不需要加上拉电阻,如果做单个的IO口用就要加上拉电阻。 答:这个论文中有的,也都是一些套话。我就不答了,我整理的都是

    2024年02月05日
    浏览(44)
  • Vector-常用CAN工具 - CANoe迁移常见Port配置问题

            从 CANoe 和 CANalyzer 12.0 SP4 版本开始,以太网 迁移向导 将在必要时自动开始将现有工具配置转换为新的 基于端口的网络访问格式。 尽管大多数现有配置都可以毫无问题地转换,但有些可能不会。如果在迁移过程中遇到问题, 迁移向导 将通过以下可能的问题消息提

    2024年02月07日
    浏览(57)
  • FPGA/IC面试常见问题汇总

    参考:数字IC设计工程师笔试面试经典100题_OnePlusZero的博客-CSDN博客_数字ic设计面试题 目录 参考:数字IC设计工程师笔试面试经典100题_OnePlusZero的博客-CSDN博客_数字ic设计面试题 1、同步复位和异步复位的优缺点 2、什么是竞争和冒险,如何消除? 3、什么是同步电路,什么是异

    2024年02月11日
    浏览(44)
  • RecycleView基本使用及常见问题汇总

    RecycleView属于android基础组件,比较常用,下面总结下其使用的基础流程及常见问题解决办法(常见问题会定期更新) 基础使用 首先在xml里引入RecycleView 编写adapter,分以下几步 1.创建自定义adapter类,创建内部类MyViewHolder,并实现RecycleView的ViewHolder,参数传递view 创建item layout,里

    2024年01月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包