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){
//