首页 > 其他分享 >初学STM32 CAN通信(一)

初学STM32 CAN通信(一)

时间:2024-03-22 21:12:29浏览次数:20  
标签:信号线 总线 通信 差分 Tq STM32 初学 信号 节点

# 初学STM32 CAN通信(一)

1. CAN协议简介

​ CAN是控制器局域网络(Controller Area Network)的简称, 是国际上应用最广泛的现场总线之一 ,近年来,它具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强及振动大的工业环境。

​ 与I2C、 SPI等具有时钟信号的同步通讯方式不同, CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_HighCAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。

CAN物理层的形式主要分为闭环总线开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。

image-20240322201908950

​ CAN总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于CAN通讯协议不对节点进行地址编码,而是对数据内容进行编码,所以网络中的节点个数理论上不受限制,只要总线的负载足够即可,可以通过中继器增强负载。

​ CAN通讯节点由一个CAN控制器及CAN收发器组成,控制器与收发器之间通过CAN_Tx及CAN_Rx信号线相连,收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。其中CAN_Tx及CAN_Rx使用普通的类似TTL逻辑信号,而CAN_High及CAN_Low是一对差分信号线,使用比较特别的差分信号。

​ 当CAN节点需要发送数据时,控制器把要发送的二进制编码通过CAN_Tx线发送到收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线CAN_High和CAN_Low线输出到CAN总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的CAN_High及CAN_Low信号转化成普通的逻辑电平信号,通过CAN_Rx输出到控制器中。

2. 差分信号

差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1。

image-20240322202532142

相对于单信号线传输的方式,使用差分信号传输具有如下优点:
抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。
能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。
时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通单端信号依靠高低两个阈值电压判断,因而受工艺,温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号的电路。
由于差分信号线具有这些优点,所以在USB协议、 485协议、以太网协议及CAN协议的物理层中,都使用了差分信号传输

CAN协议中的差分信号
CAN协议中对它使用的CAN_High及CAN_Low表示的差分信号做了规定。以高速CAN协议为例,当表示逻辑1(隐性电平), CAN_High和CAN_Low线上的电压均为2.5v,即它们的电压差VH - VL=0 V;而表示逻辑0时(显性电平), CAN_High的电平为3.5V, CAN_Low线的电平为1.5V,即它们的电压差为VH - VL=2 V。

image-20240322202818228

3. 位时序

​ 由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯,特别地, CAN还会使用“位同步”的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。

​ 为了实现位同步, CAN协议把每一个数据位的时序分解成SS段、 PTS段、PBS1段、 PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,而一个完整的位由8~25个Tq组成。

image-20240322203323778

​ 图中表示的CAN通讯信号每一个数据位的长度为19 Tq,其中SS段占1 Tq,PTS段占6 Tq, PBS1段占5 Tq, PBS2段占7 Tq。信号的采样点位于PBS1段与PBS2段之间,通过控制各段的长度,可以对采样点的位置进行偏移,以便准确地采样 。

SS段(SYNC SEG)
SS译为同步段,若通讯节点检测到总线上信号的跳变沿被包含在SS段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到的总线电平即可被确定为该位的电平。 SS段的大小固定为1 Tq。

• PTS段(PROP SEG)
PTS译为传播时间段,这个时间段是用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍。 PTS段的大小可以为1~8 Tq。

• PBS1段(PHASE SEG1)
PBS1译为相位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。 PBS1段的初始大小可以为1~8 Tq。

• PBS1段(PHASE SEG1),
PBS1译为相位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。 PBS1段的初始大小可以为1~8 Tq。

4. CAN的报文种类及结构

报文的种类

image-20240322203815443

数据帧的结构图 :

image-20240322203928612

​ 数据帧以一个显性位(逻辑0)开始,以7个连续的隐性位(逻辑1)结束,在它们之间,分别有仲裁段、控制段、数据段、 CRC段和ACK段 。

• 帧起始

​ SOF段(Start Of Frame),译为帧起始, 帧起始信号只有一个数据位,是一个显性电平,它用于通知各个节点将有数据传输,其它节点通过帧起始信号的电平跳变沿来进行硬同步

• 仲裁段
当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输,仲裁段的内容主要为本数据帧的ID信息(标识符),数据帧具有标准格式扩展格式两种,区别就在于ID信息的长度,标准格式的ID为11位扩展格式的ID为29位,它在标准ID的基础上多出18位。

RTR位 (Remote Transmission Request Bit),译作远程传输请求位,它是用于区分数据帧遥控帧的,当它为显性电平时表示数据帧,隐性电平时表示遥控帧。

IDE位(Identifier Extension Bit),译作标识符扩展位,它是用于区分标准格式扩展格式,当它为显性电平时表示标准格式,隐性电平时表示扩展格式。
SRR位(Substitute Remote Request Bit),只存在于扩展格式,它用于替代标准格式中的RTR位。由于扩展帧中的SRR位为隐性位, RTR在数据帧为显性位,所以在两个ID相同的标准格式报文与扩展格式报文中,标准格式的优先级较高。

