STM32-CAN控制器介绍

news2024/11/29 12:39:55

STM32-CAN控制器介绍

对CAN接口部分重要知识点进行记录,更详细的需要查看参考手册

CAN协议介绍:https://blog.csdn.net/weixin_46251230/article/details/129147612

bxCAN简介

STM32的CAN接口叫做bxCAN,bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。

对于安全紧要的应用,bxCAN提供所有支持时间触发通信模式所需的硬件功能

时间触发模式:正常CAN通信是通过ID号来进行仲裁的,时间触发模式就不是通过ID号,而是通过一定的时间间隔来发送数据,需要自行规划好发送的间隔,避免造成冲突,而且数据也不会重发

发送具有3个发送邮箱,接收有3级深度的两个接收FIFO,这些都是用于数据的缓存作用

接收FIFO

共有2个接收FIFO,每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理

CAN1比CAN2多了过滤器寄存器部分,所以CAN2接收到的数据ID需要通过CAN1来进行过滤,CAN1和CAN2都有自己的主发送邮箱和接收FIFO

接收滤波器的作用是过滤ID号的

在这里插入图片描述

bxCAN工作模式

bxCAN有3个主要的工作模式:初始化模式正常模式睡眠模式

初始化模式:该模式下是禁止发送和接收的,只能做些初始化的动作,比如配置寄存器,因为配置时不能影响到总线,所以是禁止发送接收的

正常模式:在初始化完成后,软件应该让硬件进入正常模式,以便正常接收和发送报文

睡眠模式(低功耗):总线上没有数据通信时,就处于睡眠模式了

bxCAN测试模式

静默模式

发送数据内部就进行接收,自发自收,不会对外发送,但能接收外部的数据,可以用来测试内部的数据接收以及外部的数据接收

在这里插入图片描述

环回模式

环回模式是用来测试发送的,发送的数据可以被内部接收,同时还会发送到总线上,但不能接收外部i数据,在测试CAN功能是否正常时,可以使用该模式,只需一个主控板就行

在这里插入图片描述

环回静默模式

完全内部发送和接收,与总线上没有通信数据

在这里插入图片描述

发送处理

一开始发送邮箱处于空置状态,当往邮箱放入数据时,会变为挂号状态,因为邮箱是有3个优先级的,放入数据时可能高优先级的邮箱数据还没有发送出去,所以需要进行等待,进入挂号状态,当写入数据的邮箱变为最高优先级了,则进入预定状态,一旦CAN总线空闲时,数据就会被发送出去,处于发送状态,如果发送成功后会进入空置,发送失败也进入空置,失败时TXOK标志位置0,可以随时终止发送

在这里插入图片描述

接收处理

接收到的报文,被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱,来读取 FIFO中最先收到的报文。

FIFO从空状态开始,在接收到第一个有效的报文后,FIFO状态变为挂号_ 1,软件可以读取FIFO输出邮箱来读出邮箱中的报文,然后通过对CAN_RFR寄存器的RFOM位设置’1’来释放邮箱,这样FIFO又变为空状态了。如果在释放邮箱的同时,又收到了一个有效的报文,那么FIFO仍然保留在挂号 _1状态,软件可以读取FIFO输出邮箱来读出新收到的报文。

如果应用程序不释放邮箱,在接收到下一个有效的报文后,FIFO状态变为挂号_ 2,重复上面的过程,第三个有效的报文把FIFO变为挂号_3状态

在这里插入图片描述

溢出

当FIFO处于挂号_3状态(即FIFO的3个邮箱都是满的),下一个有效的报文就会导致溢出,并且 一个报文会丢失。至于哪个报文会被丢弃,取决于对FIFO的设置:

1、如果禁用了FIFO锁定功能(CAN_MCR寄存器的RFLM位被清’0’),那么FIFO中最后收到的报文就被新报文所覆盖。这样,最新收到的报文不会被丢弃掉。

2、如果启用了FIFO锁定功能(CAN_MCR寄存器的RFLM位被置’1’),那么新收到的报文就被丢弃,软件可以读到FIFO中最早收到的3个报文。

接收中断

一旦往FIFO存入一个报文,硬件就会更新FMP[1:0]位,并且如果CAN_IER寄存器的FMPIE位 为’1’,那么就会产生一个中断请求。 当FIFO变满时(即第3个报文被存入),CAN_RFR寄存器的FULL位就被置’1’,并且如果 CAN_IER寄存器的FFIE位为’1’,那么就会产生一个满中断请求。 在溢出的情况下,FOVR位被置’1’,并且如果CAN_IER寄存器的FOVIE位为’1’,那么就会产生 一个溢出中断请求

标识符过滤

在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符的值决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。

