STM32学习,I2C
2026/7/9 3:24:02 网站建设 项目流程

1:I2C总线电路结构

数据线:传送数据

时钟线:传送时钟

2:逻辑线与

3:主机向从机发送时钟,数据的逻辑

时钟:从机的SCL全部写入1,当主机的SCL写入0时,由于是开漏输出,相当于接地,所以输出输出低电平。当主机的SCL写入1时,总的SCL线悬空,由于上拉电阻的存在,呈现高电平

数据:与时钟同理

4:从机向主机发送数据的逻辑

主机的SDA线写入1,除了要发送数据的从机外,其他从机的SDA线全部写1,要发送的数据的从机的SDA线来分别写1或0

写1输出高电压,1输出低电压

5:I2C通信基本流程

主机首先发送起始位,然后写入要与之通信的从机的七位地址,还要加上0或1,0代表向从机写数据,1代表读从机发送的数据,最后再加上停止位

6:I2C数据帧格式

起始位:SCL高电压,SDA出现从高电平到低电平的下降沿

停止位:SCL高电压,SDA出现从低电平到高电平的上升沿

发送流程:首先,从机的SDA和SCL均写入1,主机的SCL和SDA首先发送起始位,然后进入寻址阶段,在SDA发送从机的地址和读写位,再由从机的SDA发送低电压,表示应答成功。然后进入传输数据阶段,主机通过SDA传送完数据后,从机SDA发送低电压,表示收到数据,然后主机再发送数据,以此类推,最后主机发送停止位。

主机读从机发来的数据与上面类似,只不过是从机发送数据,主机应答

7:I2C引脚初始化

代码如下

//对IO引脚重映射,对I2C1进行重映射
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开启AFIO时钟
GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);//开启重映射

//对PB8和PB9进行初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct={0};
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);

8:I2C设置

代码如下

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询