ARM学习(24)Can的高阶认识和错误处理

笔者来聊一下CAN协议帧的认识和错误处理。

1、CAN协议帧认识

CAN 差分信号,是经过CAN收发器转成差分信号的,CAN RX和TX是逻辑电平。CAN的基础知识,可参考笔者这边文章:ARM学习(21)STM32 外设Can的认识与驱动编写。

CAN总线上面要接120欧姆的电阻,形成闭环。

CAN的总线电平:

  • 显性0,CAN-H 3.5V,CAN-L 1.5V
  • 隐形1,CAN-H 2.5V,CAN-L 2.5V,

CAN的协议帧主要有:

  • 帧开始:SOF,数据帧开始
  • 仲裁段:帧ID,根据ID进行仲裁
  • 控制段:数据长度等
  • 数据段:数据域,8字节,不够会填满发送,所以需要长度指定。
  • CRC段:对前面的字段进行CRC校验
  • ACK段:发送完成后,有节点接收会被拉低,
  • 帧结束:EOF,帧结束
    在这里插入图片描述
    逻辑分析仪抓到的CAN协议帧:

在这里插入图片描述
下面是:帧起始,ID,控制段
在这里插入图片描述
中间是:数据段和CRC段
在这里插入图片描述
最后是:ACK段和帧结束
在这里插入图片描述

2、CAN异常处理

2.1 CAN异常介绍

CAN异常处理,首先得知道CAN有哪些异常,LEC 可以指示错误信息:

  • 位填充错误
  • 格式错误
  • 确认错误,没有ACK
  • 隐形错误
  • 显性错误
  • CRC错误。
    在这里插入图片描述
    例如下图:可以看到,标红色的都代表错误,首先CRC错误,然后ACK错误,正常应该是0,EOF尾帧错误,正常应该全1,
    在这里插入图片描述

如果CAN总线异常,那么可以增加相关寄存器打印,可以知道CAN的错误。

printf("CAN_TX_TIMEOUT, ESR=0x%x, TSR=0x%x, IER=0x%x\r\n",CAN2->ESR,CAN2->TSR,CAN2->IER);

在这里插入图片描述

当然也可以通过中断触发,但是中断触发有个问题,如果总线一直异常,那么会一直触发,导致持续进中断,程序无法正常运行。

关于CAN异常中断的配置,首先需要知道异常会触发哪个中断,然后需要使能相应的中断源,以及中断函数。

CAN共计四个中断,前三个中断很容易理解,就是下图的三个中断

  • CAN_TX_IRQn:发送中断
  • CAN_RX0_IRQn:FIFO0的接收中断
  • CAN_RX1_IRQn:FIFO1的接收中断
  • CAN_SCE_IRQn:不知道什么中断
    在这里插入图片描述
    然后下面还要一张图,显示了CAN异常触发的中断,ESR:Error State Register,异常状态寄存器,每一位都有使能位控制,左边是中断源,中间是中断控制,右边是中断处理函数,状态改变错误中断,即State Change Error Handler,SCE_Handler,所以通过这张图我们就确定了异常处理的中断函数。

在这里插入图片描述

  • 使能中断源
......
CAN_ITConfig(CAN2, CAN_IT_ERR);
CAN_ITConfig(CAN2, CAN_IT_EWG);
CAN_ITConfig(CAN2, CAN_IT_EPV);
CAN_ITConfig(CAN2, CAN_IT_BOF);
CAN_ITConfig(CAN2, CAN_IT_LEC);
  • 使能NVIC 中断函数
NVIC_InitStructure.NVIC_IRQChannel = CAN2_SCE_IRQn;
NVIC_InitStructure.IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
  • 中断函数处理
void CAN2_SCE_IRQHandler(void)
{printf("CAN ESR=0x%x\r\n",CAN2->ESR);CAN_ClearITPendingBit(CAN2, CAN_IT_ERR);CAN_ClearITPendingBit(CAN2, CAN_IT_EWG);CAN_ClearITPendingBit(CAN2, CAN_IT_EPV);CAN_ClearITPendingBit(CAN2, CAN_IT_BOF);CAN_ClearITPendingBit(CAN2, CAN_IT_LEC);
}

在这里插入图片描述

