STM32 CAN使用

STM32 CAN使用

  • 简介
  • 各种通讯接口对比
  • 报文
  • 总线上的报文信息表示为几种固定的赖类型
  • 数据帧
  • 列表模式
  • 掩码模式
  • 配置CAN
  • 配置参数
  • 位时序

简介

控制器局域网CAN(Controller Area Network)是由德国博世公司为汽车应用而开发的多主机局部网络,用于汽车的监测和控制,德国博世公司开发CAN总线的最初目的是解决汽车上数量众多的电子设备之间的通信问题、减少电子设备之间繁多的信号线,于是设计了一个单一的网络总线,所有的外围器件可以挂接在该总线上。

1991年,NXP半导林公司制定并发布CAN技术规范CAN2.0A/B,其中,CAN2.0A协议规范定义了标准帧格式,CAN2.0B协议规范定义了扩展顿格式,1993年11月,ISO组织正式颁布CAN国际标准lSO11898(高速应用,数据传输速率小于1Mbps)和ISO11519(低速应用,数据传输速率小于125 kbps)。

各种通讯接口对比

请添加图片描述
波特率范围在5kbps~1Mbps之间,也是双方规定通讯波特率一致的现况下,才能正确接收数据

报文

在CAN总线上传输的信息称为报文,相当于部递信件的内容,当CAN总线为闲时,任何连接的单元都可以发送新的报文。
报文信号使用差分电压传送,两条信号线(以双绞线传输介质为例)称为CAN_H和CAN_L,静态时均是2.5V左右,此时状态表示为逻辑1,也可以叫隐性。用CANH比CANL高表示逻辑0,称为显性,此时的电压值通常为CANH=3.5V和CAN_L=1.5V。
请添加图片描述

总线上的报文信息表示为几种固定的赖类型

数据帧:从发送节点向其他节点发送的数据信息,相当于甲方发送有内容的信件到乙方方给自己发送一封有内容的信件。
远程帧:向其他节点请求发送具有同一识别符的数据帧,相当于甲方请求
错误帧:检测到总线错误,发送错误帧。
过载帧:过载帧用以在数据帧或远程帧之间提供附加的延时。
帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧。
CAN总线通信有两种不同的帧格式:数据帧有标准帧和扩张帧两种格式,一个11位,一个29位。

数据帧

标准格式帧和扩展格式帧中有所不同,标准格式帧的仲裁场由11位标识符和远程发送请求位RTR组成,扩展格式帧的仲裁场由29位标识符和远程发送请求位RTR组成。

控制场由6个位组成,包括数据长度代码和两个将用于扩展的保留位。数据长度代码指出了数据场中字节的数量。数据长度代码为4位,在控制场里发送,数据帧长度允许的字节数为0、1、2、3、4、5、6、7、8,其他数值为非法的。

数据场由数据帧中的发送数据组成。它可以为0~8字节,每字节包含了8位,首先发送最高有效位MSB,依次发送至最低有效位LSB。CRC场包括CRC序列(CRC SEQUENCE)和CRC界定符(CRCDELIMITER),用于信息帧校验。

应答场长度为2个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。在应答场里,发送节点发送两个隐性位。当接收器正确地接收到有效的报文时,接收器就会在应答间隙(ACKSLOT)期间(发送ACK信号)向发送器发送一个显性的位以示应答。

请添加图片描述
远程帧->省略

错误帧->省略

过载帧->省略

列表模式

首先我们是不是很快就会想到只要准备好一张表,把我们需要关注的所有CAN报文ID写上去,开始过滤的时候只要对比这张表,如果接收到的报文ID与表上的相符,则通过,如果表上没有,则不通过,这个就是简单的过滤方案。总结列表模式就是自己特定关心的ID进行选择出来

掩码模式

