基本信息
文件名称:NXP 系列:LPC1700 系列_(15).CAN总线接口.docx
文件大小:27.62 KB
总页数:25 页
更新时间:2025-06-18
总字数:约1.55万字
文档摘要

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