CAN总线学习(STM32的CAN寄存器使用)(笔记二)

CAN总线基础基础知识的文章:CAN总线学习(CAN总线基础知识)(笔记一)-CSDN博客

        在前面CAN总线基础知识和报文中介绍的是报文内容是比较全面的,STM32在CAN协议的基础上做了一些简单的简化,例如下图中减去了SRR标志位等,以及将位时间中的“传播段”和“相位缓冲段1”合并在了一起等等,下面将进行介绍。

一、stm32的CAN协议使用

        本次以stm32f407zet6芯片为例,使用的ISO11898标准的CAN协议,使用的是500Kbps 的通信速率,也就是快速CAN的通讯协议,协议的电平如下图所示:

        显性电平: 3.5V-1.5V = 2V

        隐形电平: 2.5V-2.5V = 0V

        stm32f407zet6的CAN的外设在网络的5层模型中,处于物理层和数据链路层。物理层主要是CAN接口的差分数据发送器和接收器等,数据链路层主要是对CAN报文的过滤,以及数据的CAN数据的打包等,与电脑的网卡有相似之处。

        上一篇文章已经讲述了标准CAN协议的讲解,下面将针对stm32的CAN协议进行分析,主要分析CAN的标准数据报文和扩展数据报文。

(1)扩展帧和标准数据帧的帧起始(相同)

       标准帧和扩展帧都是由 1 个位显性电平表示帧起始,(CAN_H: 3.5v, CAN_L: 1.5v,逻辑电平:0)。

        注意:因为起始的逻辑电平是低电平,CAN总线的空闲的时候的电平必须是高电平,这就需要CAN总线的输出引脚有上拉电阻。

        注意:(1)本次实验使用正点的STM32F4探索者,板子的CAN发射器使用“TJA1050”芯片,该芯片的CAN_L和CAN_H在空闲状态都是高电平的。(2)STM32F4芯片的CAN_TX和CAN_RX是对应的GPIO的外设,要设置为上拉模式。

        注意:STM32F4的CAN控制器发送给CAN接收器的信号是TTL电平信号,就理解为与串口信号相似的信号就可以,并且如下图所示的,发送引脚电平直接连接到接收引脚,这个是物理上的连接,所以CAN控制器通过CAN_TX发送数据的时候,会直接发送到外部和CAN_RX引脚,使用逻辑分析仪抓取波形的时候,两个引脚上抓取的电平是一样的。CAN控制器使用普通模式还是回环模式,两者的配置是通过CAN控制器接收端是否接收发送端发送的数据进行选择配置的。

       下面是逻辑分析仪抓取到的CAN控制的“帧起始”信号:

        下面是逻辑分析仪抓取到的CAN收/发器(TJA1050)的电平信号:

(2)扩展帧和标准数据帧的仲裁段(不同)

        表示数据优先级的段,CAN协议中仲裁段:标准数据帧(12位),扩展数据帧(32位)。stm32的仲裁帧也是使用的下面的格式。 

        (1)标准帧:RTR(用于标识是否是远程帧(0,数据帧;1,远程帧)),ID(11位)。

        (2)扩展帧:SRR(代替远程请求位),IDE(标识符选择位(0, 使用标准标识符;1,使用扩展标识符)),RTR,ID(29位)。

        下面是逻辑分析仪抓取到的“CAN控制器”的CAN_TX引脚的仲裁段:

        下面是逻辑分析仪抓取到的“CAN收/发射器”的CAN_L引脚的仲裁段:

(3)扩展帧和标准数据帧的控制端(不同)

        如下图所示的,标准帧和扩展帧的控制端是不同的,stm32的CAN控制帧与下面的是一样的。

        (1)标准帧:IDE(标识符选择位(0, 使用标准标识符;1,使用扩展标识符)),R0(保留位,显性电平发送),DLC(发送或者接收的数据长度)。

        (2)扩展帧:R1(保留位,显性电平发送)、R0(保留位,显性电平发送)、DLC(发送或者接收的数据长度)。

        下面是逻辑分析仪抓取到的“CAN控制器”的控制端报文:

        下面是逻辑分析仪抓取到的“CAN收发器端”的控制端报文:

(4)扩展帧和标准数据帧的数据段(相同)

        扩展帧和标准数据帧的数据段都是一样的,如下图所示:

注意:该段可以包含0~8个字节的数据,发送数据采用MSB方式,也即先发送高位。

        下面是逻辑分析仪抓取到的波形,这里发送的是“aaaaaa”:

(5)扩展帧和标准数据帧的CRC校验段(相同)

        扩展和标准数据帧的CRC校验段是一样的,如下所示:

        注意:STM32这部分校验是CAN控制器完成的,不需要用户进行配置,直接使用即可。

        此段 CRC 的值计算范围包括:帧起始、仲裁段、控制段、数据段。接收方以同样的算法计
CRC 值并进行比较,不一致时会通报错误。

        下面是逻辑分析仪抓取到的波形:

