【STM32 CubeMX】I2C层次结构、I2C协议

本文详细介绍了在STM32CubeMX环境中I2C通信的工作原理,包括I2C的结构层次、协议特性、硬件连接以及在实际应用如OLED显示器控制中的运用。理解这些对于嵌入式系统开发至关重要,通过STM32CubeMX简化配置,提升开发效率。
摘要由CSDN通过智能技术生成


前言

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,广泛应用于连接各种外设和传感器。理解I2C的层次结构、协议和硬件结构对于STM32微控制器的开发至关重要。通过STM32 CubeMX提供的图形化配置工具,我们能够更轻松地理解和配置I2C通信,同时深入了解其层次结构、协议和硬件结构,有助于更高效、可靠地设计嵌入式系统。


一、I2C的结构层次

1.1 怎样在两个设备之间传输数据

在两个设备之间进行数据的传输,我们有两种方式,一种是异步传输,一种是同步传输。
比如串口,他是异步传输。
比如I2C,他是同步传输。

1.2 I2C如何传输数据

在I2C中,他有两个引脚

  • SCL
    SCL为时钟信号,在时钟的同步下,我们就可以进行数据的传输
  • SDA
    SDA进行数据的传输。

I2C是半双工的,因为他只有一条数据线,只能发送完了再接收或者接收完了再发送,而我们的串口可以一边发送一边接收,串口是全双工的。

1.3 硬件框图

比如说oled的硬件框图,里面有一个ssd1306的主控芯片
在这里插入图片描述
如果我们想在屏幕上显示文字,我们只需要编写程序来初始ssd1306芯片
接下来我们把数据通过IIC总线写到ssd1306里面的显存来:
在这里插入图片描述
显存里面就保存着要显示的数据。这个芯片会周而复始的把数据刷到屏幕里面。
在以后,我们只需要初始化好ssd1306,然后把数据写到显存里面来就可以。

1.4 软件层次

在这里插入图片描述

二、IIC协议

2.1 硬件连接

I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。
在这里插入图片描述

2.2 I2C 总线的概念

I2C(Inter-Integrated Circuit,又称 IIC)总线是一种由 PHILIPS 公司开发的串行总
线,用于连接微控制器及其外围设备,它具有如下特点:
只有两条总线线路:一条串行数据线(SDA),一条串行时钟线(SCL)。

每个连接到总线的器件都可以使用软件根据它的惟一的地址来识别。

传输数据的设备间是简单的主/从关系。

主机可以用作主机发送器或主机接收器。

它是一个真正的多主机总线,两个或多个主机同时发起数据传输时,可以通过冲
突检测和仲裁来防止数据被破坏。

串行的 8 位双向数据传输,位速率在标准模式下可达 100kbit/s,在快速模式下
可达 400kbit/s,在高速模式下可达 3.4Mbit/s。

片上的滤波器可以增加抗干扰功能,保证数据的完整。

连接到同一总线上的 IC 数量只受到总线的最大电容 400pF 的限制。

对于I2C协议,一个I2C总线可以接多个设备.

2.3 传输数据类比

先说明一些术语,如下所示。
◼ 发送器:发送数据到总线的器件
◼ 接收器:从总线接收数据的器件
◼ 主机:发起/停止数据传输、提供时钟信号的器件
◼ 从机:被主机寻址的器件
◼ 多主机:可以有多个主机试图去控制总线,但是不会破坏数据
◼ 仲裁:当多个主机试图去控制总线时,通过仲裁可以使得只有一个主机获得总线
控制权,并且它传输的信息不被破坏
◼ 同步:多个器件同步时钟信号的过程

比如说:上体育课,一个老师和多个学生:
在这里插入图片描述

发球:
老师:开始了(start)
老师:A!我要发球给你!(地址/方向)
学生A: 到!(回应)
老师把球发出去(传输)
A收到球之后,应该告诉老师一声(回应)
老师: 结束(停止)

接球:
老师:开始了(start)
老师: B!把球发给我!(地址/方向)
学生B:到!
B把球发给老师(传输)
老师收到球之后,给B说一声,表示收到球了 (回应)
老师:结束(停止)

① 老师说开始了,表示开始信号(start)
② 老师提醒某个学生要发球,表示发送地址和方向(address/read/write),发送的第一个字节前7位表示发送的地址,最后一位表示是写还是读,0位读,1为写。
③ 老师发球/接球,表示数据的传输
④ 到球要回应:回应信号(ACK),传输完一位后,主机会拉高SDA,如果找到了从机,从机会把SDA拉低,表示有这个设备
⑤ 老师说结束,表示 IIC 传输结束§

2.3 I2C信号

在SCL为高电平的期间,SDA数据要保持稳定(对方就是在SCL为高电平期间来读取SDA数据的),如果你想修改下一位数据,你需要把SCL拉低,保持SCL为低电平,在SCL为低电平期间,SDA切换数据,如下图所示:
在这里插入图片描述
如果说,主机传输完了开始信号,但是数据并没有准备好,那么我们的SCL拉低,等待我们的数据到来,他可以由主机拉低也可以由从机拉低,表示现在没有数据要等一下

2.4 I2C数据的含义

在I2C中,有下面的数据传输:
在这里插入图片描述
第一个8位表示地址和读写标识,但是后面的并未规定他有什么含义

如果说,你要去访问一个存储芯片,你确定地址之后,你就可以发送数据
如果你想写,你肯定先要确定写地址,后面的就是存储数据

如果是读操作:
在这里插入图片描述
在上一次你把存储地址发给设备了,在第二次你发起一个读操作,他就把那个地址上的数据返回给你。
这些数据的含义完全由芯片决定!


总结

在STM32 CubeMX环境中,对I2C的深入理解对于嵌入式系统的开发至关重要。I2C的层次结构、协议和硬件结构直接影响了通信的效率和可靠性。通过使用STM32 CubeMX的图形化配置工具,我们能够更便捷地进行I2C通信的配置,提高了开发效率。总体而言,对于STM32微控制器开发者而言,深入了解I2C的各个方面,有助于更好地利用该通信协议,构建出稳定可靠的嵌入式系统。

  • 27
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32CubeMX是一个用于配置STM32微控制器的图形化工具。其中,IIC是一种集成电路总线,用于实现同步串行半双工通信。使用STM32CubeMX配置IIC时,可以根据需要选择硬件IIC或软件IIC。硬件IIC相对复杂一些,但使用STM32CubeMX进行配置并使用特定函数即可实现IIC通信的过程非常简单。在生成工程后,可以在相关代码中找到IIC的配置信息,包括模式和相关IO口的配置。在使用硬件IIC时,重要的函数有HAL_I2C_Mem_Write和HAL_I2C_Mem_Read,它们可以用于在不同模式下进行IIC通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32CubeMx_IIC硬件配置.zip](https://download.csdn.net/download/weixin_44453694/12418466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [STM32硬件IIC实验(STM32CubeMx配置)](https://blog.csdn.net/a1169511636/article/details/131727553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人才程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值