CAN总线协议和应用示例
一、CAN协议概念
1.1 CAN 协议简介
CAN(Controller Area Network)是控制器局域网络的简称,由德国博世公司开发,并最终成为国际标准(ISO11519 和 ISO11898),是国际上应用最广泛的现场总线之一。它主要用于汽车计算机控制系统和嵌入式工业控制局域网。近年来,由于其高可靠性和良好的错误检测能力,CAN协议被广泛应用于恶劣环境下的工业控制。
1.2 CAN 物理层
CAN 通讯是一种异步通讯方式,使用 CAN_High 和 CAN_Low 两条信号线构成一组差分信号线进行通讯。
1.2.1 闭环总线网络
闭环网络遵循 ISO11898 标准,适用于高速、短距离传输,最大长度为 40m,通信速度最高为 1Mbps,总线两端各有一个120欧姆的电阻。
1.2.2 开环总线网络
开环网络遵循 ISO11519-2 标准,适用于低速、远距离传输,最大传输距离为 1km,最高通信速率为 125kbps,每根总线上各串联一个2.2千欧的电阻。
1.2.3 通讯节点
CAN 通讯节点由 CAN 控制器及 CAN 收发器组成,控制器与收发器之间通过 CAN_Tx 和 CAN_Rx 信号线相连,收发器与 CAN 总线之间通过 CAN_High 和 CAN_Low 信号线相连。
例如,STM32 的 CAN 片上外设就是通讯节点中的控制器,需要外接一个收发器(如 TJA1050)来实现完整的节点。
1.2.4 差分信号
差分信号使用两根信号线,振幅相等,相位相反,通过两根信号线的电压差值表示逻辑0和逻辑1。
使用差分信号传输的优点:
- 抗干扰能力强
- 有效抑制对外部的电磁干扰
- 时序定位精确
1.2.5 CAN协议中的差分信号
CAN 协议中对 CAN_High 和 CAN_Low 表示的差分信号做了规定:
- 逻辑1(隐性电平):CAN_High 和 CAN_Low 线上的电压均为2.5V,电压差为0V。
- 逻辑0(显性电平):CAN_High 为3.5V,CAN_Low 为1.5V,电压差为2V。
1.3 CAN 协议层
1.3.1 CAN 的波特率及位同步
CAN 使用“位同步”的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。
1.3.2 位时序分解
CAN 协议把每一个数据位的时序分解成 SS 段、PTS 段、PBS1 段、PBS2 段。
1.3.3 通讯的波特率
通过配置位时序寄存器 CAN_BTR 的 TS1 和 TS2 寄存器位设定 BS1 和 BS2 段的长度,可以确定每个 CAN 数据位的时间。
1.3.4 同步过程分析
CAN 的数据同步分为硬同步和重新同步。
1.3.5 CAN 的报文种类及结构
CAN 协议规定了5种类型的帧:
- 数据帧
- 遥控帧
- 错误帧
- 过载帧
- 间隔帧
1.3.5.1 报文的种类
每种帧的用途不同,主要用于控制通讯。
1.3.5.2 数据帧的结构
数据帧是 CAN 通讯中最主要、最复杂的报文。
二、STM32F407 CAN 控制器介绍
STM32 的芯片中具有 bxCAN 控制器,支持 CAN 协议 2.0A 和 2.0B 标准。
2.1 CAN 控制内核
主要包含 CAN 控制寄存器及状态寄存器。
2.1.1 主控制寄存器 CAN_MCR
负责管理 CAN 的工作模式。
2.1.2 位时序寄存器 CAN_BTR 及波特率
推荐一个CAN波特率计算器
用于配置测试模式、波特率及各种位内的段参数。
2.2 CAN 发送邮箱
CAN 外设的发送邮箱包含标识符寄存器、数据长度控制寄存器及数据寄存器。
2.3 CAN 接收 FIFO
CAN 外设的接收 FIFO 包含标识符寄存器、数据长度控制寄存器及数据寄存器。
2.4 验收筛选器
用于筛选接收到的报文。
2.5 整体控制逻辑
包括 CAN 控制内核、发送邮箱、接收 FIFO 以及验收筛选器。
三、CAN CubeMX 配置
通过问题熟悉 CubeMX 配置:
3.1 配置波特率
使用工具配置波特率。
3.2 Basic Parameter
配置 CAN 的基本参数。
3.3 CAN 分为 RX0 和 RX1 中断
分别用于处理来自 FIFO0 和 FIFO1 的接收中断。
3.4 CAN SCE 中断
用于处理错误和状态变化中断。
四、CAN 分析工具的使用
使用 CAN 分析工具进行测试。
五、实验
5.1 Normal 模式测试 500K 波特率(定时发送,轮询接收)
- CubeMX 配置
- 设置 Filter 过滤
- 开启 CAN
- 编写发送函数
- 编写轮询接收函数
5.2 Normal 模式测试 500K 波特率(定时发送,中断接收)
- CubeMX 配置
- 设置 Filter 过滤
- 开启 CAN
- 编写发送函数
- 编写中断接收函数
通过以上步骤,可以成功实现 CAN 总线的通讯。
总结
本文详细介绍了 CAN 总线协议的基本概念、物理层、协议层、STM32 CAN 控制器的配置与使用,并通过 CubeMX 进行配置及实验,最终实现了 CAN 总线的正常通讯。希望通过本篇文章,读者能够深入理解 CAN 总线协议及其应用,掌握 CAN 总线在实际工程中的使用方法。