(6)扩展帧和标准数据帧的ACK端(相同)

        扩展和标准数据帧的ACK段是一样的,如下图所示:

注意:(1)ACK界定符始终为隐形位,逻辑电平1。

           (2)发送数据的时候,ACK为隐形位,逻辑电平1。

           (3)接收到数据,应答返回的时候,报文中没有数据段,ACK槽中为显性位,逻辑电平0.

        下面是逻辑分析仪抓取到的电平:

(7)扩展帧和标准数据帧的帧结束(相同)

        扩展和标准数据帧的“帧结束”是一样的,都是“7个隐形位”组成。

注意:CAN总线上的IC需要进行发送数据的时候,需要判断CAN总线是否空闲。就是通过检测总线上是否有连续的7个隐形位(高电平),有的话就尝试占用CAN总线,然后经过仲裁段仲裁之后,占用CAN总线。

         下面是逻辑分析仪抓取的波形:

二、stm32的CAN寄存器的功能划分及介绍

2.1、STM32F4的CAN基础知识介绍

        (1)如下图所示,STM32F4有两个CAN控制器,一个主CAN控制器,一个副CAN控制器。

        (2)CAN的发送邮箱有一个,具有三级深度的发送邮箱,也就是有三个相同的存储发送数据的寄存器,可以不全使用。

        (3)CAN的接收邮箱有两个(FIFO0、FIFO1),每个也都有三级深度,每个邮箱有三个接收形式的数据缓冲区,如果用户发送的数据过长,使用邮箱的多级存储,触发多次中断。

        (4)CAN的工作模式有下面三种:静默模式、回环模式、静默和回环结合的模式以及正常模式。发送引脚是连接到接收引脚的,这个是物理上的连接。

        (5) 下图是STM32的CAN网络拓扑结构

2.2、STM32F4的CAN寄存器介绍

        STM32F4的CAN的寄存器按功能可以分为四种:主控制类寄存器、邮箱发送寄存器、FIFO接收寄存器、CAN筛选器寄存器

        STM32F4寄存器手册将寄存器划分为四类:CAN控制器和状态寄存器CAN邮箱寄存器CAN筛选器寄存器。如下图所示:

2.3、STM32F4的CAN外设配置介绍

        (1)STM32F407ZET6只有CAN控制器,没有CAN收发器,开发板使用TJA1050作为CAN收发器。

        (2)CAN外设的配置流程:CAN主控制器的配置->CAN时序寄存器配置->CAN过滤器的配置。

        (3)CAN发送数据需要对FIFO相关的发送寄存器进行配置

        (4)CAN接收在初始化的时候已经配置了过滤器,只需要配置中断,或者不使用中断,中断中读取FIFO相关接收数据寄存器

注意:CAN寄存器主控制器的初始化配置,过滤器的配置都是需要寄存器设置,进入初始化模式之后才能配置,配置完成之后,寄存器退出初始化模式,进入正常模式,配置的寄存器就起作用啦。

2.4、STM32F4的CAN外设的时钟

        STM32F4地CAN1外设挂载在APB1总线上,如下图所示,APB1总线的最大时钟速率为42MHz,所以CAN1外设的时钟频率就是42MHZ。

2.5、STM32F4的CAN外设的位定时与同步

        CAN协议中位定时与同步主要有如下图所示的四个时间段:同步段、传播段、相位缓冲段1、相位缓冲段2。这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成,对于STM32F4来说,就是APB1总线的时钟频率经过分频之后得到的频率的倒数,就为Tq时间。

        STM32F4 把传播时间段和相位缓冲段 1STM32F4 称之为时间段 1)合并了,所以 STM32F4 CAN 一个位只有 3 段:同步段(SYNC_SEG)、时间段 1BS1)和时间段 2BS2)。STM32F4 BS1 段可以设置为 1~16 个时间单元,刚好等于我们上面介绍的传播时间段和相位缓冲段 1 之和。

三、stm32的CAN寄存器的配置使用

四、stm32的CAN报文逻辑分析仪抓取分析

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

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

相关文章

softmax实现

import matplotlib.pyplot as plt import torch from IPython import display from d2l import torch as d2lbatch_size 256 train_iter,test_iter d2l.load_data_fashion_mnist(batch_size) test_iter.num_workers 0 train_iter.num_workers 0 num_inputs 784 # 将图片…

【MySQL】-日志系统

一、背景介绍 MySQL中提供了各种各样的日志,每一个日志在不同的阶段有不同的作用,对数据的一致性和正确性得到保障,为数据恢复也提供至关重要的作用,那今天我们一起来讨论讨论MySQL中的各个日志 二、正文 binlog:…

