PAGE1
PAGE1
LPC1768CAN接口
1.CAN接口概述
CAN(ControllerAreaNetwork)接口是一种用于实时通信的串行通信协议,广泛应用于汽车、工业控制和复杂娱乐设备等领域。LPC1768微控制器集成了两个CAN控制器,支持CAN2.0B协议,可以实现高速、可靠的数据通信。CAN接口的主要特点包括:
多主控制:网络中的任何节点都可以在任意时刻主动发送信息。
非破坏性总线仲裁:当多个节点同时发送信息时,优先级高的信息会获得发送权。
错误检测和自动重发:节点可以检测到通信错误并自动重发信息。
灵活的消息过滤:接收节点可以根据消息ID选择接收特定的消息。
LPC1768的CAN接口通过一系列寄存器和配置来实现这些功能。本节将详细介绍如何配置和使用LPC1768的CAN接口。
2.CAN接口硬件配置
LPC1768的CAN接口硬件配置包括以下几个步骤:
引脚配置:LPC1768的CAN接口引脚可以通过引脚复用功能配置为CAN_TX和CAN_RX。
时钟配置:CAN控制器需要一个稳定的时钟源,通常使用系统时钟。
CAN模块初始化:通过配置CAN控制器的寄存器来初始化模块,设置波特率、模式等参数。
2.1引脚配置
LPC1768的CAN接口引脚可以通过PINSEL寄存器配置。例如,将P0.4和P0.5配置为CAN1的TX和RX引脚,可以使用以下代码:
//配置P0.4为CAN1_TX
PINSEL_ConfigPin(0,4,2);//2表示CAN1_TX
//配置P0.5为CAN1_RX
PINSEL_ConfigPin(0,5,2);//2表示CAN1_RX
2.2时钟配置
CAN控制器的时钟源通常来自系统时钟。在LPC1768中,可以通过PCLKSEL0和PCLKSEL1寄存器配置CAN模块的时钟源。例如,将CAN1模块的时钟源设置为系统时钟,可以使用以下代码:
//配置CAN1时钟源为系统时钟
LPC_SC-PCLKSEL0=(LPC_SC-PCLKSEL0~(0x36))|(0x26);//位6和7选择CAN1的时钟源
2.3CAN模块初始化
CAN模块的初始化包括设置波特率、模式、过滤器等参数。LPC1768的CAN模块提供了丰富的寄存器配置选项。以下是一个完整的初始化示例:
#includeLPC17xx.h
#includeboard.h
#includelpc17xx_can.h
voidCAN1_Init(void){
//配置引脚
PINSEL_ConfigPin(0,4,2);//CAN1_TX
PINSEL_ConfigPin(0,5,2);//CAN1_RX
//配置时钟源
LPC_SC-PCLKSEL0=(LPC_SC-PCLKSEL0~(0x36))|(0x26);//选择系统时钟
//使能CAN1时钟
LPC_SC-PCONP|=(117);//使能CAN1时钟
//初始化CAN1
CAN_Configconfig={
.mode=CAN_MODE_NORMAL,//正常模式
.bitrate=500000,//500kbps
.clock=LPC_CAN1,//选择CAN1
.function=CAN_FUNC_FULL,//完整功能
.filter=CAN_FILTER_OFF//关闭过滤器
};
CAN_Init(config);
//配置CAN1中断
NVIC_EnableIRQ(CAN_IRQn);
LPC_CAN1-IER=1;//使能中断
//使能CAN1
LPC_CAN1-MOD=0;//退出复位模式
}
intmain(void){
SystemInit();
Board_Init();
//初始化CAN1
CAN1_Init();
while(1){
//主循环
}
}
3.CAN消息发送
LPC1768的CAN接口可以发送标准格式和扩展格式的消息。发送消息的基本步骤包括:
配置消息帧:设置