stm32 can协议实战

2023-11-13

参考的为野火的教程(开发板是指南者,只能做回环测试,但是没关系,主要是记录can协议的用法和can外设,canopen协议写完了can协议再说。

一、理论部分

1 can协议的介绍

首先介绍一下can、如图,只是介绍一下背景。

2、can物理层

和iic和spi这些不一样,can是异步通讯,然后最后通过转换转换为差分信号,但是和modbus不一样,他不是直接通过串口转差分就能用了,使用的不是串口协议,而是做了一些处理,最后形成了can协议,然后can分为开环和闭环两种下面会讲到

1)闭环通讯

一般使用闭环总线:速度快 1M,左右必须接一个120欧的电阻形成闭环,这个不管你有几个设备只用在左右两个设备接入就行了。

 2)开环通讯

在总线上加上两个2.2千欧的电阻就行,但是速度比较慢,只有125kbps最快但是距离长,可能can协议本来就是车机用的比较多,所以赶紧拉长线的工业用的可能是modbus比较多。

 3 通讯节点

 can不对设备编码,而是对数据编码(以前学的iic、spi、modbus都是设备进行编码),所以节点数不受限制。

can也需要一个收发器:协议归协议、我们还是需要收发器将TTL电平转换为差分信号输出,或者将收到的差分信号转为ttl电平读回来。转换规则后面再说。

4 什么是差分信号

差分在模拟电子技术中叫的是差模信号,主要就是 减小噪声(也就是干扰)具体就是信号取这两根线的差值(并且由于这两根线挨的很近所以两根线基本上会一起收到干扰信号会一起发生变化)

从图中可以看出差分信号是由两个信号的差决定的

这是具体的优点描述,可以看一下,和我刚刚说的差不多,只不过很具体。

 5  can协议中的差分信号

