STM32 高级 物联网通信之CAN通讯

news/2024/12/22 15:31:02 标签: stm32, 物联网, 嵌入式硬件

目录

CAN通讯介绍

物理层

协议层

CAN的帧(报文)种类

1 数据帧(发送单元->接受单元)

2 远程帧(接受单元->发送单元)

3 错误帧(发送方发送数据错误会发送的状态帧)

4 过载帧(接收方放不下会发送到的状态帧)

5 帧间隔(状态)

数据帧介绍

远程帧介绍

CAN总线仲裁

CAN的位时序

STM32的CAN外设

CAN外设(CAN控制器)介绍

CAN控制器的3种工作模式

CAN控制器的3种测试模式

功能框图

主动内核

发送邮箱

接收FIFO

接收滤波器(过滤器)

STM32中 CAN的位时序


CAN通讯介绍

参考:CAN协议|Kvaser中文官网免费CAN协议教程

CAN(Controller Area Network 控制器局域网,简称CAN或者CAN bus)是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。

它基于消息传递协议(给消息添加了类型),设计之初在车辆上复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。

CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。

物理层

CAN网络节点

一个CAN控制器:

  • 一般由MCU提供,STM32内部提供了一个CAN控制器

一个CAN收发器:

  • 收发器一般需要专门芯片提供。这里采用PD1050收发器芯片

控制器和收发器之间通过CAN_Tx及CAN_Rx信号线相连。

收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。

  • 这两根线做一个差值来表示收发和发

流程:

  • 发数据:。。。

  • 收数据:。。。

CAN总线网络

  • 闭环总线网络:遵循ISO 11898标准的高速短距离,最高传输距离40m,通讯速度最高为1Mbps,总线两端要求有一个120Ω的电阻。

  • 开环总线网络:遵循ISO11519-2标准的低速、远距离。最高传输距离1Km,通讯速度最高为125Kbps,两根总线串联两个2.2KΩ的电阻。

差分信号:

  • 两根信号线:振幅相同,相位相反,然后进行相减,

  • 再电路板要求:差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线。

  • 优点:抗干扰能力强。能有效抑制电磁干扰(EMI)

  • 缺点:差分信号一定要走两根等长、等宽、紧密靠近、且在同一层面的线。对电路板比较小,走线比较紧张的情况下,给布线带来挑战。差分信号线具有这些优点,在 USB 协议、485 协议、以太网协议及 CAN 协议的物理层中,都使用了差分信号传输。

  • 举例

  • 逻辑1(隐性电平)

    • CAN_High =CAN_Low = 2.5V

    • 电压差 VH-VL=0V

  • 逻辑 0 (显性电平)

    • CAN_High=3.5V,CAN_Low =1.5V

    • 电压差为 VH-VL=2V

协议层

CAN的帧(报文)种类

CAN总线是广播类型的总线。这意味着所有节点都可以侦听到所有传输的报文。无法将报文单独发送给指定节点;所有节点都将始终捕获所有报文。但是CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应。

CAN使用短报文,最大实用负载是94位。报文中没有任何明确的地址;相反,可以认为报文是通过内容寻址,也就是说,报文的内容隐式地确定其地址。

CAN总线上有5种不同的报文类型(或“帧”):数据帧、远程帧、错误帧、过载帧和帧间隔。

1 数据帧(发送单元->接受单元)

数据帧是最常见的报文类型,用于发送单元向接收单元发送数据。

2 远程帧(接受单元->发送单元)

远程帧用于接收单元向具有相同id的发送单元请求发送数据。

3 错误帧(发送方发送数据错误会发送的状态帧)

错误帧当检测出错误时向其他单元通知错误的帧。


http://www.niftyadmin.cn/n/5795480.html

相关文章

【贪心】力扣3218. 切蛋糕的最小总开销 I

有一个 m x n 大小的矩形蛋糕,需要切成 1 x 1 的小块。 给你整数 m ,n 和两个数组: horizontalCut 的大小为 m - 1 ,其中 horizontalCut[i] 表示沿着水平线 i 切蛋糕的开销。 verticalCut 的大小为 n - 1 ,其中 vert…

WeakAuras NES Script(lua)

WeakAuras NES Script 修星脚本字符串 脚本1:NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…

VMWare 的克隆操作

零、碎碎念 VMWare 的这个克隆操作很简单,单拎出来成贴的目的是方便后续使用。 一、操作步骤 1.1、在“源”服务器上点右键,选择“管理--克隆” 1.2、选择“虚拟机的当前状态”为基础制作克隆,如下图所示,然后点击“下一页” 1.3、…

梳理你的思路(从OOP到架构设计)_简介设计模式

目录 1、 模式(Pattern) 是较大的结构​编辑 2、 结构形式愈大 通用性愈小​编辑 3、 从EIT造形 组合出设计模式 1、 模式(Pattern) 是较大的结构 组合与创新 達芬奇說:簡單是複雜的終極形式 (Simplicity is the ultimate form of sophistication) —Leonardo d…

前端如何将pdf等文件传入后端

我们知道在js中我们可以通过&#xff1a; <input type"file" name"file" id"fileInput" accept"image/*">来输入文件。其中type指后端url&#xff0c;accept来限制传入类型。 前端通过表单形式将其传入后端 那么前端是怎么将…

在Excel中如果制作可以自动填充的序号,删除或者合并单元也可用

大家好&#xff0c;我是小鱼。在日常的办公中有时需要制作带序号的表格&#xff0c;这样可以通过序号来直观地看到有多少条信息&#xff0c;但是如果普通的批量添加序号的话&#xff0c;一旦我们删除或者合并某几行数据&#xff0c;前面的序号不会自动更新&#xff0c;序号显示…

在 Ubuntu 下通过 Docker 部署 PSQL 服务器

嗨&#xff0c;各位技术爱好者&#xff01;今天我们要聊的是如何在 Ubuntu 系统中通过 Docker 部署 PostgreSQL&#xff08;简称 PSQL&#xff09;服务器。对于那些还不熟悉 Docker 和 PSQL 的小伙伴&#xff0c;Docker 是一个开源的容器化平台&#xff0c;可以让你轻松构建、部…

Python毕业设计选题:基于Python的农产品销售系统的设计与实现_django

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 商家管理 产品类型管理 商家功能界面 系统首页…