假设身份上的18位数 ,我们要为它准备好两张纸片,一片写上屏蔽码,另一片纸片写上验证码。在执行任务的时候先将获取的身份证号码与屏蔽码进行“与”操作,再将结果与验证码的进行比较,根据判断是否相同来决定是否通过。整个判别流程如下所示:
在这里插入图片描述
在bxCAN中,分别采用了两个寄存器(CAN_FiR1,CAN_FiR2)来存储屏蔽码与验证码,从而实现掩码模式的工作流程的。这样,我们就知道了bxCAN过滤器的掩码模式的大概工作原理。

但是,我们得注意到,采用掩码模式的方式并不能精确的对每一个ID进行过滤,打个比方,还是采用之前的守卫的例子,假如城主要求只有1150到1158年出生的人能通过,那么,若我们还是才用掩码模式,那么掩码就设为第7到9位为”1”,对应的,验证码的7~9位分别为”115”,这样就可以了。但是,仔细一想,出生于1159的人还是可以通过,是不是?但总体来说,虽然没有做到精确过滤,但我们还是能做到大体过滤的,而这个就是掩码模式的缺点了。在实际应用时,取决于需求,有时我们会同时使用到列表模式和掩码模式,这都是可能的。

#列表模式与掩码模式的对比
综合之前所述,下面我们来对比一下列表模式与掩码模式这两种模式的优缺点。

模式优点缺点
列表模式能精确地过滤每个指定的CAN ID有数量限制
掩码模式取决于屏蔽码,有时无法完全精确到每一个CAN ID,部分不期望的CAN ID有时也会收到数量取决于屏蔽码,最多无上限

终于进入到正题了!前面已经介绍了过滤器的列表模式与掩码模式,以及掩码模式下的屏蔽码与验证码的含义,还介绍了标准CAN ID与扩展CAN ID的组成部分。现在我们终于要站在bxCAN的角度来分析其过滤方案。

首先过滤模式分列表模式和掩码模式,因此,对于没有过滤器,我们需要这么一个位来标记,用户可以通过设置这个位来标记他到底是想要这个过滤器工作在列表模式下还是掩码模式,于是,这个表示过滤模式的位就定义在CAN_FM1R寄存器中的FBMx位上,如下图:

图5 CAN过滤器模式寄存器CAN_FM1R定义
CAN过滤器模式寄存器CAN_FM1R定义

这里以STM32F407为例,bxCAN共有28个过滤器,于是上图的每一个位对应地表示这28个过滤器的工作模式,供用户设置。”0”表示掩码模式,”1”表示列表模式。

另外,我们知道了标准CAN ID位11位,而扩展CAN ID有29位,对于标准的CAN ID来说,我们有一个16位的寄存器来处理他足够了,相应地,扩展CAN ID,我们就必须使用32位的寄存器来处理它,而在实际应用中,根据需求,我们可能自始至终都只需要处理11位的CAN ID。对于资源严重紧张的MCU环境来说,本着不浪费的原则,这里最好能有另外一个标志用告诉过滤器是否需要处理32位的CAN ID。于是,bxCAN处于这种考虑,也设置了这么一个寄存器CAN_FS1R来表示CAN ID的位宽,如下图所示:

CAN过滤器位宽寄存器CAN_FS1R定义
CAN过滤器位宽寄存器CAN_FS1R定义

如上图,每一个位对应着bxCAN中28个过滤器的位宽,这个需要用户来设置。
于是根据模式与位宽的设置,我们共可以得出4中不同的组合:32位宽的列表模式,16位宽的列表模式,32位宽掩码模式,16位宽的掩码模式。如下图所示:
在这里插入图片描述

CAN总线收发,中断方式接收配置
平台:STM32F103VE
STM32CUBEMX V5.3

配置CAN

CAN的波特率最大为1Mbps。

波特率计算方法:时钟主频 / 分频 / (tq1 + tq2 + swj)

以500K的波特率配置为例:
stm32f103的CAN的时钟主频是36M,分9频就是4M,在除以(5 + 2 + 1)得到500K的波特率。
注意:stm32cubemx生成的CAN代码是不带过滤器的,需要自己手动添加。

配置参数

在这里插入图片描述

