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.mfbz.cn/a/267909.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

零基础快速上手HarmonyOS ArkTS开发2---ArkTS开发实践

ArkTS开发实践: 接着上一次零基础快速上手HarmonyOS ArkTS开发1---运行Hello World、ArkTS开发语言介绍继续, 在上一次对于ArkTS的基础知识进行了学习,依照官方的课程计划,还有两个具体的小案例需要来实践实践: 实践出…

蓝桥杯 1223 第 2 场 小白入门赛

蓝桥小课堂-平方和 模拟 1 2 2 2 3 2 ⋯ n 2 n ⋅ ( n 1 ) ⋅ ( 2 n 1 ) 6 1^22^23^2\cdotsn^2\dfrac{n\;\cdot\;(n 1)\;\cdot\;(2n1)}{6} 122232⋯n26n⋅(n1)⋅(2n1)​。 write(n * (n 1) * (n * 2 1) / 6);房顶漏水啦 m a x ( 最大的行 − 最小的行 , 最大的列 −…

Jmeter、postman、python 三大主流技术如何操作数据库?

1、前言 只要是做测试工作的,必然会接触到数据库,数据库在工作中的主要应用场景包括但不限于以下: 功能测试中,涉及数据展示功能,需查库校验数据正确及完整性;例如商品搜索功能 自动化测试或性能测试中&a…

CentOS 7 设置网络

CentOS 7 设置网络 正常情况 ①登陆进去之后使用下面的命令修改文件 echo ONBOOTyes >> /etc/sysconfig/network-scripts/ifcfg-ens33②如果是虚拟机重启后使用如下命令进行查看IP地址 ip addr注:到这里如果显示有两部分,则代表网络设置成功&a…

在同一局域网下连接共享文件夹失败,提示:你不能访问共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问

1.尝试打开guest访问。 (1)使用键盘 win R 键,打开运行窗口,并输入 gpedit.msc 打开本地组策略编辑器窗口 (2)选择计算机配置------->管理模板-------->网络-------->Lanman工作站。 &#…

WorkPlus超级APP助力企业节省IT人力成本,实现快速移动化

在信息化时代,移动应用已经成为企业发展的重要组成部分。然而,开发和维护原生客户端的成本却相对较高,需要大量的iOS、安卓和桌面端工程师。为了解决这一问题,WorkPlus作为一个功能完备的超级APP,为企业节约了大量的IT…

【算法提升—力扣每日一刷】五日总结【12/18--12/22】

文章目录 2023/12/18LeetCode每日一刷:[20. 有效的括号](https://leetcode.cn/problems/valid-parentheses/) 2023/12/19LeetCode每日一刷:[150. 逆波兰表达式求值(后缀表达式运算)](https://leetcode.cn/problems/evaluate-rever…

EA常见画图(类图、包图、构件图、状态图、顺序图、活动图)

EA常见活动图,状态图画法 类图:111(1)给关系添加注释(2)设置关系线样式 包图:(1)创建包图(2)在包中添加子包:(3)在包中添加…

【OAuth】快速入门

一、引言 1、什么是OAuth2.0? OAuth 2.0是一个关于授权的开放网络协议,允许用户授权第三方应用访问其在服务提供商上存储的资源(如照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。OAuth 2.0在第三方应…

该酷的酷该飒的飒,穿出自己的潮流前线

精选匈牙利白鸭绒填充,柔软蓬松 舒适感很强,回弹性好 没有什么异味很干净安全 宝贝穿上去保暖又舒适 树脂拉链+金属按扣,松紧帽檐+袖口 下摆还做了可调节抽绳,细节满满防风保暖很nice 短款设计相较于…

分享 | 软件测试的基本流程是什么?软件测试流程详细介绍

软件测试 软件测试和软件开发一样,是一个比较复杂的工作过程,如果无章法可循,随意进行测试势必会造成测试工作的混乱。为了使测试工作标准化、规范化,并且快速、高效、高质量地完成测试工作,需要制订完整且具体的测试…

12.21~12.24最短路,dij,堆优化dij,spfa

有条件的最短路径一定长于无条件的最短路径 朴素dij dij的思路就是先入起点,然后从起点开始向四周遍历,每次确定一个实际最短的,,这里注意,正是因为没有负权,所以越早遇到的最短,就一定是最短…

智能变电站协议系列-2、SV/SMV协议示例(IEC61850)以及5G专网下的电力方案分析

文章目录 一、前言二、资料准备三、libiec61850的SV运行示例及抓包分析1、单独编译示例程序2、运行示例程序及5G专网场景下部署3、wireshark抓包分析 四、最后 一、前言 之前我们对IEC61850协议有了整体的了解,对一些概念有了一定的认识,并针对GOOSE协议…

JWT、session、token区别和实现

JWT、session、token区别和实现 这里需要用到Redis和JWT。 springboot版本是3.2.1 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><…

【MySQL】mysql执行查询超过30秒之后报错

出现场景&#xff1a; 用workbench&#xff0c;查本地数据库&#xff0c;执行查询超过30秒之后&#xff0c;会报错断开连接&#xff0c;报错信息&#xff1a;Error Code: 2013. Lost connection to MySQL server during query 解决办法&#xff1a; 修改配置设置&#xff0c…

数据可视化分析大屏,大数据统计UI页面源文件(信息分析平台免费PS资料)

数据可视化可以帮助数据分析者更好地理解数据&#xff0c;发现数据中的规律和趋势。通过图表和图形等可视化工具&#xff0c;数据分析者可以更快速地发现数据中的关系&#xff0c;比如相关性、趋势、异常值等。对于普通用户来说&#xff0c;理解复杂的数据可能会很困难。通过数…

【开源】基于JAVA语言的学校热点新闻推送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…

Anylogic Pro 8.8.x for Mac / for Linux Crack

Digital twins – a step towards a digital enterprise AnyLogic是唯一一个支持创建模拟模型的方法的模拟建模工具&#xff1a;面向过程&#xff08;离散事件&#xff09;、系统动态和代理&#xff0c;以及它们的任何组合。AnyLogic提供的建模语言的独特性、灵活性和强大性使…

上传文件到七牛云的相关代码(可直接用)

首先在七牛云注册&#xff0c;然后选择对象存储&#xff0c;按照以下配置&#xff1a; 我的存储地区是华南-广东&#xff0c;注意这个如果选择不一样&#xff0c;后面的代码调用会有一点区别&#xff0c;访问控制选择公开&#xff0c;不然回显的外链无法访问。 记住这个空间名称…

HarmonyOS构建第一个ArkTS应用(Stage模型)

构建第一个ArkTS应用&#xff08;Stage模型&#xff09; 创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发…