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.hqwc.cn/news/297594.html

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

相关文章

四. 基于环视Camera的BEV感知算法-BEVDepth

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第四章——基于环视Cam…

DALL-E 2: Hierarchical Text-Conditional Image Generation with CLIP Latents

DALL-E 2 论文代码李沐讲DALLE 2方法 上图中,虚线的上半部分是CLIP的训练过程,虚线的下半部分描述的DALL-E 2的训练过程。CLIP训练 在训练时,将文本以及对应的图像分别输入到CLIP的文本编码器和图像编码器,然后得到输出的文本特征和图像特征,这两个特征就是一个正样本,该…

基于SpringBoot + Vue的图书管理系统

功能概述 该图书管理系统提供了一系列功能,包括图书管理、图书类型管理、读者借阅归还图书、用户管理和重置密码等。 在图书管理功能中,管理员可以方便地进行图书信息的管理。他们可以添加新的图书记录,包括书名、作者、出版社、ISBN等信息&a…

高级人工智能之群体智能:蚁群算法

群体智能 鸟群: 鱼群: 1.基本介绍 蚁群算法(Ant Colony Optimization, ACO)是一种模拟自然界蚂蚁觅食行为的优化算法。它通常用于解决路径优化问题,如旅行商问题(TSP)。 蚁群算法的基本步骤…

web架构师编辑器内容-使用html2canvas获取截图,并处理一些问题

html2canvas-api 为了使用html2canvas完成截图的功能&#xff0c;我们首先先使用一个按钮来测试一下html2canvas的截图功能。 首先在页面上创建一个img标签 <img id"test-image" :style"{ width: 300px}"/>创建一个button按钮&#xff0c;添加点击…

猫头虎带您探索Go语言的魅力:GoLang程序员必备的第三方库大盘点 ‍ ‍

猫头虎带您探索Go语言的魅力&#xff1a;GoLang程序员必备的第三方库大盘点 ‍ &#x1f680;&#x1f431;‍&#x1f4bb; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#x…

接口测试的持续集成的工具(git代码管理工具,jenkins持续集成)

持续集成的概念&#xff1a;大白话就是持续的做一件事情&#xff0c;使其使用起来更加流畅&#xff1b;结合测试来讲就是说用工具管理好代码的同时&#xff0c;使代码运行的更加自动以及智能&#xff1b;提升测试效率。 ⽹址&#xff1a;https://git-scm.com/downloads 长这个…

尚硅谷 java 2023(基础语法)笔记

一、变量与运算符 1、HelloWorld的编写和执行 class HelloChina{public static void main(String[] args){System.out.println("hello,world!!你好&#xff0c;中国&#xff01;");} } 总结&#xff1a; 1. Java程序编写和执行的过程&#xff1a; 步骤1&#xff1…

哈希三道题

两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意…

AIGC:大语言模型LLM的幻觉问题

引言 在使用ChatGPT或者其他大模型时&#xff0c;我们经常会遇到模型答非所问、知识错误、甚至自相矛盾的问题。 虽然大语言模型&#xff08;LLMs&#xff09;在各种下游任务中展示出了卓越的能力&#xff0c;在多个领域有广泛应用&#xff0c;但存在着幻觉的问题&#xff1a…

esp32使用lvgl,给图片取模显示图片

使用LVGL官方工具。 https://lvgl.io/tools/imageconverter 上传图片&#xff0c;如果想要透明效果&#xff0c;那么选择 输出格式C array&#xff0c;点击Convert进行转换。 下载.c文件放置到工程下使用即可。

EFCore8分析类图映射到代码和数据库的示例

借用微软EFCore8官方的示例&#xff0c;我画了张类图&#xff1a; blog&#xff08;博客&#xff09;与Post&#xff08;文章&#xff09;是1对多的关系&#xff0c;显式表达出两者间是双向导航&#xff1a;双方都可见。 Post&#xff08;文章&#xff09;与Tag&#xff08;标…