2.2 CAN 异常造错

  • 实验一:CAN总线只有一个节点
    按理说只有一个节点的时候,肯定会报ACK错误,因为没有节点回,将ACK信号拉低,但是测试结果发现,同时还伴有帧格式错误,还有少量的CRC错误,查阅资料发现,可能确实会存在帧格式错误,
    在这里插入图片描述
    在这里插入图片描述

  • 实验二:CAN 总线上面发送了一个不存在节点的报文
    一切正常,查阅资料发现,自由有节点接收,那么报文就正确发送,接收段由于过滤规则过滤掉是接收端的问题,那么ACK就会正确回,所以报文正常。
    在这里插入图片描述

  • 实验三:CAN H接地
    发送失败,CAN离线,

  • 实验四:CAN L接地
    正常发送

  • 实验五:CAN H与L短接
    发送失败,CAN离线

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

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

相关文章

云桌面 瘦终端_小米盒子连接Citrix云桌面

先前看到很多公司使用Wyse、Hp等瘦终端设备登陆Citrix云桌面,便想购得一台瘦终端设备,想来只是为了测试,况且瘦终端价格不低,便一直未买。后使用自己的平板连接Citrix XenDesktop创建的Win7桌面,感觉效果很好&#xff…

Apache Mesos + Marathon和Java EE

Apache Mesos是一个开放源代码群集管理器,可在分布式应用程序或框架之间提供有效的资源隔离和共享。 Apache Mesos从计算机(物理或虚拟)上提取CPU,内存,存储和其他计算资源,从而使容错和弹性的分布式系统易…

计算机指令中数据寻址的方式,1.变址寻址需要在指令中提供一个寄存器编号和一个数值。 2.计算机的指令越多,功能越强越好。 3.程序计数...

满意答案happysk72推荐于 2017.12.16采纳率:57% 等级:12已帮助:21199人1.对变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基…

tab切换-自动、点击、内容变换

<div class"tab"> <ul class"pics"> <li><a href""><img src"images/pic2.jpg" width"448" height"315" alt"宝业大和工业化住宅制造…

在JAX-RS中使用@Context [第1部分]

JAX-RS提供Context批注&#xff0c;以在RESTful服务中注入各种资源。 一些最常用的注入组件是HTTP标头&#xff0c;HTTP URI相关信息。 这是完整列表&#xff08;无特定顺序&#xff09; HTTP标头 HTTP URI详细信息 安全上下文 资源上下文 请求 组态 应用 提供者 让我…

babel原理_带你了解 snowpack 原理,你还学得动么(下)

作者&#xff1a;AlienZHOU转发链接&#xff1a;https://zhuanlan.zhihu.com/p/149351900目录带你了解 snowpack 原理&#xff0c;你还学得动么(上)带你了解 snowpack 原理&#xff0c;你还学得动么(下)本篇小编建议小伙们从第一篇开始&#xff0c;按照顺序来看&#xff0c;更清…

测试社交软件有哪些,性格测试:测你适合哪个社交平台

你喜欢通过什么方式和人交流&#xff1f;随着网络世界越来越发达&#xff0c;人们越来越倾向于使用社交工具来维系与家人、朋友、同事之间的关系。不但在现实生活中不好直接表达出来的话通过网上交流的方式可以顺畅地表达出来&#xff0c;而且也节约了时间上的成本&#xff0c;…

VS2012无法安装cocos2d-x-2.1.4 解决方法及VS2012新建coco2d-x项目(一)

转自&#xff1a;http://www.cnblogs.com/wangpei/admin/EditPosts.aspx?opt1 &#xff08;注&#xff1a;此方法是可行&#xff0c;仅供参考&#xff0c;建议大家直接看我的 一见命令解决vs安装并创建cocos2d-x&#xff0c;如果你习惯了和以前一样在vs点击创建就用这个方法&a…

JMS 2.0中JMSContext的类型

如果您遵循Java EE&#xff0c;您将不会知道JMS 2.0&#xff08;Java EE 7&#xff09;中的简化API组件。 构成简化API一部分的重要接口之一是javax.jms.JMSContext接口。 根据实例的获取和管理方式&#xff08;生命周期&#xff09;&#xff0c;JMSContext可以分为两种类型&a…

excelexportentity中设置null不显示的方法_一般人不知道的线程间数据交换Exchanger

