打印
[应用相关]

STM32_I2C通信

[复制链接]
250|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本篇文章部分图片来自于铁头山羊

​ I2C是一种总线结构,可以进行多设备连接,可以让单片机跟大量设备连接,单片机一般作为主机,其他设备作为从机,I2C由两条线组成:SCL(串行时钟线,传输时钟信号)和SDA(串行数据线,传输数据)。I2C总线还需要两颗上拉电阻,分别接在SCL和SDA上。SCL和SDA引脚都应该使用开漏输出,开漏输出有两种情况分别为低电压和高阻抗。为什么要设置为开漏输出呢?这是为了实现逻辑线与。当输入为1时都是高阻抗,因为上拉电阻的存在总线呈现高电压为1,如果向某一个引脚写0,总线呈现低电压为0,其他引脚呈现高阻抗,这时上拉电阻已经不管作用了。如下图



I2C传输过程
I2C通信分为4个阶段,分别为起始位,寻址,数据传输,停止位。

起始位:
在SCL为高电压时,向SDA发送下降沿。

寻址:
主机向总线发送从机地址,从机地址分为10位和7位地址,一般为7位地址,而I2C一次性传输8位,最后一位就为读写位(0写1读),所以寻址发送的数据可以理解为:寻址数据=7位地址+1位读写位,并且I2C传输数据是当SCL为高电压时SDA上没有发生高低电平变换的数据。发送完地址后,主机释放SDA线等待从机应答,从机通过把SDA拉低来发送一个应答信号(ACK)。

数据传输:
I2C以字节为单位传输数据,每次可以传输多个字节。如果是写数据,那么主机向从机发送八个比特也就是一字节数据后释放SDA线等待从机ACK信号,然后主机再发送第二个字节,以此类推。

停止位:
在SCL为高电压时,向SDA发送上升沿。

I2C通信的几种模式



注:快速模式下可以设置时钟信号的占空比,分为两种情况,一个是低电压/高电压=2/1,和16/9,一般我们选择2/1。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/2302_77864418/article/details/147193085

使用特权

评论回复
沙发
xiyaoko2365| | 2025-4-30 23:34 | 只看该作者
它是一种多主机、双线制的总线,可以让多个设备连接在同一条总线上进行数据交换。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

140

帖子

1

粉丝