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

news/2024/5/17 3:27:30 标签: stm32, 嵌入式硬件, 单片机, c, c++, 51单片机, mcu
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="markdown_views prism-atom-one-dark"> cap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

class="toc">

文章目录

  • 前言
  • 一、I2C的结构层次
    • 1.1 怎样在两个设备之间传输数据
    • 1.2 I2C如何传输数据
    • 1.3 硬件框图
    • 1.4 软件层次
  • 二、IIC协议
    • 2.1 硬件连接
    • 2.2 I2C 总线的概念
    • 2.3 传输数据类比
    • 2.3 I2C信号
    • 2.4 I2C数据的含义
  • 总结


前言

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


一、I2C的结构层次

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

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

1.2 I2C如何传输数据

在I2C中࿰c;他有两个引脚

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

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

1.3 硬件框图

比如说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;我们只需要初始化好ssd1306࿰c;然后把数据写到显存里面来就可以。

1.4 软件层次

c="https://img-blog.csdnimg.cn/direct/f502c9eae86c4a56aaec756d07dcd2d3.png" alt="在这里插入图片描述" />

二、IIC协议

2.1 硬件连接

I2C在硬件上的接法如下所示࿰c;主控芯片引出两条线SCL,SDA线࿰c;在一条I2C总线上可以接很多I2C设备࿰c;我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。
c="https://img-blog.csdnimg.cn/direct/7c4324ea4c384937808cf4151f147304.png" alt="在这里插入图片描述" />

2.2 I2C 总线的概念

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

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

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

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

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

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

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

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

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

2.3 传输数据类比

先说明一些术语࿰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;主机会拉高SDA࿰c;如果找到了从机࿰c;从机会把SDA拉低࿰c;表示有这个设备
⑤ 老师说结束࿰c;表示 IIC 传输结束§

2.3 I2C信号

在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;表示现在没有数据要等一下

2.4 I2C数据的含义

在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;构建出稳定可靠的嵌入式系统。


http://www.niftyadmin.cn/n/5379737.html

相关文章

高速列车的空气动力学问题概述

1 高速铁路定义 高速铁路目前尚无全球统一的标准,普遍认定标准为新建线路上列车速度可达 250 km/h,或者既有线改造后可达 200 km/h 即可视为高速铁路。由于车辆、轨道、桥隧、调度、安全等多方面原因,当前没有用于货运用途的高速铁路&#x…

收藏:短时间快速健身类视频收藏1

现代人能健身时间少,在家里或者公司都可以做的健身类视频值得收藏,比如这个在家流氓步胜过户外慢跑步,大肚子没了,减的都是内脏脂肪_哔哩哔哩_bilibili 就是在家中,不断交替换脚跳,每次跳50个,分…

【机器学习案例7】计算机视觉中的小物体检测:基于补丁的方法

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《机器学习实用指南》本专栏旨在提供 1.机器学习经典案例及源码;2.开源机器学习训练数据集;3.机器学习前沿专业博文。以案例的形式从实用的角度出发,快速上手机器学习项目,在案例中成长…

告警能力中台设计与实践(二)——事件树系统

一、现有告警平台分析 在设计核心的告警数据模型时,本质上是对业务逻辑与整理数据流的梳理与设计。对于这部分不可高屋建瓴、想当然,需要有成熟的 取其精华、根据自身业务需求再做优化与改进才是正道。 笔者所在的部门SRE平台恰巧已有相关告警能力&…

【云原生进阶之PaaS中间件】第三章Kafka-4.4-消费者工作流程

1 消费者入门概述 1.1 基础概念 1.1.1 消费者群组 Kafka 里消费者从属于消费者群组,一个群组里的消费者订阅的都是同一个主题,每个消费者接收主题一部分分区的消息。 如上图,主题 T 有 4 个分区,群组中只有一个消费者&#xff0…

《Go 简易速速上手小册》第8章:网络编程(2024 最新版)

文章目录 8.1 HTTP 客户端与服务端编程 - Go 语言的网络灯塔与探航船8.1.1 基础知识讲解服务端编程客户端编程 8.1.2 重点案例:简易博客服务服务端实现客户端实现运行示例 8.1.3 拓展案例 1:增加文章评论功能功能描述服务端实现客户端实现 8.1.4 拓展案例…

掌握网络脉搏:深入解析OSI模型的传输层秘密

1. 传输层的基本概念和功能 OSI(开放式系统互连)模型是一个由国际标准化组织(ISO)提出的网络通信模型,包含七层架构。传输层位于第四层,主要负责在网络中的两个端点(通常是两台计算机&#xff…

Windows API中的MessageBox函数 展示一系列不同类型的消息框

这段代码是使用Windows API中的MessageBox函数来展示一系列不同类型的消息框。MessageBox函数是一个标准的Windows消息框显示函数,它创建一个模态对话框,用于显示文本、标题以及一组按钮。 代码中的每个MessageBox函数调用都会显示一个具有不同标志&…