基本信息
文件名称:NXP 系列:LPC15xx 系列 (基于 ARM Cortex-M3)_(19).LPC15xx系列CAN总线.docx
文件大小:24.28 KB
总页数:25 页
更新时间:2025-06-23
总字数:约1.31万字
文档摘要

PAGE1

PAGE1

LPC15xx系列CAN总线

CAN总线概述

CAN(ControllerAreaNetwork)总线是一种串行通信协议,广泛应用于汽车、工业控制等领域。它支持多主模式,允许多个节点同时连接到总线上,并且具有高可靠性、低延迟和强抗干扰能力。LPC15xx系列单片机内置了CAN控制器,支持CAN2.0B协议,可以实现高速、可靠的CAN通信。

CAN总线的特点

多主模式:多个节点可以同时连接到总线上,每个节点都可以发送和接收数据。

数据帧格式:CAN总线使用标准的数据帧格式,包括标准帧和扩展帧。

错误检测:CAN总线具有强大的错误检测和处理机制,确保数据传输的可靠性。

仲裁机制:当多个节点同时发送数据时,CAN总线通过仲裁机制决定优先级,避免数据冲突。

非破坏性位仲裁:在数据传输过程中,如果多个节点同时发送不同的位,CAN总线会通过非破坏性位仲裁选择较高的优先级节点继续发送。

LPC15xx系列CAN控制器介绍

LPC15xx系列单片机内置的CAN控制器支持以下功能:

双CAN通道:LPC15xx系列单片机具有两个独立的CAN通道,可以同时进行两个CAN通信。

支持CAN2.0B协议:包括标准帧和扩展帧。

可编程的位速率:支持不同的位速率设置,以适应不同的通信需求。

中断支持:每个CAN通道都支持多种中断,包括接收中断、发送中断、错误中断等。

过滤器支持:支持多个消息过滤器,可以过滤不需要的CAN消息。

DMA支持:支持DMA传输,提高数据传输效率。

CAN控制器寄存器

LPC15xx系列单片机的CAN控制器寄存器包括以下主要部分:

CANControlRegister(CANCTRL):用于配置CAN控制器的运行模式。

CANCommandRegister(CANCMD):用于发送命令,控制CAN控制器的操作。

CANStatusRegister(CANSTAT):用于读取CAN控制器的状态。

CANBitTimingRegister(CANBT):用于设置CAN通信的位速率。

CANInterruptEnableRegister(CANIER):用于配置CAN中断使能。

CANInterruptPendingRegister(CANIPR):用于读取CAN中断挂起状态。

CANMessageBufferRegisters(CANMB):用于存储CAN消息。

CAN总线配置

初始化CAN控制器

在使用CAN总线之前,需要对CAN控制器进行初始化配置。以下是一个示例代码,展示了如何初始化LPC15xx系列单片机的CAN控制器:

#includeLPC15xx.h

#defineCAN_CLOCK//CAN时钟频率

#defineCAN_BAUDRATE500000//CAN波特率

voidCAN_Init(LPC_CAN_TypeDef*CANx,uint32_tbaudrate){

//使能CAN外设时钟

LPC_SYSCTL-PDRUNCFG=~(122);//CAN0时钟

LPC_SYSCTL-PDRUNCFG=~(123);//CAN1时钟

//配置CAN控制器

CANx-CANCTRL=0x00;//置位CAN控制器复位模式

CANx-CANBT=(CAN_CLOCK/(2*baudrate)-1)24|0x0F16|0x038|0x01;//设置位速率

//配置CAN控制器为正常模式

CANx-CANCTRL=0x01;//CAN控制器运行模式

//配置接收过滤器

CANx-CANAFMR=0x00;//使用标准过滤器

CANx-CANAFSR=0x00;//标准过滤器模式

CANx-CANAF1=0x00;//过滤器1

CANx-CANAF2=0x00;//过滤器2

//使能CAN中断

CANx-CANIER=0x01;//使能接收中断

}

intmain(void){

//初始化CAN0

CAN_Init(LPC_CAN0,CAN_BAUDRATE);

//初始化CAN1

CAN_Init(LPC_CAN1,CAN_BAUDRATE);

while(1){

//