CAN通信讲义
不错的参考博客
秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4 CAN!_can通信协议简单理解_Wireless_Link的博客-CSDN博客
CAN通信知识梳理及在Stm32上的应用(HAL库)_冬瓜~的博客-CSDN博客
基本知识
1.CAN通信物理层

具体实现
CAN控制器:STM32F407等MCU上自带的CAN控制器
CAN收发器:SN65HVD230芯片,CA-IS3052G隔离式 CA-IS3052G

2.CAN通信帧

后三种帧是由硬件来完成的,重点关注前两者


ID段:数据的ID号,分为11位的标准格式ID和29位的扩展格式ID
DLC:给定数据长度
CRC:校验段
3.CAN通信的重要基本特征
差分信号
隐形电平对应逻辑 1,两线压差为0,显性电平对应逻辑0,两线压差为2.5V 可以使外界干扰减到很小(抑制共模干扰)

终端电阻
120欧 用于减少回波反射

多电机模式下设置好电机上的拨档使得终端电阻为120,主控端120欧电阻长期使用后可能掉落,所以最好电表测量实际终端电阻修改对应。
系统的柔软性
与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
4.CAN在STM32
关于采样点和位时序
见STM32F4中文参考手册 P622
一个位相当于是一帧数据,控制位时序相当于就是控制一帧数据的时间长度,再将这个时间长度取倒数就得到了波特率。
这些位都是由最小的时间单元组成,称为一个 time quantum,也就是 1tq




那么在实际程序中,就需要控制好这些位时序使得波特率正确
1 | CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq |
因为该板子上的 CAN 是挂载在 APB1 时钟上,分频就是 42Mhz,再分完频就是 14Mhz,所以一个 tp 就是 $\frac{1}{14Mhz}$,而在上述代码中设置了总共 14 个 tp,所以一个位的时间长度是 $\frac{1}{1Mhz}$ ,所以波特率就是 1Mhz

由上图可以看到,SYNC_SEG 和 BS1 结束后为采样点,一般来说把采样点控制在 80% 左右比较合适
滤波器
不管是否直接使用滤波器都要配好!
如下图可见,CAN2不能控制筛选器,如果有CAN2的话,在使用CAN2之前一定要先使能 CAN1的时钟 中文参考手册 P609

其中筛选器就是用来筛选有着固定ID的信息,减小总线负担
- 标题: CAN通信讲义
- 作者: Porcovsky
- 创建于 : 2023-09-11 21:58:37
- 更新于 : 2025-01-26 12:03:57
- 链接: https://pocro.github.io/2023/09/11/CAN通讯/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。



