文章目录

  • 一、前言
  • 二、数据帧 - 标准帧与拓展帧
  • 三、远程帧 - 标准帧与拓展帧
  • 四、应用程序如何控制发送标准帧还是拓展帧?

一、前言


CAN报文帧有5种类型,其中数据帧最常用。远程帧很少使用的原因是它基于客户端-服务器的通讯模型(说白了就是一问一答)。

错误帧,过载帧,帧间隔不需要应用程序控制。例如使用STM32H743开发CAN程序,不需要使用应用程序发送错误帧,过载帧,帧间隔,这些CAN报文帧都由STM32H743芯片内部的CAN控制器决定是否需要发送。说白了就是由硬件控制,不需要编写软件。

数据帧,远程帧由应用程序控制。使用过STM32芯片开发CAN程序的同学都知道,让CAN控制器发送CAN报文之前需要填写一个结构体,结构体的内容如下:

当成员变量TxFrameType = FDCAN_DATA_FRAME时,CAN控制器发送数据帧。当成员变量TxFrameType = FDCAN_REMOTE_FRAME时,CAN控制器发送远程帧。

二、数据帧 - 标准帧与拓展帧


从下图看到,数据帧 = 帧起始 + 仲裁段 + 控制端 + 数据段 + CRC段 + ACK段 + 帧结束
数据帧可以继续分为标准帧与拓展帧,区别在帧的ID段长度不一样。标准帧的ID是11位,拓展帧的ID是29位。

三、远程帧 - 标准帧与拓展帧


从下看到,远程帧 = 帧起始 + 仲裁段 + 控制段 + CRC段 + ACK段 + 帧结束
远程帧也可以继续细分为标准帧与拓展帧,区别在帧的ID段长度不一样。标准帧的ID是11位,拓展帧的ID是29位。

此外,数据帧与远程帧的区别在于数据帧有数据段,远程帧没有数据段。远程帧的作用是请求另外的CAN节点发送数据,发送远程帧的CAN节点不需要发送数据(是请求数据),所以远程帧不需要数据段。

四、应用程序如何控制发送标准帧还是拓展帧?


回到CAN控制器的发送结构体上,如下图所示:

当成员变量IdType = FDCAN_STANDARD_ID时,CAN控制器发送标准帧。当成员变量IdType = FDCAN_EXTENDED_ID时,CAN控制器发送拓展帧。
在stm32h7xx_hal_fdcan.h找到相应的宏定义。

CAN总线技术 | 数据链路层01 - CAN报文的组成相关推荐

  1. CAN总线技术 | 物理层01 - CAN信号电平

    文章目录 一.前言 二.CAN信号的电平 三.为什么要采用两根线(双绞线)的差分电平信号? 四.线与原理 一.前言 广州虹科录制的CAN总线技术课程非常不错,建议同学们学习一下.B站的地址:https ...

  2. CAN总线技术 | 数据链路层04 - CAN节点状态与错误处理机制

    文章目录 一.前言 二.错误检测区域 三.错误帧 四.CAN节点状态 4.1.FDCAN错误计数器寄存器(FDCAN_ECR) 4.2.FDCAN协议状态寄存器(FDCAN_PSR) 一.前言 CAN ...

  3. CAN总线技术 | 数据链路层03 - CAN总线竞争与仲裁机制

    文章目录 一.前言 二.CAN总线非破坏性仲裁机制 三.非破坏性仲裁机制的前提 四.仲裁的实现 一.前言 CAN总线厉害的其中一个原因是CAN总线灵活且强大的竞争与仲裁机制. 二.CAN总线非破坏性仲 ...

  4. CAN总线技术 | 数据链路层02 - 帧结构

    文章目录 一.前言 二.帧开始 三.仲裁段 四.控制段 五.数据段 六.CRC段(校验) 七.ACK段(应答段) 八.帧结束 九.帧间隔ITM 十.一个数据段长度为8的标准帧,总共多少个位呢?是108 ...

  5. CAN总线技术 | CAN脱颖而出的“秘密”

    CAN总线在汽车网络中脱颖而出的"秘密": 节点间采用多主通讯方式. 采用短帧结构,标准数据帧8个字节,500K波特率,用200多us就能发完. 报文ID值越小,优先级越高. 非破 ...

  6. 学习笔记10--CAN总线技术

    本系列博客包括6个专栏,分别为:<自动驾驶技术概览>.<自动驾驶汽车平台技术基础>.<自动驾驶汽车定位技术>.<自动驾驶汽车环境感知>.<自动驾驶 ...

  7. PCI Express总线技术分析*

    PCI Express总线技术分析(修改) PCIe总线继承于PCI总线,相比于传统并行传输形式的PCI总线,PCIe采用全双工串行差分高速传输总线,其在信号完整性.抗干扰性以及实时性等方面有着明显改 ...

  8. CAN总线技术 | 物理层03 - 采样点

    文章目录 一.前言 二.STM32CubeMX上采样点的设置 一.前言 广州虹科录制的CAN总线技术课程非常不错,建议同学们学习一下.B站的地址:https://www.bilibili.com/vi ...

  9. 计算机原理与应用第六章——总线技术

    第六章--总线技术 文章目录 第六章--总线技术 一.总线的基本概念 (一)总线的概念 (二)具体读写操作 (三)实例:PC XT总线 (四)总线的性能指标 (五)总线时序 (六)串行总线 (七)总线 ...

最新文章

  1. 阿里云的一些奇怪问题及服务器配置
  2. Swift之Delegate/闭包
  3. python中time模块获取时间的使用
  4. JS学习之Node类型
  5. 计算机网络的拓扑结构主要取决于它的( )
  6. error: Pulling is not possible because you have unmerged files
  7. 雷军:小米9完全开放购买 全面现货供应
  8. cmake 多次编译_Part01_CMakeLists构建管理多个模块的C代码
  9. Java接口中的成员变量为什么必须声明为public static final?
  10. 接口自动化测试中的用例编写问题总结
  11. c++fabs函数_支持向量机(SVM)模型python复现 - SMO算法;核技巧;高斯核函数
  12. [企业管理]邮政系统,真得悲哀呀!居然歪曲理由掩盖事实
  13. Unity EasyAR图像跟踪
  14. 计算机t恤,PS一分钟技巧!给T恤加个图案竟然这么简单
  15. 7-8 愿天下有情人都是失散多年的兄妹 (25分)
  16. yii1 ajax,ajax - 在yii 1中使用ajax根据选定的单选按钮选项更新html字段值 - 堆栈内存溢出...
  17. c语言 100匹马 编程,编程,百马百担有关问题,有100匹马,驮100担货,大马驮三担,中马驮2担,两匹小马驮一担,求大、中、小各多少匹...
  18. qt高亮快捷键_Qt常用快捷键
  19. FLUENT算例2:混合弯管的流动与传热
  20. 业聚医疗港交所上市:市值76亿港元 为钱永勋家族企业

热门文章

  1. 全渠道java b2b b2c o2o平台
  2. [转]AIX平台下如何增加用户和组的名称长度
  3. 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排
  4. 换行符javajava去除字符串中的空格、回车、换行符、制表符
  5. ubuntu下安装phpredis的模块扩展
  6. PHP 基本语法,变量
  7. 股票开盘的最大成交额-----一道不错的贪心算法题目
  8. 在 Ubuntu 14.04 中配置 PXE 服务器
  9. 分布式搜索elasticsearch
  10. 10 个利用Eclipse调试Java的常见技巧