这里的CAN数据波形抓取的是两个STM32F103设备通过CAN通信一方发送另一方接收,CAN收发器使用的是TJA1051
(扩展帧发送数据ID=0x18DAF110 Data=0x06 0x08)

测量总线信号的波形如图1所示,这里示波器的探头接的是CAN_H,探头的夹子接的是参考地:
这里只测了CAN_H的波形,实际上CAN_L的波形与CAN_H的波形是反相的,形成差分信号。

测量接收端CAN_RX的波形如图2所示,这里示波器的探头接的是CAN_RX,探头的夹子接的是参考地,测量的是芯片CAN控制器出来的逻辑波形,还未经过CAN收发器转换:

CAN_TX和CAN_RX是CAN控制芯片的发送管脚(CAN_TX)和接收管脚(CAN_RX)。
完整的CAN电路是由CAN控制器和CAN收发器组成的,二者之间一般通过TTL电平的收发信号(CAN_RX、CAN_TX)连接,由CAN收发器将CAN_TX的TTL信号转换为CAN规范差分信号输出(CAN_H、CAN_L)、同时接收差分线上的实际信号并转换为TTL信号输出到CAN_RX管脚上。
CAN收发器与CAN控制器的CANTX和CANRX相连,对外引出CANH和CANL引脚,输出标准的CAN信号。

CAN总线上,信号表现为电压形式,通过CAN_H和CAN_L线上的电位差来表示CAN信号,分为显性电平(dominant)和隐性电平(recessive)两种类型。其中显性电平规定为逻辑0,隐性电平则为逻辑1。其具体定义可通过下图来理解。

根据上图的CAN_H信号和我们测量到的CAN_H信号对比,CAN_H的高电平对应显性电平逻辑0,CAN_L的低电平对应隐性电平逻辑1,那么图1对应的波形的逻辑数据为:
0 || 11000110110 || 11 || 101111000100010000 || 0[1]00 || 0010 || 0000[1]0110 || 0000[1]1000 || 101101101001000 || 101
SOF|| ID || SRR IDE|| ID扩展 || RTR r0 r1 || DLC|| data0 || data1 || CRC ||CRC界定符 ACK槽 ACK界定符

注意:当连续输出5个相同的位,则需要插入一个反码位 ,如连续输出5个0则需要插入一个1,但这个1在读数时要去掉,上面[1]就是需要忽略的

数据帧的构成图解如下(标准帧和扩展帧只有中间一部分不同):

注意我们这里抓的波形是扩展帧

解析信息:
29位ID
1 1000 1101 1010 1111 0001 0001 0000 从右到左每4位一个字段,即为0x18DAF110

DLC
0010
转换成十进制为2 表示这一帧中有两个数据,接下来的16个字节便表示2个数据

D1
0000[1]0110 = 0x06

D2
0000[1]1000 = 0x08

这样便解析出了我们需要的数据,这是和程序发送的数据一致的。

实测SOF的宽度是8us,因此可计算出波特率为125K,与实际程序设置的速率一致。

CAN波形解析实例(1)相关推荐

  1. JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念...

    JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念 <html><body><script type="tex ...

  2. 二进制 java Class文件解析实例

    其实网上已经有很多java Class文件的解析实例的文章,写这篇博客,只是为了自己仔仔细细的按照jvm spec看一边,别无其他. 先上class文件的格式. ClassFile {         ...

  3. fft python 举例_Python FFT合成波形的实例

    使用Python numpy模块带的FFT函数合成矩形波和方波,增加对离散傅里叶变换的理解. 导入模块 import numpy as np import matplotlib.pyplot as p ...

  4. python 元组拆包_Python元组拆包和具名元组解析实例详解

    前言 在Python中元组是一个相较于其他语言比较特别的一个内置序列类型.有些python入门教程把元组成为"不可变的列表",这种说法是不完备的,其并没有完整的概括元组的特点.除了 ...

  5. MySQL多表查询全面解析实例【汇总】

    经常遇到mysql多表查询的问题,特整理关于MySQL多表查询全面解析实例分享记录.一步一步实战MySQL多表查询. 创建虚拟数据 -- [创建公司职员表] --DROP TABLE IF EXIST ...

  6. 桥接模式实例与解析 实例一:模拟毛笔

    桥接模式实例与解析   实例一:模拟毛笔           现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类.而 ...

  7. modbus报文解析实例_万字长文!春招面试总结,鹅厂T3Android高频面试真题+解析...

    前言: 大家好呀,我是你们的卑微小凯.春招已经接近尾声啦,各位跳槽找工作的小伙伴有没有收获自己满意的offer呢. 小编最近收纳整合了各一线互联网大厂Android岗的面试真题,由初级到进阶,每题都有 ...

  8. Android Json生成及解析实例

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  9. modbus报文解析实例_云原生、全栈可编程的下一代SDN解析与实践 (一)丨传统SDN架构演进...

    点击上方蓝字关注我们 多年以前,由于基于传统协议的控制平面缺乏灵活性,无法满足多样的业务对数据平面的转发需求,软件定义网络(SDN)被提了出来.业界希望通过一种转控分离.开放解耦的架构,让网络资源能够 ...

最新文章

  1. Linux防火墙与iptables命令
  2. Oracle inline view 简介
  3. CF1070L Odd Federalization 高斯消元
  4. python后端前景_python后端开发前景-女性时尚流行美容健康娱乐mv-ida网
  5. oracle同机单实例加入集群,将oracle同机单实例加入rac集群的操作步骤
  6. 广州培训:成功部署报表必做的四件事
  7. [日常训练]training
  8. java 包之 BeanUtils包的使用
  9. php1到5000排序,php排序1亿个号码
  10. layui表单验证,表单提交的若干个方法
  11. 夜天之书 #34 企业如何实践开源协同
  12. 遇到问题--java--mac版本的idea在控制台中使用mvn命令not found
  13. 中国的比尔·盖茨-不得不令我佩服了
  14. androidnbsp;网络联接nbsp;CMWAPnbsp;CTWAP
  15. SqlServer 对象名无效的解决方法
  16. cf 1144G 贪心
  17. 面经 | 腾讯/阿里/京东/头条/旷视等20+企业计算机视觉算法岗面经吐血整理
  18. 程序设计思维与实践月模拟题X3
  19. 如果你认为平凡是痛苦的
  20. 向老销售取经,学来的一点软件销售技巧

热门文章

  1. LiveVideoStackCon 2020上海 6月见
  2. C++模板的那丢丢事儿
  3. ​内核调试技巧--systemtap定位丢包原因
  4. 从ffmpeg源代码分析如何解决ffmpeg编码的延迟问题(如何解决编码 0 延时)
  5. 最快解决在win下杀死端口号的方式
  6. 大剑无锋之什么是死锁?【面试推荐】
  7. 大剑无锋之new一个对象背后发生了什么?
  8. Hadoop权威指南 _03_第I部分Hadoop基础知识_第1章初识Hadoop.
  9. leetcode 516. Longest Palindromic Subsequence | 516. 最长回文子序列(递归 -> 傻缓存 ->DP)
  10. 深入理解LSM-Tree