
----------------------CAN总线的基本知识---------------------- 1986年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,现在已经是汽车网络的标准协议。 CAN是串行异步通讯,只有CAN_HIGH和CAN_LOW两条差分信号线,数据通过差分信号的方式进行通讯,其优点就是可以增加信号的抗干扰能力,抑制共模信号的干扰;信号在变成一个个字节的数字信号之前,就是按照这种差分形式的模拟信号来传输的。CAN控制器根据两根线上的电位差来判断总线电平,当CAN_HIGH减去CAN_LOW大于某个阈值的时候,可以把它当做逻辑高,反之,当小于某一个阈值时,就变成逻辑低。总线电平分为显性电平和隐形电平,二者必居其一。发送方通过使总线电平变化,将消息发送给传送方。 CAN协议中关于ISO/OSI基本参照模型中的传输层、数据链路层及物理层,具体定义如下图所示。 数据链路层分为MAC子层和LLC子层,MAC子层是CAN协议的核心部分。数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息地帧化、仲裁、应答、错误的检测或报告。数据链路层的功能通常在CAN控制器的硬件中执行。 下面介绍CAN通信的基本流程,CAN节点通常分为三个部分: MCU/CPU; CAN控制器, CAN收发器; 通常一些单片机内部就集成了相应的CAN控制器外设,比如我们比较常用的单片机—STM32,所以我们常见的结构一般是这样子的。 所以整体通信的流程是这样的,如下: CAN总线上通过差分信号进行数据传输; CAN收发器将差分信号转换为TTL电平信号,或者将TTL电平信号转换为差分信号; CAN控制器将TTL电平信号接收,并传输给MCU; 那么,对于单片机开发者而言,需要关注的就是最终CAN控制器传输给MCU的数据,如何去配置CAN控制器,以及使用CAN控制器进行数据的读取和发送。 那么大家可能会有疑问,节点是否需要设置地址,如果不需要设置地址,又是怎么实现数据传输的呢?CAN总线上的每个节点不需要设置节点的地址,而是通过消息的标识符(Identifier)来区别信息。因为CAN总线的消息是广播的(就是大家都可以收到消息),比如总线上有节点A,节点B,节点C,那么节点A发消息,节点B和节点C都会收到消息;节点B 和 节点C 会根据消息中的标识符,以及B和C中的消息过滤规则进行比较,如果不满足规则,就不接受这条信息。 这里需要注意的是: 发送消息的时候,总线必须处于空闲状态; 标识符越小,则消息获取总线的优先级越高; 在这里我们已经了解如何寻址,下面就看一下消息帧了。 CAN控制器进行数据的读取和发送是通过以下5中类型的消息帧进行的,分别是数据帧、遥控帧、错误帧、过载帧、帧间隔。另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11位的标识符(Identifier:以下称ID),扩展格式有29个位的ID。各种帧的用途如下表所示。 数据帧的应用最为广泛,下面介绍一下数据帧的结构。 数据帧由7个段构成。数据帧的构成如下图所示 (1) 帧起始 表示数据帧开始的段。1个位的显性位 (2) 仲裁段 表示该帧优先级的段。 标准格式和扩展格式在此的构成有所不同。 (3) 控制段 表示数据的字节数及保留位的段 控制段由6个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同。 (4) 数据段 数据的内容,可发送0~8个字节的数据。从MSB(最高位)开始输出。 (5) CRC段 检查帧的传输错误的段。由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)构成。 (6) ACK段 表示确认正常接收的段。由ACK槽(ACK Slot)和ACK界定符2个位构成。 (7) 帧结束 表示数据帧结束的段。由7个位的隐形位构成 ----------------------CAN总线的硬件连接---------------------- STM32H7A3集成了标准的CAN总线控制器,对应的端口为PD0、DPD1 此外,还需要设计CAN总线收发器,才可以进行CAN总线通信。使用的是SN65HVD230DR芯片,原理图和3D模型如下所示。 从机使用的STM32F103C8T6,用TJA1050芯片作为CAN总线收发器,能够将CAN控制器上的数据转换到CANH、CANL 上述两个CAN接收器电路,都设计了终端电阻,它能够起到稳定总线的作用。 . s0 `4 h* ^7 Y, V6 m1 ]' H$ s/ Q" v |
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法
【H745I GUI】1.GreenHouse 灯光控制
【Wio Lite AI视觉开发套件】+移植TensorFlow Lite