STM32学习-16-[I2C]I2C模块的使用方法
I2C模块简介
I2C是一个片上外设
IO引脚进行初始化
查表

可见PB6和PB7复用后就是I2C功能
当然还有I2C2

然后是IO口怎么配置

void My_I2C_Init(void){
// IO引脚初始化
// 对I2C进行重映射
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
// 对PB8和PB9进行初始化,这是映射后的两个IO口,可以查手册
RCC_APB2Periph_APB2PeriohClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
I2C的速度模式


时钟信号的占空比
只有在快速模式下才能设置占空比
SCL控制着传输的速度
占空比是指高电压在一个周期里面高电平所占的比例

I2C模块的初始化

void My_I2C_Init(void){
// IO引脚初始化
// 对I2C进行重映射
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
// 对PB8和PB9进行初始化,这是映射后的两个IO口,可以查手册
RCC_APB2Periph_APB2PeriohClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
// 初始化I2C1模块
// 开启后复位是固定写法
RCC_APB1PeriphCLockCmd(RCC_APB1Periph_I2C1, ENABLE); // 开启I2C1的时钟
RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); // 施加复位信号
RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1,DISABLE);// 释放复位信号
I2C_InitTypeDef I2C_InitStruct;
I2C_InitStruct.I2C_ClockSpeed = 400000; // 波特率400k
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; // 标准的I2C
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; // 占空比2: 1
I2C_Init(I2C1, &I2C_InitStruct);
I2C_Cmd(I2C1, ENABLE); // 闭合I2C的总开关
}


浙公网安备 33010602011771号