参考
http://t.csdnimg.cn/HSaU6
一、CAN基础知识介绍
1.1、CAN介绍
CAN(Controller Area Network)是一种串行通信总线协议,最初由德国博世公司在20世纪80年代中期研发,主要用于汽车内部电子控制单元(ECU)之间的通信。随着时间的发展,CAN协议因其高性能、可靠性和灵活性而逐渐被广泛应用于工业控制、航空航天、船舶、医疗设备、智能家居等领域。
CAN协议的主要特点:
 **1.多主站结构:**网络中的任何一个节点在满足一定条件时都可以主动发送数据,无需主从设备的概念。
 **2.消息仲裁:**采用非破坏性的位仲裁机制,即在总线冲突时,具有较高优先级的消息将继续传输,低优先级消息自动重试,这大大提高了总线利用率和实时性。
 **3.错误检测和处理:**具有强大的错误检测机制,包括循环冗余校验(CRC)、位填充、应答错误、总线活动监控等多种错误检测手段,以及错误界定、错误警告、总线关闭等错误处理措施。
 **4.消息帧结构:**CAN协议的消息帧包括帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束等部分。
在CAN网络中,每个节点通过CAN控制器与总线连接,并通过CAN收发器进行电气隔离和信号转换。节点发送数据时,将其封装成CAN消息并通过总线广播出去,其他节点根据消息ID( arbitration ID)判断是否接收和处理该消息。
CAN协议有两种版本:经典CAN(也称为CAN 2.0)和CAN FD(Flexible Data-Rate),其中CAN FD引入了更高的比特率和更大的数据长度,以满足现代应用对更大带宽和数据传输效率的需求。
a) 什么是CAN?
b) CAN收发器芯片介绍
2.1、CAN控制器介绍
三、CAN相关寄存器介绍
四、CAN相关HAL库驱动介绍
五、CAN基本驱动步骤
在基于STM32的CAN通信开发中,基本驱动步骤可以概括如下:
1.CAN参数初始化
 使用HAL_CAN_Init()函数进行CAN控制器的基本参数初始化,包括设置工作模式(如正常模式、静默模式等)、波特率、同步跳转宽度(SJW)、时间段1(BS1)和时间段2(BS2)等位时序参数。
2.使能CAN时钟和初始化相关引脚
 使用__HAL_RCC_CANx_CLK_ENABLE()函数启用CAN外设的时钟。
 将相关GPIO引脚配置为复用功能模式,例如通过GPIO_PinAFConfig()函数映射到CAN功能,并设置为推挽输出或开漏输出(具体取决于CAN收发器的要求)。
3.设置过滤器
 使用HAL_CAN_ConfigFilter()函数或一系列相关API配置CAN接收过滤器,包括设置过滤器的工作模式、标识符、屏蔽位、关联的FIFO等。
4.CAN数据接收和发送
 发送消息:使用HAL_CAN_AddTxMessage()函数将消息添加到发送邮箱,并开始发送。
 接收数据:使用HAL_CAN_GetRxMessage()函数从接收FIFO中获取接收到的消息。
5.使能CAN相关中断和编写中断服务函数
 使用__HAL_CAN_ENABLE_IT()函数启用特定的CAN中断,如发送完成中断、接收中断等。
 配置NVIC(Nested Vectored Interrupt Controller),通过HAL_NVIC_SetPriority()和HAL_NVIC_EnableIRQ()函数设置CAN中断的优先级并启用中断。
 编写CAN中断服务函数(ISR),在中断服务函数中处理相应的中断事件,例如检查发送完成状态、读取接收数据等。
整个过程按照上述顺序进行,确保CAN控制器正确配置和初始化后,便可以进行有效的CAN通信。

QQ客服