为满足这一需求,在互联型产品中,bxCAN控制器为应用程序提供了28个位宽可变的、可配置的过滤器组(27~0);在其它产品中,bxCAN控制器为应用程序提供了14个位宽可变的、可配置 的过滤器组(13~0),以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件过滤从而占用一定的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和 CAN_FxR1组成。

STM32F1系列一个CAN的只有14个过滤器,如果是其他系列或者有两个CAN的就有28个过滤器

可变位宽

每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:

1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位

2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位

为什么有16位和32位:因为CAN协议标准格式的数据帧ID是11位的,拓展格式的是29位的,当是11位ID就要用16位的过滤器,是29位ID的就用32位过滤器

屏蔽位模式(就相当于通配符,通配符位置的ID就不用关心,不是的就要匹配)

在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照 “必须匹配”或“不用关心”处理。

标识符列表模式(给出ID列表,需完全匹配)

在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一 个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。

通过CAN_FMR的FBMx位,可以配置对应的屏蔽/ 标识符寄存器的标识符列表模式或屏蔽位模式。

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式(通配符)

为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式(ID列表)

应用程序不用的过滤器组,应该保持在禁用状态。

在这里插入图片描述

2个16位标识符屏蔽模式的过滤器可以过滤两个ID,4个16位标识符列表的过滤器可以过滤4个ID

过滤器优先级

根据过滤器的不同配置,有可能一个报文标识符能通过多个过滤器的过滤;在这种情况下,存放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定:

● 位宽为32位的过滤器,优先级高于位宽为16位的过滤器

● 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式

● 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高

在这里插入图片描述

上面的例子说明了bxCAN的过滤器规则:

在接收一个报文时,其标识符首先与配置在标识符列表模式下的过滤器相比较;如果匹配上,报文就被存放到相关联的FIFO中,并且所匹配的过滤器的序号被存入过滤器匹配序号中。如同例子中所显示,报文标识符跟#4标识符匹配,因此报文内容和FMI4被存入FIFO。

如果没有匹配,报文标识符接着与配置在屏蔽位模式下的过滤器进行比较。 如果报文标识符没有跟过滤器中的任何标识符相匹配,那么硬件就丢弃该报文,且不会对软件有任何打扰。

位时间特性

CAN总线的位时序分为了同步段(SS)、传播时间段(PTS)、相位缓冲段 1(PBS1)和相位缓冲段 2(PBS2),STM32的CAN只分为了同步段(SYNC_SEG)时间段1(BS1)时间段2(BS2)时间段1包含了传播时间段和相位缓冲段1,时间段2对应相位缓冲段2

波特率计算公式如下

在这里插入图片描述

bxCAN中断

bxCAN占用4个专用的中断向量。通过设置CAN中断允许寄存器(CAN_IER),每个中断源都可以单独允许和禁用。

下面是发送中断和接收中断,还有一些错误中断可看参考手册

在这里插入图片描述

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

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

相关文章

第五次作业:修改redis的配置文件使得windows的图形界面客户端可以连接redis服务器

1. 安装 Redis 依赖 Redis 是基于 C语言编写的,因此首先需要安装 Redis 所需要的 gcc 依赖: yum install -y gcc tcl 2、上传安装文件 将下载好的 redis-6.2.7.tar.gz 安装包上传到虚拟机的任意目录(一般推荐上传到 /usr/local/src目录&am…

3.基于分割的文本检测算法--DBNet++

文章目录1.概况2.DBNet中的主要方法2.1 网络结构2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF)3.ASF模块的源码实现参考资料欢迎访问个人网络日志🌹🌹知行空间🌹🌹 1.概况 2022年02月份论文:Real-Time S…

对比yolov4和yolov3

目录 1. 网络结构的不同 1.1 Backbone 1.1.1 Darknet53 1.1.2 CSPDarknet53 1.2 Neck 1.2.1 FPN 1.2.2 PAN 1.2.3 SPP 1.3 Head 2. ​​​​​数据增强​​​​​ 2.1 CutMix 2.2 Mosaic 3. 激活函数 4. 损失函数 5. 正则化方法 知识点 记录备忘。 总体而言&…

云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM

前言: FusionCompute架构 (CNA、VRM) CNA(ComputingNode Agent):计算节点代理VNA虚拟节点代理,部署在CNA上,实施计算、存储、网络的虚拟化的配置管理。VRM(Virtual Resource Manager):虚拟资源管理器 VNA可以省略不安装 本次实验使用的是V…

关于客户背景调查的两个案例,说下我的真实看法

这篇文章我只是想客观陈述下事实,并没有对他人的贬低与对自己的吹捧之意。只是想通过这样两件小事,传递出来一个观点:在外贸业务开发过程中,很多时候正是那些我们内心抗拒,不愿意沉下心去做的事,才给了我们…

关于vue3生命周期的使用、了解以及用途(详细版)

