PAGE1
PAGE1
CAN总线通信
1.CAN总线概述
CAN(ControllerAreaNetwork)总线是一种用于实时数据传输的串行通信协议,广泛应用于汽车和工业自动化领域。CAN总线的主要特点是:
高可靠性:采用差分信号传输,具有很强的抗干扰能力。
多主结构:网络中可以有多个节点,每个节点都可以主动发送数据。
优先级机制:通过消息标识符确定消息的优先级,高优先级的消息可以抢占总线。
错误检测:内置多种错误检测机制,确保数据传输的准确性。
非破坏性仲裁:多个节点同时发送数据时,不会破坏数据,而是通过优先级进行仲裁。
CAN总线通信协议定义了两个标准:CAN2.0A和CAN2.0B。其中,CAN2.0B支持更长的消息标识符。
2.PIC18系列中的CAN模块
PIC18系列单片机中集成了CAN模块,使其能够方便地实现CAN总线通信。CAN模块的主要功能包括:
数据发送和接收:支持标准格式和扩展格式的消息发送和接收。
过滤器:可以配置多个过滤器,用于选择接收特定的消息。
错误处理:内置错误检测和处理机制,确保通信的可靠性。
中断支持:可以配置中断,用于处理接收和发送事件。
2.1CAN模块寄存器
CAN模块包含多个寄存器,用于配置和控制通信过程。主要的寄存器包括:
CANCTRL:CAN控制寄存器,用于启用和复位CAN模块。
CANSTAT:CAN状态寄存器,用于读取CAN模块的状态。
CANTCON:CAN定时器控制寄存器,用于配置CAN定时器。
CANBTR1和CANBTR2:CAN波特率寄存器,用于设置通信波特率。
CANINTE和CANINTF:CAN中断使能和中断标志寄存器,用于配置和读取中断状态。
BUFPTR:缓冲区指针寄存器,用于选择CAN消息缓冲区。
TXBnCON和RXBnCON:发送和接收缓冲区控制寄存器,用于配置缓冲区的模式和状态。
TXBnSIDH和TXBnSIDL:发送缓冲区标准/扩展标识符高/低字节寄存器。
TXBnDLC:发送缓冲区数据长度码寄存器。
TXBnDx:发送缓冲区数据寄存器(x=0,1,2,3,4,5,6,7)。
RXBnSIDH和RXBnSIDL:接收缓冲区标准/扩展标识符高/低字节寄存器。
RXBnDLC:接收缓冲区数据长度码寄存器。
RXBnDx:接收缓冲区数据寄存器(x=0,1,2,3,4,5,6,7)。
CANRXF0到CANRXF5:接收过滤器寄存器,用于配置接收消息的过滤条件。
CANRXM1和CANRXM2:接收模式寄存器,用于配置接收模式。
2.2CAN模块工作模式
CAN模块支持多种工作模式,包括:
配置模式:用于初始化CAN模块。
正常模式:用于正常的发送和接收消息。
监听模式:用于接收所有消息,但不参与总线仲裁。
环回模式:用于测试CAN模块,发送的消息会直接返回到接收缓冲区。
停止模式:用于关闭CAN模块,节省功耗。
工作模式可以通过CANCTRL寄存器中的REQOP位进行配置。
3.CAN总线通信配置
3.1初始化CAN模块
在使用CAN模块之前,需要进行初始化配置。主要步骤包括:
配置波特率:通过CANBTR1和CANBTR2寄存器设置通信波特率。
配置接收过滤器:通过CANRXF0到CANRXF5寄存器设置接收消息的过滤条件。
配置接收模式:通过CANRXM1和CANRXM2寄存器设置接收模式。
使能CAN模块:通过CANCTRL寄存器使能CAN模块并设置工作模式。
3.1.1配置波特率
波特率的配置涉及到CANBTR1和CANBTR2寄存器。这两个寄存器用于设置位时间参数,包括同步跳转宽度(SJW)、传播延时(PropSeg)、相位段1(PhaseSeg1)和相位段2(PhaseSeg2)。
//配置CAN波特率为500kbit/s
voidconfigCANBaudRate(void){
//设置波特率寄存器
CANBTR1=0x00;//SJW=1,PropSeg=2
CANBTR2=0x1C;//PhaseSeg1=8,PhaseSeg2=2,BRP=1
}
3.1.2配置接收过滤器
接收过滤器用于选择接收特定的消息。可以通过CANRXF0到CANRXF5寄存器配置过滤器。
//配置接收过滤器,接收ID为0x123的标准格式消息
voidconfigCANFilter(void){
CANRXF0=0x12;//高8位
CANRXF1=0x30;/