在STM32 CubeMX环境中c;I2C(Inter-Integrated Circuit)是一种常用的串行通信协议c;广泛应用于连接各种外设和传感器。理解I2C的层次结构、协议和硬件结构对于STM32微控制器的开发至关重要。通过STM32 CubeMX提供的图形化配置工具c;我们能够更轻松地理解和配置I2C通信c;同时深入了解其层次结构、协议和硬件结构c;有助于更高效、可靠地设计嵌入式系统。
在两个设备之间进行数据的传输c;我们有两种方式c;一种是异步传输c;一种是同步传输。
比如串口c;他是异步传输。
比如I2Cc;他是同步传输。
在I2C中c;他有两个引脚
I2C是半双工的c;因为他只有一条数据线c;只能发送完了再接收或者接收完了再发送c;而我们的串口可以一边发送一边接收c;串口是全双工的。
比如说oled的硬件框图c;里面有一个ssd1306的主控芯片
c="https://img-blog.csdnimg.cn/direct/507d43ce69eb442ba2fb2953d334cce9.png" alt="在这里插入图片描述" />
如果我们想在屏幕上显示文字c;我们只需要编写程序来初始ssd1306芯片
接下来我们把数据通过IIC总线写到ssd1306里面的显存来:
c="https://img-blog.csdnimg.cn/direct/eefd72a4e98a4ccf992a3d636fb70b5b.png" alt="在这里插入图片描述" />
显存里面就保存着要显示的数据。这个芯片会周而复始的把数据刷到屏幕里面。
在以后c;我们只需要初始化好ssd1306c;然后把数据写到显存里面来就可以。
c="https://img-blog.csdnimg.cn/direct/f502c9eae86c4a56aaec756d07dcd2d3.png" alt="在这里插入图片描述" />
I2C在硬件上的接法如下所示c;主控芯片引出两条线SCL,SDA线c;在一条I2C总线上可以接很多I2C设备c;我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。
c="https://img-blog.csdnimg.cn/direct/7c4324ea4c384937808cf4151f147304.png" alt="在这里插入图片描述" />
I2C(Inter-Integrated Circuitc;又称 IIC)总线是一种由 PHILIPS 公司开发的串行总
线c;用于连接微控制器及其外围设备c;它具有如下特点:
只有两条总线线路:一条串行数据线(SDA)c;一条串行时钟线(SCL)。
每个连接到总线的器件都可以使用软件根据它的惟一的地址来识别。
传输数据的设备间是简单的主/从关系。
主机可以用作主机发送器或主机接收器。
它是一个真正的多主机总线c;两个或多个主机同时发起数据传输时c;可以通过冲
突检测和仲裁来防止数据被破坏。
串行的 8 位双向数据传输c;位速率在标准模式下可达 100kbit/sc;在快速模式下
可达 400kbit/sc;在高速模式下可达 3.4Mbit/s。
片上的滤波器可以增加抗干扰功能c;保证数据的完整。
连接到同一总线上的 IC 数量只受到总线的最大电容 400pF 的限制。
对于I2C协议c;一个I2C总线可以接多个设备.
先说明一些术语c;如下所示。
◼ 发送器:发送数据到总线的器件
◼ 接收器:从总线接收数据的器件
◼ 主机:发起/停止数据传输、提供时钟信号的器件
◼ 从机:被主机寻址的器件
◼ 多主机:可以有多个主机试图去控制总线c;但是不会破坏数据
◼ 仲裁:当多个主机试图去控制总线时c;通过仲裁可以使得只有一个主机获得总线
控制权c;并且它传输的信息不被破坏
◼ 同步:多个器件同步时钟信号的过程
比如说:上体育课c;一个老师和多个学生:
c="https://img-blog.csdnimg.cn/direct/1a54328eb2ea42979992045e89757f9c.png" alt="在这里插入图片描述" />
发球:
老师:开始了(start)
老师:A!我要发球给你!(地址/方向)
学生A: 到!(回应)
老师把球发出去(传输)
A收到球之后c;应该告诉老师一声(回应)
老师: 结束(停止)
接球:
老师:开始了(start)
老师: B!把球发给我!(地址/方向)
学生B:到!
B把球发给老师(传输)
老师收到球之后c;给B说一声c;表示收到球了 (回应)
老师:结束(停止)
① 老师说开始了c;表示开始信号(start)
② 老师提醒某个学生要发球c;表示发送地址和方向(address/read/write)c;发送的第一个字节前7位表示发送的地址c;最后一位表示是写还是读c;0位读c;1为写。
③ 老师发球/接球c;表示数据的传输
④ 到球要回应:回应信号(ACK)c;传输完一位后c;主机会拉高SDAc;如果找到了从机c;从机会把SDA拉低c;表示有这个设备
⑤ 老师说结束c;表示 IIC 传输结束§
在SCL为高电平的期间c;SDA数据要保持稳定(对方就是在SCL为高电平期间来读取SDA数据的)c;如果你想修改下一位数据c;你需要把SCL拉低c;保持SCL为低电平c;在SCL为低电平期间c;SDA切换数据c;如下图所示:
c="https://img-blog.csdnimg.cn/direct/a42bbd96f76a4909bd407e2561fc38e7.png" alt="在这里插入图片描述" />
如果说c;主机传输完了开始信号c;但是数据并没有准备好c;那么我们的SCL拉低c;等待我们的数据到来c;他可以由主机拉低也可以由从机拉低c;表示现在没有数据要等一下
在I2C中c;有下面的数据传输:
c="https://img-blog.csdnimg.cn/direct/69e56c771c2747dc98f977ecbee327ea.png" alt="在这里插入图片描述" />
第一个8位表示地址和读写标识c;但是后面的并未规定他有什么含义
如果说c;你要去访问一个存储芯片c;你确定地址之后c;你就可以发送数据
如果你想写c;你肯定先要确定写地址c;后面的就是存储数据
如果是读操作:
c="https://img-blog.csdnimg.cn/direct/cc0b1f0e1eb5457b8f11a5e8876005e6.png" alt="在这里插入图片描述" />
在上一次你把存储地址发给设备了c;在第二次你发起一个读操作c;他就把那个地址上的数据返回给你。
这些数据的含义完全由芯片决定!
在STM32 CubeMX环境中c;对I2C的深入理解对于嵌入式系统的开发至关重要。I2C的层次结构、协议和硬件结构直接影响了通信的效率和可靠性。通过使用STM32 CubeMX的图形化配置工具c;我们能够更便捷地进行I2C通信的配置c;提高了开发效率。总体而言c;对于STM32微控制器开发者而言c;深入了解I2C的各个方面c;有助于更好地利用该通信协议c;构建出稳定可靠的嵌入式系统。