很明显就是压差为0(can为隐性电平)压差为2v 为显性电平 (高速情况下,低速看表同理

 在can协议中,显性电平会更具有优先级,先发起通讯的设备优先级更高,但是如果是同一时间发起的那就需要靠电平判断优先级了(这个优先级在后面ID号和决定ID是否为扩展的那一位有使用到

can是半双工,收发数据得分时进行,并且同一时刻只能有一个发送(前面的判断优先级,如果仲裁结束,优先级低的设备就会自己变为接收,仲裁完之后获得发送权的信息才能发送)

 5 协议层

1) 波特率及位时序

异步通讯没有时钟线,都会像串口一样有一个波特率,根据每个设备的波特率来协调设备的传输,

在设备传输的过程中可能会有干扰和误差,即使两个设备都是9600这种波特率,可能也会有一个变为9601之类的,这时候数据接收就会可能错位(设备采集数据大多是固定的采样点)在串口中也通过一些硬件的方式来规避采样点错位了,这个我在串口章节有写,stm32f103系列USART串口收发(单字节_stm32 usart 接收_是小刘不是刘的博客-CSDN博客

串口也会有检测起始帧之类的操作通过多次采集数据来判断是否真的是起始位到来,以此来规避出现错位的可能,can也有在can里面叫做位同步可能这里要麻烦一点。

 2)每一位的时序分解图

can把每一位分为了4个段,SS、PTS、PBS1、PBS2在位里会有一个时间单位叫tq,SS固定1tq,PTS、PBS1、PBS2不固定可以自己配置,采样将会在PBS1结束后采集。

 SS(这4个介绍很抽象不会理解,后面会说具体对齐方式)

叫做同步段,主要是检测跳变沿是否在这个SS段内,如果在这个SS段内就不进行任何的操作,否则就会做一些处理。(固定1tq

 PTS

1-8tq,补偿网络物理延时时间

 PBS1 

补偿边沿阶段的误差

 PBS2

补偿边沿阶段误差

 通讯的波特率

 同步的过程

前面光写这几个名词很抽象,这里会具体介绍

 1、硬同步

总线出现了起始帧,但是没有包含在ss内,这个时候字节硬同步

二 stm32的can外设

先鸽几天把dma和adc dac写完再写modbus和can

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32 can协议实战 的相关文章

  • 游戏盾原理和优势

    什么是游戏盾呢 游戏盾是DDoS高防IP产品系列中针对游戏行业的安全解决方案 游戏盾专为游戏行业定制 针对性解决游戏行业中复杂的DDoS攻击 游戏CC攻击等问题 目前以对抗的形式存在的高防产品形态 也就是防御带宽要大于攻击者的流量 游戏盾有
  • 最大熵算法及简单例子

    最近在学模式识别 正在看Introduction to Pattern Recognition这本书 挺不错的一本书 好 下面和大家一起来学习最大熵算法 首先 最大熵算法是干什么的呢 一般是用来估计一个分布 至于把分布估计出来之后用来干什么
  • 程序员必备的画图工具

    作者 CUGGZ 来源 前端充电宝 XMind 是一个跨平台的思维导图软件 具有多种结构样式 除了普通的思维导图 还包括树形图 逻辑图 鱼骨图 时间轴 树状表格等等 不同的结构样式可以自由组合混用 同时支持一键更换结构样式 最近经常有小伙伴
  • 编译安装 Nginx 提示:/configure: error: C compiler cc is not found

    问题产生背景 反向代理服务器需要增加探活功能 需要对前置nginx 进行重新编译安装第三方模块 发现在编译安装配置时候一直过不去 百度查询过很多解决办法 基本都是没有安装好编译环境之类的说法 但是在确定编译环境所涉及的包全部都安装以后 还是

随机推荐

  • idea必备开发插件.

    1 lombok 支持lombok的各种注解 从此不用写getter setter这些 可以把注解还原为原本的java代码 非常方便 https plugins jetbrains com plugin 6317 lombok plugin
  • 2022 RoboCom 世界机器人开发者大赛-本科组(省赛)-RC-u5 树与二分图

    2022 RoboCom 世界机器人开发者大赛 本科组 省赛 RC u5 树与二分图 文章目录 2022 RoboCom 世界机器人开发者大赛 本科组 省赛 RC u5 树与二分图 题目描述 输入格式 输出格式 输入样例 输出样例 思路 A
  • 感知机分类学习

    感知机 perceptron 是一种二类分类的线性分类模型 也就是说 使用于将数据分成两类的 并且数据要线性可分的情况 线性可分是指存在一个超平面能够将空间分成两部分 每一部分为一类 感知机的目的就在于找这样的一个超平面 假设输入数据形式为
  • pandas入门

    pandas is a fast powerful flexible and easy to use open source data analysis and manipulation tool 一 读取文本文件中的数据 导入pandas
  • Python之创建多级菜单

    方法一 usr bin env python coding utf 8 Time 2021 11 25 19 09 Author Argonaut FileName 创建多级菜单 py 功能 可进可退的功能菜单 while True pri
  • 将C盘和桌面所在的E盘合并分区后,出现的路径问题解决方案

    问题一 开机时出现警告 由于启动计算机时出现页面配置问题 Windows在您的计算机上创建了一个临时页面文件 所有的磁盘驱动器的总页面大小可能稍大于您所指定的大小 解决方案 照着做就行 问题二 Windows 10系统开机显示 位置不可用C
  • shell脚本整段注释

    摘自 http zhidao baidu com link url XmCCZmfluRe6n8TjPRKJTx4GGOUPSGX1VNBm euqGdpKGpveTESxC0HL90UBNT5nZCvmvfq2oIJdP3JO5EoPSq
  • STM32关于PVD低电压能检测的知识

    在实际工程运用中需要对突发情况作出及时的相应 通常都需要考虑当系统电压下降或断电时 需要对控制系统加以保护 这时候就需要在程序中加入系统电压监测 PVD 供电电压降低到某一个电压值时 需要系统进入保护状态 执行紧急关闭任务 对系统数据进行保
  • DDR基础知识点汇总

    文章目录 文档推荐 DDR颗粒的电路图来源 DDR3 SDRAM电路结构高清图 DDR4 SDRAM电路结构高清图 DDR3 1866控制器 PHY 颗粒之间的带宽关系 channel gt DIMM gt rank gt chip gt
  • docker镜像中配置文件的修改

    docker镜像中配置文件的修改 需要修改docker里面的配置文件时 因为docker镜像里面没有vim 下载也比较麻烦 可以使用 docker cp docker镜像名 想要修改的文件的路径 想要复制到的路径 将镜像中的文件复制到镜像外
  • ARM芯片开发(S5PV210芯片)——定时器、看门狗、RTC

    1 计数器 计数器就是每隔一段固定的时间计数值就加一 于是我们可以根据计数值来计算时间 经过的时间 计数值x计数时间间隔 2 定时器 2 1 定时器介绍 定时器具有计时的功能 类似于我们手机自带的倒计时功能 比如我们先给定时器设置计时一小时
  • 从瀑布到敏捷——漫画解读软件开发模式变迁史

    网址 https www tapd cn forum view 36971 从文章中可知 1 瀑布模型 将客户隔绝在外并按顺序逐一完成的模式 从时间上来说 只有等上一交付件完成了 下一阶段才能开始是一种浪费 特点 文档驱动 单道生产 2 敏
  • JVM--基础--21--对象的内存布局

    JVM 基础 21 对象的内存布局 1 普通对象实例与数组对象实例的数据结构图 2 在HotSpot虚拟机中 对象在内存中存储的布局如下 2 1 对象头 Header 2 1 1 markword 用于存储对象自身的运行时数据 如哈希码 H
  • 递增二叉树-网易游戏

    递增二叉树 网易游戏 题目描述 给定一个二叉树 每个节点有一个正整数权值 若一棵二叉树 每一层的节点权值和都严格小于下一层的结点权值和 责成这棵二叉树为递增二叉树 现在给你一棵二叉树 你需要判断其是不是一棵递增二叉树 输入描述 输入的第一行
  • Redis的数据结构之bitmap

    背景 项目开发过程中 我们经常会使用boolean类型来存储数据 例如记录用户每天签到 签到了是1 没签则为0 如果我们需要统计一年内的签到数 如果采用String来存储 需要每个用户都要记录 365次 当用户数量非常大时 需要的存储空间非
  • Docker基础入门:镜像、容器导入导出与私有仓库搭建

    Docker基础入门 镜像导入导出与私有仓库搭建 一 Docker镜像 容器的导入和导出 1 1 Docker镜像的导出 1 2 Docker镜像的载入 1 3 Docker容器的导出 1 4 Docker容器的导入 二 镜像和容器导出和导
  • MPEG-1中I、B、P帧的基本编码原理

    在上篇文章中 我们对MPEG 1有了一个轮廓性的介绍 知道视像序列中的图像类型有三种 分别为I帧 P帧 和B帧 但是我们并没有更深入的去了解 编码这三种类型的图像数据时所采用的不同方式 只知道它们都是把图像分为以16x16像素的宏块 8x8
  • Java虚拟机14:Java对象大小、对象内存布局及锁状态变化

    一个对象占多少字节 关于对象的大小 对于C C 来说 都是有sizeof函数可以直接获取的 但是Java似乎没有这样的方法 不过还好 在JDK1 5之后引入了Instrumentation类 这个类提供了计算对象内存占用量的方法 至于具体I
  • windows下安装jupyter,出现问题SyntaxError: invalid syntax

    windows下安装jupyter SyntaxError invalid syntax 问题 解决方法 进入jupyter 问题 解决方法 推出python 直接在cmd 下执行安装命令 虽然问题解决了 但是觉得很奇怪 不应该是在pyth
  • stm32 can协议实战

    参考的为野火的教程 开发板是指南者 只能做回环测试 但是没关系 主要是记录can协议的用法和can外设 canopen协议写完了can协议再说 一 理论部分 1 can协议的介绍 首先介绍一下can 如图 只是介绍一下背景 2 can物理层