参数意思
Prescaler预分频,即位时序提到的APB1 peripheral clocks继续分一次频
Time Quantum最小时间单位Tq,自动计算出来的,不需要填写
Time Quanta in Bit Segment 1PBS1段长度
Time Quanta in Bit Segment 2PBS2段长度
ReSynchronization Jump Width重同步跳跃宽度,即位时序提到的SJW
Time Triggered Communication Mode是否使能时间触发
Automatic Bus-Off Management是否使能自动离线管理
Automatic Wake-Up Modet是否使能自动唤醒
Qutomatic Retransmission是否使能自动重传
Receive Fifo Locked Mode是否使能锁定FIFO
Transmit Fifo Priority配置报文优先级的判断方法
Oprating Mode操作模式

这些参数也可以在can.c中自行修改

在这里插入图片描述
中断(NVIC)设置,根据需要设置,一般勾上CAN1 RX0 Interrupt

位时序

意义:为了实现正确的总线电平采样,确保通讯正常。最小单位是Tq(Time Quantum),一个完整位由8~25个Tq组成
组成:SS段、PTS 段、PBS1段、PBS2段

请添加图片描述

段名意义作用
SS(1Tq)同步段补偿物理延时,是传播时间、收发器延时之和的两倍
PTS(1~8Tq)传播时间段补偿变压阶段误差
PBS1(1~8Tq)相位缓冲段1使总线各节点同步
PBS2(2~8Tq)相位缓冲段2补偿边沿阶段误差
SJW(1~4Tq)再同步补偿宽度补偿时钟频率偏差、传输延迟等

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

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

相关文章

Openssl数据安全传输平台015:OCCI的使用方法+在项目中的设计与实现

文章目录 1 OCCI使用1.1 初始化 - Environment 类1.2 连接数据库 - Connection 类1.3 执行SQL 2 OCCI在项目中的使用2.1 OCCI单独封装为一个类文件OCCIOP2.2 在ServerOP中作为私有成员2.3 ServerOP::ServerOP(string json)中实例化进行使用2.4 秘钥协商过程中进行读写操作 1 OC…

关于错误javax.net.ssl.SSLException: Received close_notify during handshake

今天开发的小伙伴遇到一问题,报错内容是: javax.net.ssl.SSLException: Received close_notify during handshake at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.securi…

智能水厂运行与调控3D模拟仿真在线展示提高整个系统的协同效应

水厂在生活中的重要性不可忽视。它们提供清洁、安全的水源,满足人们饮用、洗浴、烹饪等基本需求,保障公共卫生,预防疾病传播;同时,水厂也促进经济发展,为工业生产和农业灌溉提供保障,吸引和支持企业的投资和…

chrome谷歌浏览器取消网页所有剪切板的授权方法步骤

地址栏输入 chrome://settings/content/clipboard选择 不允许网站查看您剪贴板中的文字或图片 ———————————————— 版权声明:本文为CSDN博主「一切V随缘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明…

MySQL 8 - 处理 NULL 值 - is null、=null、is not null、<> null 、!= null

处理 NULL 值: IS NULL:IS NULL 用于检查一个列是否为 NULL。例如,如果查找一个表中某一列的值为 NULL 的行,可以使用以下语法: SELECT * FROM table_name WHERE column_name IS NULL;IS NOT NULL:IS NOT N…

使用Spring Data Elasticsearch 进行索引的增、删、改、查

一 Spring Data Elasticsearch 项目环境搭建 1.1 修改pom文件添加依赖 目前使用spring-boot-starter-parent版本为2.2.8.RELEASE 对应spring-data-elasticsearch版本为2.2.8.RELEASE,版本对应可以自行百度,如果不行直接用elasticsearch-rest-high-lev…

phar反序列化学习

PHP反序列化常见的是使用unserilize()进行反序列化,除此之外还有其它的反序列化方法,不需要用到unserilize()。就是用到phar反序列化。 Phar phar文件 Phar是将php文件打包而成的一种压缩文档,类似于Java中的jar包。它有一个特性就是phar文…

React Router初学者入门指南(2023版)