• 控制段
在控制段中的r1和r0为保留位,默认设置为显性位。它最主要的是DLC段(DataLength Code),译为数据长度码,它由4个数据位组成,用于表示本报文中的数据段含有多少个字节, DLC段表示的数字为0~8。

• 数据段
数据段为数据帧的核心内容,它是节点要发送的原始信息,由0~8个字节组成,MSB先行。

• CRC段
为了保证报文的正确传输, CAN的报文包含了一段15位的CRC校验码一旦接收节点算出的CRC码跟接收到的CRC码不同,则它会向发送节点反馈出错信息,利用错误帧请求它重新发送。 CRC部分的计算一般由CAN控制器硬件完成,出错时的处理则由软件控制最大重发数。在CRC校验码之后,有一个CRC界定符,它为隐性位,主要作用是把CRC校验码与后面的ACK段间隔起来。

• ACK段
ACK段包括一个ACK槽位ACK界定符位。类似I2C总线,在ACK槽位中,发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答。在ACK槽和帧结束之间由ACK界定符间隔开。

• 帧结束
EOF段(End Of Frame),译为帧结束,帧结束段由发送节点发送的7个隐性位表示结束。

其他报文:

image-20240322205623140


标签:信号线,总线,通信,差分,Tq,STM32,初学,信号,节点
From: https://www.cnblogs.com/lyk-23/p/18090424

相关文章

  • STM32G431RBT6之LCD03
    导入三个文件lcd.c&&lcd.h&&fonts.h  初始化&&界面显示LCD_Init();LCD_Clear(Black);LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);chartemp[20];LCD_DisplayStringLine(Line1,(u8)"DATA");spri......
  • STM32 AD单通道函数设计
    单片机学习!目录文章目录前言一、ADC配置步骤二、详细步骤2.1开启RCC时钟2.2配置GPIO2.3 配置多路开关2.4 配置ADC转换器2.5 开启ADC电源2.6 ADC进行校准        2.6.1复位校准        2.6.2等待复位校准完成    2.6.3开始......
  • 网络通信Socket
    publicList<User>users=newList<User>();Socketsocket;//初始化服务器publicvoidInitSever(){  //创建一个Socket对象  socket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);  //将把通信的地址和端口绑定到s......
  • tcp/ip网络通信时的大小端序转换
    1.短整形/长整形的转换#include<arpa/inet.h>//u:unsigned//16:16位,32:32位//h:host,主机字节序//n:net,网络字节序//s:short//l:int//这套api主要用于网络通信过程中IP和端口的转换//将一个短整形从主机字节序->网络字节序uint16_thtons(......
  • 基于STM32单片机图书馆智能节能灯热释人体感应光照设计21-304
    21-304、STM32图书馆智能节能灯设计-LCD1602-热释-光敏-拨动-KEY-RELAY产品功能描述:本设计由STM32F103C8T6单片机核心板电路+拨动开关电路+按键电路+2路继电器控制电路+热释人体红外模块电路+光照检测电路+LCD1602液晶显示电路+电源电路组成1、通过拨动开关选择系统工作模式......
  • Electron IPC通信机制深度解析与实例演示
    ElectronIPC通信机制深度解析与实例演示IPC机制原理概述IPC通信实例演示IPC通信的优势与应用场景IPC通信的高级用法1.异步通信2.传输复杂数据类型3.处理多个并发请求IPC通信最佳实践与优化1.尽量减少不必要的通信2.使用持久化存储替代部分通信3.注意数据安......
  • 卫星通信 链路基本知识
    1.卫星通信系统组成卫星通信是无线通信的一种,与平常无线通信的不同之处是中继器位于地球上空的人造卫星上。卫星通信系统由地面站和通信卫星组成,如图2所示从地面站发出的电波在通信卫星上进行中继,用其它的地面站接收,从地球站到卫星的传输线路称之为上行,从卫星到地球站的线路称为......
  • 为什么我学了几天 STM32 感觉一脸茫然?
    为什么我学了几天STM32感觉一脸茫然?如果你只有C语言基础就马上学习STM32,你一定会有这些疑惑:为什么有这么多没见过的API函数?没见过的变量(寄存器)名称?为什么工程除了main.c,还有这么多其它没见过的文件?它们有什么用?在开始前我分享下我的经历,我刚入行时遇到一个好公司和师父......
  • UE4之蓝图通信
    关卡蓝图或蓝图类各自在蓝图内之间的通信创建Customevent蓝图和蓝图类与场景内部的对象的通信创建一个变量,然后把场景内部对象放进去蓝图类之间的通信通过第三人称小人通信通过actor变量蓝图类与关卡蓝图之间的信息交互控制台蓝图,ce蓝图名遍历搜索引用蓝图类GetALLAc......
  • 17. STM32内部FLASH
    一、STM32内部FLASH简介  不同型号的STM32F40xx/41xx,其FLASH容量也有所不同,最小的只有128K字节,最大的则达到了1024K字节。STM32F407ZGT6的FLASH容量为1024K字节,STM32F40xx/41xx的闪存模块组织如图所示:  STM32F4的闪存模块由主存储器、系统存储器、OPT区域......