STM32 CAN学习

CAN总线(Controller Area Network Bus)控制器局域网总线。

CAN总线特性:

  • 两条通信线(CAN_H、CAN_L)、线路少、无需共地
  • 差分信号通信,抗干扰能力强
  • 高速CAN(ISO11898):125k~1Mbps,<40m
  • 低速CAN(ISO11519):10k~125kbps,<1km
  • 异步,无须时钟线,通信速率由设备各自约定
  • 半双工,无需时钟线,多设备同时发送数据时通过仲裁判断先后顺序
  • 11位/29位报文ID,用于区分消息功能,决定优先级(ID号小的优先发送)
  • 可配置1~8字节的有效载荷
  • 可实现广播式和请求式两种传输方式
  • 应答、CRC校验、位填充、位同步、错误处理等特性

主流通信协议

CAN硬件电路

每个设备通过CAN收发器挂载在CAN总线网络上。

  • CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连。
  • 高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻。
  • 低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻

CAN电平标准

CAN总线采用差分信号,即两线电压差(VCAN_H - VCAN_L)传输数据位。


CAN收发器------TIJA1050(高速CAN)


CAN总线帧格式

CAN协议规定了以下五种类型的帧:

  • 数据帧:发送设备主动发送数据(广播式)
  • 遥控帧:接收设备主动请求数据(请求式)
  • 错误帧:某个设备检测出错误向其它设备通知错误
  • 过载帧:接收设备通知其尚未做好接收准备
  • 帧间隔:用于将数据帧以及遥控帧与前面的帧分开

接收方数据采样

  • CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长。
  • 发送方以约定的位时长每隔固定时间输出一个数据位。
  • 接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位。
  • 理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近。

位时序

为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成。

硬同步

每个设备都有一个位时序计时周期,当某个设备发送报文,其他设备收到SOF的下降沿时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步。

硬同步只在帧的第一个下降沿(SOF下降沿)有效。

经过硬同步皇后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近。

再同步

若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,此时接收方根据再同步补偿宽度值(SJW)通过加长PBS1段,或缩短PSB2段,调整同步。

再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。

波特率的计算

波特率 = 1/一个数据位的时长 = 1/(tss + tpts + tpbs1 + tpbs2)

仲裁

CAN总线只有一对差分信号先,同一时间只能有一个设备操作总线发送数据,若多设个设备同时有发送需求,如何分配总线资源。

先占先得

若当前已经有设备正在操作总线发送数据帧/遥控帧,其它任何设备不能再同时发送数据帧/遥控帧(可以发送错误帧/过载帧破坏当前数据)。

任何设备检测到连续11个隐性电平,即认为总线空闲,只有在总线空闲时,设备才能发送数据帧/遥控帧。

一旦设备正在发送数据帧/遥控帧,总线就会变为活跃状态,必然不会出现连续11个隐性电平,其它设备自然不会破坏当前发送。

若总线活跃状态其它设备有发送需求,需要等待总线变为空闲,才能执行发送需求。

非破坏性仲裁

若多个设备的发送需求同时到来或因等待而同时到来,则CAN总线协议会根据ID号(仲裁段)进行非破坏性仲裁,ID号小 的(优先级高)取到总线控制权,ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送。

实现非破坏性仲裁需要两个要求:

  • 线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态,只有当所有设备都发送隐性电平1时,总线才呈现隐性电平1状态:0 & x = x & 0 = 0, 1 & 1 = 1.
  • 回读机制:设备发出一个数据位后,读回总线当前的电平状态,以确认自己发出的电平是否被真实发送出去了,发出0读回必然是0,发出1读回不一定是1。

数据帧和遥控帧ID号一样时,数据帧的优先级高于遥控帧。

相关推荐
minglie111 分钟前
剩余定理的电枢语言描述
学习
我是发哥哈42 分钟前
深度评测:五款主流AI培训平台的课程交付能力对比
大数据·人工智能·学习·机器学习·ai·chatgpt
摇滚侠42 分钟前
DSL 学习 ElasticSearch 主要就是学习 DSL 查询语言
学习·elasticsearch·jenkins
czwxkn2 小时前
PCB设计-器件:2.电感
嵌入式硬件
AI周红伟2 小时前
三年狂赚1.75亿!卖课,才是中国AI最容易赚钱的生意
人工智能·深度学习·学习·机器学习·copilot·openclaw
佳木逢钺2 小时前
从零开始:基于STM32H750的硬件设计与软件开发完整流程详解
stm32·单片机·嵌入式硬件
永远不会的CC2 小时前
Hello-Agents 初识智能体(实现一个简单旅游推荐智能体)
人工智能·学习·旅游
东京老树根2 小时前
SAP学习笔记 - BTP CAP开发06 - Customize Criticality,Map Page,Value help
笔记·学习
Bechamz4 小时前
大数据开发学习Day25
java·大数据·学习
zhangrelay4 小时前
云课实践速通系列-基础篇汇总-必修-通识基础和专业基础-2026--工科--自动化、电气、机器人、测控等
linux·笔记·单片机·学习·ubuntu·机器人·自动化