生命周期目录前言组合式写法没有 beforeCreate / created 生命周期,并且组合式写生命周期用哪个先引哪个beforeCreatecreatedbeforeMount/onBeforeMountmounted/onMountedbeforeUpdate/onBeforeUpdateupdated/onUpdatedbeforeUnmount/onBeforeUnmountunmounted/onUn…

数据库及缓存之MySQL(一)

思维导图 常见知识点 1.mysql存储引擎: 2.innodb与myisam区别: 3.表设计字段选择: 4.mysql的varchar(M)最多存储数据: 5.事务基本特性: 6.事务并发引发问题: 7.mysql索引: 8.三星索引&#xf…

常见的分类算法及分类算法的评估方法

文章目录贝叶斯分类法(Bayes)决策树(Decision Tree)支持向量机(SVM)K近邻(K-NN)逻辑回归(Logistics Regression)线性回归和逻辑回归的区别神经网络&#xff0…

JavaWeb12-线程通讯(线程等待和唤醒)

目录 1.方法介绍 1.1.wait()/wait(long timeout):让当前线程进入等待状态。 1.1.1.wait执行流程 1.1.2.wait结束等待的条件 1.1.3.wait() VS wait(long timeout) 1.1.4.为什么wait要放在Object中? --->PS:wait(0) 和 sleep(0) 的区…

算法训练营 day52 动态规划 买卖股票的最佳时机系列1

算法训练营 day52 动态规划 买卖股票的最佳时机系列1 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣(LeetCode) 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票…

VR全景多种玩法打破传统宣传,打造全新云端视界

传统的展示方式只是在进行单方面的表达,不论是图片、视频,都无法让浏览者有参与感,这样的展示宣传效果自然比不上VR全景展示,VR全景基于真实场景来形成三维图像,其沉浸式和无视野盲区的特点让用户更有真实感和沉浸感&a…

python -- 魔术方法

魔术方法就算定义在类里面的一些特殊的方法 特点:这些func的名字前面都有两个下划线 __new__方法 相当于一个类的创建一个对象的过程 __init__方法 相当于为这个类创建好的对象分配地址初始化的过程 __del__方法 一个类声明这个方法后,创建的对象如果…

九龙证券|创业板向未盈利企业敞开大门 考验投行估值定价能力

未盈余企业上市有了新选择。2月17日,全面实行股票发行注册制相关准则规矩发布施行。深交所发布《深圳证券交易所创业板股票上市规矩(2023年修订)》及《关于未盈余企业在创业板上市相关事宜的告诉》,“预计市值不低于50亿元&#x…

设计模式C++实现23:中介者模式(Mediator)

部分内容参考大话设计模式第25章;本实验通过C语言实现。 一 原理 意图:用一个中介对象来封装一系列对象的交互,中介者使得各个对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互。 上下文…

OCR项目实战(一):手写汉语拼音识别(Pytorch版)

👨‍💻作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 🎉专栏推荐: 目前在写一个CV方向专栏,后期会更新不限于…

git merge和git rebase命令

参考链接:https://www.cnblogs.com/michael-xiang/p/13179837.html 学习背景:已经学习过git,但是实践较少,未和他人协作 1.merge git merge表示把当前分支合并到版本库中下拉的远程分支上。 git merge A B表示把A分支合并到B上…

DACS: Domain Adaptation via Cross-domain Mixed Sampling 学习笔记

DACS介绍方法Naive MixingDACSClassMix![在这里插入图片描述](https://img-blog.csdnimg.cn/ca4f83a2711e49f3b754ca90d774cd50.png)算法流程实验结果反思介绍 近年来,基于卷积神经网络的语义分割模型在众多应用中表现出了显著的性能。然而当应用于新的领域时&…

2250216-92-1,Propargyl-PEG3-triethoxysilane,炔基-三聚乙二醇-三乙氧基硅烷,具有高效稳定和特异性

【中文名称】炔基-三聚乙二醇-三乙氧基硅烷【英文名称】 Propargyl-PEG3-triethoxysilane【结 构 式】【CAS号】2250216-92-1【分子式】C19H37NO7Si【分子量】419.59【基团部分】炔基基团【纯度标准】95%【包装规格】1g,5g,10g,可以提供核磁图…

Zebec生态持续深度布局,ZBC通证月内翻倍或只是开始

“Zebec生态近日利好不断,除了推出了回购计划外,Nautilus Chain、Zebec Labs等也即将面向市场,都将为ZBC通证深度赋能。而ZBC通证涨幅月内突破100%,或许只是开始。”近日,流支付生态Zebec生态通证ZBC迎来了大涨&#x…

计算机网络的166个核心概念,你知道吗?

上回我整理了一下计算机网络中所有的关键概念,很多小伙伴觉得很有帮助,但是有一个需要优化的点就是这些概念不知道出自哪里,所以理解起来像是在云里穿梭,一会儿在聊应用层的概念,一会儿又跑到网络层协议了。针对这种情…