NIO--07--Java lO模型详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 何为 IO?先从计算机结构的角度来解读一下I/o.再从应用程序的角度来解读一下I/O 阻塞/非阻塞/同步/异步IO阻塞IO非阻塞IO异步IO举例 Java中3种常见的IO模型BIO (Blo…

Redis缓存的使用

什么是缓存 缓存就是数据交换的缓冲区,是存储数据的临时地方,一般读写性能较高。 缓存的作用: 降低后端负载提高读写效率,降低响应时间 缓存的成本: 数据一致性成本代码维护成本运维成本 Redis特点 键值型数据库…

C语言之结构体

一.前言引入. 我们知道在C语言中有内置类型,如:整型,浮点型等。但是只有这些内置类 型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体…

Spark经典案例分享

Spark经典案例 链接操作案例二次排序案例 链接操作案例 案例需求 数据介绍 代码如下: package base.charpter7import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, Path} import org.apache.spark.SparkContext import org.a…

四、Zookeeper节点类型

目录 1、临时节点 2、永久节点 Znode有两种,分别为临时节点和永久节点。 节点的类型在创建时即被确定,并且不能改变。 1、临时节点 临时节点的生命周期依赖于创建它们的会话。一旦会话结束,临时节点将被自动删除,

OpenCV-Python:计算机视觉介绍

目录 1.背景 2.计算机视觉发展历史 3.计算机视觉主要任务 4.计算机视觉应用场景 5.知识笔记 1.背景 OpenCV是计算机视觉的一个框架,想要学习OpenCV,需要对计算机视觉有一个大致的了解。计算机视觉是指通过计算机技术和算法来模拟人类视觉系统的能力…

Redis高效缓存:加速应用性能的利器

目录 引言 1. Redis概述 1.1 什么是Redis? 1.2 Redis的特点 2. Redis在缓存中的应用 2.1 缓存的重要性 2.2 Redis作为缓存的优势 2.3 缓存使用场景 3. Redis在实时应用中的应用 3.1 实时数据处理的挑战 3.2 Redis的实时数据处理优势 3.3 实时应用中的Red…

mediapipe+opencv实现保存图像中的人脸,抹去其他信息

mediapipeopencv MediaPipe本身不提供图像处理功能,它主要用于检测和跟踪人脸、手势、姿势等。如果您想要从图像中仅提取人脸主要信息并去除其他信息. # codingutf-8 """project: teatAuthor:念卿 刘file: test.pydate&…

Kubernetes学习笔记-Part.09 K8s集群构建

目录 Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退 第九章 K8s集群构建 9.1.集群初始化 集群初始化是首…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《余电上网/制氢方式下微电网系统全生命周期经济性评估》

该标题涉及到对微电网系统的全生命周期经济性进行评估,其重点关注两种运营方式:余电上网和制氢。以下是对标题的解读: 微电网系统: 微电网是指一种小规模的电力系统,通常包括分布式能源资源(如太阳能、风能…

ES通过抽样agg聚合性能提升3-5倍

一直以来,es的agg聚合分析性能都比较差(对应sql的 group by)。特别是在超多数据中做聚合,在搜索的条件命中特别多结果的情况下,聚合分析会非常非常的慢。 一个聚合条件:聚合分析请求的时间 search time a…

部署springboot项目到GKE(Google Kubernetes Engine)

GKE是 Google Cloud Platform 提供的托管 Kubernetes 服务,允许用户在 Google 的基础设施上部署、管理和扩展容器。本文介绍如何部署一个简单的springboot项目到GKE. 本文使用podman. 如果你用的是docker, 只需要把本文中所有命令中的podman替换成docker即可 非H…

java+springboot物资连锁仓库经营商业管理系统+jsp

主要任务:通过网络搜集与本课题相关的素材资料,认真分析连锁经营商业管理系统的可行性和要实现的功能,做好需求分析,确定该系统的主要功能模块,依据数据库设计的原则对数据库进行设计。最后通过编码实现本系统功能并测…

Linux周期任务

我自己博客网站里的文章 Linux周期任务:at和crontab 每个人或多或少都有一些约会或者是工作,有的工作是长期周期性的, 例如: 每个月一次的工作报告每周一次的午餐会报每天需要的打卡…… 有的工作则是一次性临时的&#xff0…

Prometheus+Grafana搭建日志采集

介绍 一、什么是日志数据采集 日志数据采集是指通过各种手段获取应用程序运行时产生的各类日志信息,并将这些信息存储到特定的地方,以便后续分析和使用。通常情况下,这些日志信息包括系统运行状态、错误信息、用户操作记录等等。通过对这些…

牛客算法题 【HJ97 记负均正】 golang实现

题目 HJ97 记负均正 描述 首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。 0即不是正整数,也不是负数,不计入计算。如果没有正数,则平均…

大文件分片上传、分片进度以及整体进度、断点续传(一)

大文件分片上传 效果展示 前端 思路 前端的思路&#xff1a;将大文件切分成多个小文件&#xff0c;然后并发给后端。 页面构建 先在页面上写几个组件用来获取文件。 <body><input type"file" id"file" /><button id"uploadButton…