线程间的数据共享除了定义一个共享数据然后各个线程去访问这种方式外&#xff0c;还可以使用Exchanger交换数据。简单案例首先看看Exchanger的运用&#xff0c;Exchanger最简单的测试代码&#xff0c;如下图&#xff1a;对应打印的结果如下&#xff1a;线程2创建对象java.lang.…

画毛毛虫代码计算机图形学,考试计算机图形学考试计算机图形学.docx

考试计算机图形学考试计算机图形学计算机图形学大题第四章1个。第六章2个第七章1个第一章4、比较个人计算机与工作站的图形功能个人计算机仅限于符合二维&#xff0c;又是单任务操作方式工作站可处理二、三维&#xff0c;多任务操作方式区别个人计算机工作站显示分别率640 X 48…

网卡驱动程序之编写虚拟网卡(二)

一、virt_net.c /** 参考 drivers\net\cs89x0.c*/#include <linux/module.h> #include <linux/errno.h> #include <linux/netdevice.h> #include <linux/etherdevice.h> #include <linux/kernel.h> #include <linux/types.h> #include <…

冷热rx-java可观察

我自己对“热的和冷的可观察的”的理解是不稳定的&#xff0c;但这是我到目前为止所了解的&#xff01; 冷观测 考虑一个返回rx-java Observable的API&#xff1a; import obs.Util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import rx.Observable; import…

布尔表达式的语法及语义分析程序_XSS语义分析的阶段性总结(一)

作者&#xff1a;Kale 合天智汇前言由于X3Scan的研发已经有些进展了&#xff0c;所以对这一阶段的工作做一下总结&#xff01;对于X3Scan的定位&#xff0c;我更加倾向于主动被动的结合。主动的方面主要体现在可以主动抓取页面链接并发起请求&#xff0c;并且后期可能参考XSStr…

计算机上的usb设备是什么东西,联接一个USB的线在电脑桌上方便插U盘的东西叫什么?...

HUB&#xff0c;即俗称的集线器。它是一个多端口的转发器&#xff0c;当以HUB为中心设备时&#xff0c;网络中某条线路产生了故障&#xff0c;并不影响其它线路的工作。所以HUB在局域网中得到了广泛的应用。大多数的时候它用在星型与树型网络拓扑结构中&#xff0c;以RJ45接口与…

【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告...

声明&#xff1a;本文为黑金动力社区&#xff08;http://www.heijin.org&#xff09;原创教程&#xff0c;如需转载请注明出处&#xff0c;谢谢&#xff01; 黑金动力社区2013年原创教程连载计划&#xff1a; http://www.cnblogs.com/alinx/p/3362790.html 《FPGA那些事儿--Tim…

设置springboot日志级别_Spring Boot 日志框架实践

概述Java应用中&#xff0c;日志一般分为以下5个级别&#xff1a;ERROR 错误信息WARN 警告信息INFO 一般信息DEBUG 调试信息TRACE 跟踪信息Spring Boot使用Apache的Commons Logging作为内部的日志框架&#xff0c;其仅仅是一个日志接口&#xff0c;在实际应用中需要为该接口来指…

简单的类来测量延迟

这是我编写的用于测量延迟的非常简单的类。 HDRHistogram并不是劳斯莱斯解决方案&#xff0c;但是如果您只想向项目添加一个类&#xff0c;则可以很好地解决问题。 这是一个简单的测试程序&#xff0c;向您展示其用法&#xff1a; package util;public class LatencyMeasureE…

计算机加分乘法套用,8+8+8+8+8写成乘法算式要怎样写?小学数学为何这么死板?...

88888写成乘法算式只能写8x5不能写5x8吗&#xff1f;小学数学为何这么死板&#xff1f;这个题目来自于某小学的期考试卷&#xff0c;是个填空题&#xff0c;88888写成乘法算式时给了两个空( )和( )&#xff0c;就有人提出来只能写8x5不能写5x8&#xff0c;所以应该只给一个空。…

债券价格和通胀率

一般规律&#xff0c;通胀率于债券收益率正相关。 当通胀率较高时&#xff0c;市场会降低对债券的需求&#xff08;固定息票&#xff09; 》 导致债券价格下跌&#xff0c;收益率上升。转载于:https://www.cnblogs.com/xispace/p/3383357.html