PAGE1
PAGE1
CAN总线接口
1.CAN总线概述
CAN(ControllerAreaNetwork)总线是一种用于实时应用的多主控串行通信协议。它最初由Bosch公司开发,用于汽车内部的各个控制模块之间的通信。CAN总线的主要特点包括:
多主控:网络中可以有多个节点,每个节点都可以发送和接收数据。
实时性:通过优先级机制,确保高优先级的消息能够先被处理。
可靠性:具有错误检测和处理机制,能够自动重传错误消息。
灵活的数据传输:支持多种数据帧格式,可以传输不同长度的数据。
在LPC1700系列单片机中,CAN总线接口是由专门的CAN控制器实现的,该控制器支持CAN2.0B协议,并且可以配置为不同的工作模式,如仅监听模式、自动重传模式等。
2.CAN控制器硬件结构
LPC1700系列单片机的CAN控制器主要包括以下几个部分:
CAN核心:负责CAN协议的实现,包括数据帧的发送和接收。
消息RAM:用于存储CAN消息,包括发送和接收的消息缓冲区。
CAN寄存器:用于配置和控制CAN控制器,包括控制寄存器、状态寄存器、中断寄存器等。
CAN物理层接口:负责与外部CAN总线的物理连接,包括差分收发器。
2.1消息RAM
消息RAM是CAN控制器的重要组成部分,用于存储CAN消息。LPC1700系列单片机的CAN控制器支持多个消息缓冲区,每个缓冲区可以配置为发送或接收缓冲区。消息RAM的结构如下:
对象:每个对象对应一个CAN消息,可以配置为发送或接收。
标识符:用于识别CAN消息的ID。
数据长度:消息中数据的长度,最大为8字节。
数据:实际传输的数据。
2.2CAN寄存器
CAN寄存器用于配置和控制CAN控制器,主要包括以下几个寄存器:
控制寄存器(CANxCON):用于配置CAN控制器的工作模式和状态。
状态寄存器(CANxSTAT):用于读取CAN控制器的当前状态。
中断寄存器(CANxINT):用于配置和读取CAN控制器的中断状态。
3.CAN总线初始化
在使用CAN总线之前,需要对CAN控制器进行初始化配置。初始化主要包括以下几个步骤:
配置CAN控制器的工作模式。
设置CAN总线的波特率。
配置消息缓冲区。
使能CAN中断。
3.1配置CAN控制器的工作模式
CAN控制器的工作模式可以通过设置控制寄存器(CANxCON)来配置。以下是一个示例代码,展示如何将CAN控制器配置为正常工作模式:
//配置CAN控制器为正常工作模式
voidCAN_InitMode(LPC_CAN_TypeDef*CANx,uint32_tmode){
//选择CAN控制器
LPC_CANAF_TypeDef*CANAF=(LPC_CANAF_TypeDef*)((uint32_t)CANx+0x40000);
//进入配置模式
CANx-CON=(CANx-CON~CAN_CON_INIT)|CAN_CON_INIT;
//设置工作模式
CANx-CON=(CANx-CON~CAN_CON_MODE)|(modeCAN_CON_MODE_Pos);
//退出配置模式
CANx-CON=~CAN_CON_INIT;
}
3.2设置CAN总线的波特率
波特率的设置可以通过配置位时间寄存器(CANxBTR)来实现。以下是一个示例代码,展示如何设置CAN总线的波特率为500kbps:
//设置CAN总线的波特率
voidCAN_SetBaudRate(LPC_CAN_TypeDef*CANx,uint32_tbaudRate,uint32_tpclk){
//选择CAN控制器
LPC_CANAF_TypeDef*CANAF=(LPC_CANAF_TypeDef*)((uint32_t)CANx+0x40000);
//进入配置模式
CANx-CON=(CANx-CON~CAN_CON_INIT)|CAN_CON_INIT;
//计算位时间参数
uint32_ttseg1=13;//传播延迟段
uint32_ttseg2=2;//相位缓冲段1
uint32_tsjw=1;//重同步跳转宽度
uint32_tprescaler=(pclk/(baudRate*(tseg1+tseg2+1)))-1