React Router,简单来说,是一个帮助处理React应用程序中导航和路由的库。它是用于管理React中路由的最流行的路由工具。如果你对路由的概念不熟悉,可以将其视为在网站的不同部分之间导航的过程。例如,当你进入网站的“联系我们”部…

从AlexNet到chatGPT的演进过程

一、演进 AlexNet(2012): AlexNet是深度学习领域的重要突破,包括5个卷积层和3个全连接层。使用ReLU激活函数和Dropout正则化,获得了ImageNet图像分类比赛的胜利。引入了GPU加速训练,大幅提高了深度神经网络…

Android系统的特性

目录 Android系统的特性 1. 显示布局 2. 数据存储 3. 网络 4. 信息 5. 浏览器 6. 编程语言支持 7. 媒体支持 8. 流媒体支持 9. 硬件支持 10. 多点触控 11.蓝牙 12. 多任务处理 13. 语音功能 14.无线共享功能 15. 截图功能 16. 跨平台 17. 应用程序的安全机制…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(上)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart语言吉祥物Dash(上) 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://…

No authorization token was found

今天遇到了一个问题,我把前后端逻辑都理了一遍,开始怀疑后端,后端肯定没错了,把前端理了一遍,ok前后端没错,我错。登录哪里需要的token????把我搞懵逼了。 测…

npm start启动的是什么

npm start 命令是在一个 Node.js 项目中执行的一个自定义命令,用于启动该项目。该命令是在 package.json 文件中定义的,通常被用于启动一个 Web 应用程序或服务。 具体来说,当在项目目录下执行 npm start 命令时,npm 将会在该项目…

[红蓝攻防]MDOG(全新UI重制版)为Xss跨站而生,数据共享,表单劫持,URL重定向

说明 功能Cookie窃取表单劫持(钓鱼账密)重定向流量劫持多平台数据推送钉钉数据推送 运行窗口 ./dist目录下已生成exe文件,双击打开 Cookie窃取 点击运行服务,复制以上的payload,payload怎么变形那么你可已去混淆 payload在页面执行 受害者访问存在xss漏洞的页面时受到攻击,…

Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED

Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED capacitor 官网: https://capacitorjs.com/docs/ 项目上需要做一个 app,而这个 app 是用 uniapp 做的,里面用到了一个依赖 dom 的库&…

项目管理概论:什么是项目、项目管理的重要性、成功的标准包含什么以及相关笔记

本文摘要 按照惯例,咱们开篇先介绍一下项目概论中的相关概念,然后记录一下这里面的关键知识点和重点笔记。 这些知识点和笔记源自《信息系统项目管理师教程》(第4版)、往年概念方向的真题甚至题干(有时候题目就是知识点 👻)。 本文会不断的更新和补充,比如一些晦涩的概念…

目标检测YOLO实战应用案例100讲-基于无人机图像的房屋目标检测

目录 前言 国内外研究现状 房屋建筑检测的研究现状 深度学习的研究现状

Android官方ShapeableImageView描边/圆形/圆角图,xml布局实现

Android官方ShapeableImageView描边/圆形/圆角图&#xff0c;xml布局实现 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.…

【理论知识:Window Aggregation】flink 窗口聚合功能概述:两种窗口聚合模式的使用例子、功能说明

文章目录 一. Windowing TVFs1. 三种类型聚合的例子2. GROUPING SETS子句语法 ing2.1.ROLLUP2.2. CUBE 3. Selecting Group Window Start and End Timestamps4. 级联窗口聚合&#xff08;Cascading Window Aggregation&#xff09; 二. Group Window Aggregation1. Group Windo…

IDEA新建maven项目,使用mybatis操作数据库完整过程

IDEA新建maven项目&#xff0c;使用mybatis操作数据库完整过程 一、IDEA新建maven项目二、配置mybatis三、创建表对应实体类四、创建mapper接口五、使用mybatis操作数据库 前提&#xff1a; 这个教程是在maven项目中使用mybatis进行数据库操作&#xff0c;不是在spring boot项目…