I2C是Inter-Integrated Circuit (内部集成电路)的简称。
初始化I2C的步骤:(可以分步配置,也可以直接复制修改最后的初始化总例程)
第一步:给SCL和SDA配置引脚(都要配置成复用输出开漏模式,即GPIO_MODE_AF_OD)
RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_Initstruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_值1|GPI0_Pin_值2;//值1和值2是数字,选择引脚
GPIO_Initstruct.GPIO_Mode = GPIO_Mode_AF_OD;//复用开漏输出,不要改
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;//2MHz或10MHz,一般选10MHz
GPIO_Init(GPIO值3,&GPIO_Initstruct);//值3可以是A,B,C,D,E,F,G
第二步:开启I2C的时钟并复位(不复位也可,但复位是好习惯)
RCC_APB1Periphclockcmd(RCC_APB1Periph_I2C值1,ENABLE);/*使能,此处三个值1都是数字,用于选择一个I2C通道*/
RCC_APBlPeriphResetcmd(RCC_APB1Periph_I2c值1,ENABLE);//复位的第一步
RCC_APBlPeriphResetCmd(RCC_APB1Periph_I2C值1, DISABLE);//复位的第二步
第三步:配置I2C参数
I2C_InitTypeDef I2C_InitStruct;
I2C_InitStruct.I2C_ClockSpeed = 400000;// 波特率,最高400k
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;/*选择速度模式,可以是I2C_Mode_SMBusDevice或I2C_Mode_SMBusHost*/
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;/*可以是I2C_DutyCycle_2,即2:1,低电平占两份高电平占一份,或12C_DutyCycle_16_9,即16:9,低电平占16份,高电平占9份*/
I2C_Init(I2C1, &I2C_InitStruct);
第四步:使能I2C
I2C_Cmd(I2C值1, ENABLE);//值1是数字,用于选择一个I2C通道
初始化总例程:
static void App_I2C_Init(void)
{
// #1. 初始化SCL和SDA引脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);