我们已经准备好了,你呢?

我们与您携手共赢,为您的企业形象保驾护航!

当前位置: 首页 > 问答 > CAN串行通信总线协议(CAN总线特点、应用场景、物理层、协议层、位时序、硬件同步和再同步、总线仲裁、STM32CAN控制器、CAN相关寄存器和HAL库驱动、CAN基本驱动步骤)

参考

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通信。

六、编程实战

  • 免责声明:本站内容(文字信息+图片素材)来源于互联网公开数据整理或转载,仅用于学习参考,如有侵权问题,请及时联系本站删除,我们将在5个工作日内处理。联系邮箱:chuangshanghai#qq.com(把#换成@)

    我们已经准备好了,你呢?

    我们与您携手共赢,为您的企业形象保驾护航!

    在线客服
    联系方式

    热线电话

    132-7207-3477

    上班时间

    周一到周五 09:00-18:00

    二维码
    线