PAGE1
PAGE1
LPC1768I2C接口
I2C接口概述
I2C(Inter-IntegratedCircuit)是一种串行通信协议,用于在微控制器和外设之间进行简单、双向的数据传输。I2C协议使用两条线进行通信:SCL(串行时钟线)和SDA(串行数据线)。I2C接口支持多主多从架构,允许多个设备共享同一总线。
I2C接口的特点
简单性:仅需两条线即可实现数据传输。
双向通信:支持主设备和从设备之间的双向数据传输。
多设备:支持多个主设备和从设备共享同一总线。
低速:标准模式下最大传输速率为100kbps,快速模式下最大传输速率为400kbps,高速模式下最大传输速率为3.4Mbps。
地址识别:每个从设备都有一个唯一的7位或10位地址,主设备通过地址选择与哪个从设备通信。
LPC1768I2C接口硬件配置
LPC1768微控制器具有多个I2C接口,每个接口都有独立的SCL和SDA引脚。这些引脚可以通过寄存器配置为I2C功能。
引脚配置
I2C0:
SCL0:P0.10
SDA0:P0.11
I2C1:
SCL1:P0.2
SDA1:P0.3
寄存器配置
要将引脚配置为I2C功能,需要设置相应的PINSEL寄存器。例如,将P0.10和P0.11配置为I2C0的SCL和SDA引脚:
//配置I2C0引脚
PINSEL_CFG_TypePinCfg;
PinCfg.Funcnum=2;//功能2
PinCfg.OpenDrain=0;//推挽模式
PinCfg.Pinmode=0;//普通模式
PinCfg.Portnum=0;//端口0
PinCfg.Pinnum=10;//引脚10
PINSEL_ConfigPin(PinCfg);
PinCfg.Pinnum=11;//引脚11
PINSEL_ConfigPin(PinCfg);
LPC1768I2C接口初始化
在使用I2C接口之前,需要进行初始化配置,包括设置波特率、使能I2C功能等。
初始化步骤
配置引脚:如上所述,配置SCL和SDA引脚。
设置波特率:通过I2C接口的寄存器设置通信波特率。
使能I2C功能:通过使能寄存器启用I2C功能。
代码示例
以下是一个初始化I2C0接口的示例代码:
#includeLPC17xx.h
#includelpc17xx_i2c.h
voidI2C0_Init(void){
//配置I2C0引脚
PINSEL_CFG_TypePinCfg;
PinCfg.Funcnum=2;//功能2
PinCfg.OpenDrain=0;//推挽模式
PinCfg.Pinmode=0;//普通模式
PinCfg.Portnum=0;//端口0
PinCfg.Pinnum=10;//引脚10(SCL0)
PINSEL_ConfigPin(PinCfg);
PinCfg.Pinnum=11;//引脚11(SDA0)
PINSEL_ConfigPin(PinCfg);
//初始化I2C0
I2C_Init(LPC_I2C0,100000);//设置波特率为100kbps
//使能I2C0
I2C_Cmd(LPC_I2C0,ENABLE);
}
I2C数据传输
I2C接口支持主模式和从模式下的数据传输。在主模式下,微控制器可以作为主设备发起数据传输;在从模式下,微控制器可以作为从设备接收数据。
主模式数据传输
主设备可以通过I2C总线发送数据到从设备或从从设备接收数据。数据传输的基本步骤包括:
启动条件:发送启动信号,指示数据传输开始。
发送地址:发送从设备的地址,指示要与哪个从设备通信。
发送/接收数据:发送或接收数据。
停止条件:发送停止信号,指示数据传输结束。
代码示例
以下是一个主设备发送数据到从设备的示例代码:
#includeLPC17xx.h
#includelpc17xx_i2c.h
#defineI2C_ADDRESS0x68//从设备地址
voidI2C0_Write(uint8_treg,uint8_tdata){
//启动I2C传输
I2C_MasterSendStart(LPC_I2C0,I2C_ADDRESS,I2C_DIRECTION_TX);
//发送寄存器地址
I2C_MasterSen