STM32 HAL:CAN通信详解与物理协议

16 下载量 63 浏览量 更新于2024-08-29 1 收藏 870KB PDF 举报
STM32(Hardware Abstraction Layer,简称HAL)是STMicroelectronics为STM32系列微控制器提供的软件抽象层,它简化了高级功能的编程接口,包括CAN通信。CAN(Controller Area Network)是一种广泛应用于汽车电子、工业控制和物联网的通信标准,支持半双工、异步通信,特点是无主从关系,每个设备都能发送和接收数据。 在STM32 HAL中的CAN通信涉及两个主要层面:物理层和协议层。 **8.1 CAN物理层** CAN物理层通过CAN_High和CAN_Low两条差分信号线工作,信号以差分形式传输。有两种网络形态: 1. **闭环** (Closed Loop): 适用于短距离(最多40米)连接,最高速度可达1 Mbps。每个总线端都需连接120欧姆电阻,确保信号质量。TJA1050这类CAN收发器被用于信号转换,将控制器的二进制数据转换为差分电平,便于在总线电缆上传输。 2. **开环** (Open Loop): 可达更长距离(1千米),但最高传输速度为125 Kbps。此时,每根线需串联2.2 kΩ电阻。CAN协议使用差分信号,显性电平代表逻辑0(电压差为2V),隐性电平代表逻辑1(电压差为0)。 **8.1.2 CAN协议层** - **位时序**:CAN通信依赖于精确的时间间隔,每个完整的位由8到25个Tq(Time Quantum,时间量子)组成,包括同步段(SS)、传播时间段(PTS)、两个相位缓冲段(PBS1和PBS2)以及再同步补偿宽度(SJW)。这些段旨在确保正确采样总线电平,防止数据丢失或错误。 - **波特率计算**:CAN通信速率由时钟源(如APB1 peripheral clocks,通常是SYSCLK的四分频)决定,并通过预分频器进一步调整。一个Tq的长度由预分频器和时钟源配置决定。数据位由多个Tq组成,因此可以根据这些参数计算出实际的波特率。 使用STM32 HAL进行CAN通信时,开发者需要了解并配置相关的硬件接口,设置正确的波特率、初始化CAN控制器,以及编写处理发送和接收的函数,包括错误检测和处理。通过HAL库,开发者能够方便地实现CAN帧的构建、发送和解析,简化了复杂的底层细节,提高了代码的可维护性和可读性。