STM32(十五):I2C通信

I2C通信

        I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线,实现单片机读写外部模块寄存器的功能。

        两根通信线:SCL(Serial Clock)、SDA(Serial Data)

        同步,半双工  :同步时序可以极大程度降低对硬件电路的依赖。

        带数据应答

        支持总线挂载多设备(一主多从、多主多从)

硬件电路

        所有I2C设备的SCL连在一起,SDA连在一起

        设备的SCL和SDA均要配置成开漏输出模式

        SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

        空闲状态下,主机可以主动发起对SDA的控制;只有在从机发送数据和从机应答的时候,主机才会转交SDA的控制权给从机。

        主机对SCL线完全控制,任何时候从机不允许控制SCL线。 

        禁止所有设备输出强上拉的高电平,采用外置弱上拉电阻加开漏输出模式。

        从机设备地址,在I2C协议标准里分为7位地址和10位地址,目前只讲7位地址。出厂时候,厂商会分配一个地址。

 I2C时序基本单元

        起始条件:SCL高电平期间,SDA从高电平切换到低电平

        终止条件:SCL高电平期间,SDA从低电平切换到高电平

        当主机需要进行数据收发时,首先要打破总线的宁静,产生一个起始条件:SCL高电平不去动它,把SDA拽下来,产生一个下降沿。从机捕获到SCL高电平,SDA下降沿,就会进行自身的复位,等待主机召唤。下降沿之后,主机要把SCL也拽下来:一方面是占用这个总线,另一方面也是为了方便我们这些基本单元的拼接。

        起始和中止均由主机产生。


        发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后主机释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

 


        接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)

        低电平变换数据,高电平读取数据。

        实线部分数主机控制的电平,虚线部分表示从机控制的电平。


        发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

        接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

I2C时序

指定地址写

对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)

        Slave Address:主机地址7位  读写位1位 0读1写  

当前地址读

对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data)

         从机中,所有寄存器被分配到了一个线性区域中,并且会有一个单独的指针变量,指示这其中一个寄存器,上电默认0地址。每写入、读出一个字节后,指针自增1.

指定地址读

对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data)

 

 

 

为什么有了USART串口通信还需要I2C通讯?

        在STM32微控制器中,USART(通用同步/异步收发器)串口通信和I2C(Inter-Integrated Circuit)通信是两种不同的通信方式,它们各自具有独特的优势和应用场景,因此即使有了USART串口通信,也需要I2C通信。以下是两者之间的主要区别和为什么需要两者共存的原因:

USART串口通信

  1. 全双工通信:USART是一种全双工通信方式,允许数据在同一时刻双向传输(即同时发送和接收数据)。
  2. 异步通信:USART是异步通信方式,它不需要时钟信号来同步发送和接收双方的数据传输,而是通过起始位、数据位、校验位和停止位等组成的帧格式来同步。
  3. 多参数配置:USART支持多种参数配置,如波特率、数据位长度、校验位和停止位等,使得USART能够灵活地适应不同的通信需求。
  4. 应用广泛:USART串口通信在单片机与单片机、单片机与电脑、单片机与其他模块之间的通信中应用广泛,因为它成本低、容易使用且通信线路简单。

I2C通信

  1. 同步半双工通信:I2C是一种同步半双工通信方式,它通过一根时钟线(SCL)和一根数据线(SDA)实现通信。在同一时刻,只有一个设备可以发送数据,而另一个设备接收数据。
  2. 多设备挂载:I2C的一个主要优势是可以通过一个总线挂载多个设备,这些设备共享相同的时钟线和数据线,通过设备地址来区分不同的设备。这使得I2C在需要连接多个外设的场景中非常有用。
  3. 简单高效:I2C通信协议相对简单,且只需要两根线即可实现多个设备之间的通信,这使得系统的布线和设计更加简单高效。
  4. 硬件和软件支持:STM32等微控制器通常内置了I2C硬件外设,这使得I2C通信的实现更加简单和高效。同时,也可以通过软件模拟I2C通信协议,以适应不同的应用需求。

为什么需要两者共存

  1. 应用场景不同:USART和I2C通信各有其独特的应用场景。USART适合需要高速、长距离或大量数据传输的场合,如单片机与电脑之间的通信;而I2C则适合需要连接多个外设、布线简单的场合,如传感器网络、智能家居等。
  2. 功能互补:USART和I2C通信在功能上具有一定的互补性。USART的全双工和异步通信特性使得它在某些应用场合中更加灵活和高效;而I2C的多设备挂载和简单高效的通信方式则使得它在其他应用场合中更加受欢迎。
  3. 系统设计需求:在实际的系统设计中,可能需要同时用到USART和I2C通信。例如,一个微控制器可能需要通过USART与电脑进行通信以传输大量数据,同时还需要通过I2C连接多个传感器以收集数据。因此,在STM32等微控制器中同时支持USART和I2C通信是非常必要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/425730.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css百分比布局中height:100%不起作用

百分比布局时,我们有时候会遇到给高度 height 设置百分比后无效的情况,而宽度设置百分比却是正常的。 当为一个元素的高度设定为百分比高度时,是相对于父元素的高度来计算的。当没有给父元素设置高度(height)时或设置…

Celery的使用

Celery 一、Celery概述1. 特点:2. celery组成3. 安装与使用4. 邮箱配置二、Celery的使用实操——发送邮件1. 安装2. 配置一、Celery概述 1. 特点: 2. celery组成 配置任务队列Broker,采用redis保存要执行的任务队列 Client:任务的发出者 Worker:任务的处理者 3. 安装与使用…

『功能项目』第三职业弓弩的平A【58】

我们打开上一篇57第二职业法师的平A的项目, 本章要做的事情是实现第三职业弓弩的平A伤害 首先修改脚本:MagicBall.cs 将脚本挂载在Sphere预制体身上 注意组件设置 运行项目 本章做了第三职业弓弩的平A伤害及显示伤害UI 接下来文章的内容: …

如何升级用 Helm 安装的极狐GitLab Runner?

本分分享如何对 Helm 安装的 Runner 进行升级。整个过程分为三步:1、确定 Runner 最新版本或者想要升级的版本是否存在;2、用 Helm upgrade 命令进行升级;3、升级确认。 极狐GitLab 为 GitLab 的中国发行版,中文版本对中国用户更…

Mac笔记本上查看/user/目录下的文件的几种方法

在Mac笔记本上查看/user/下的文件,可以通过多种方法实现。以下是一些常见的方法: 一、使用Finder 打开Finder:点击Dock栏中的Finder图标,或者使用快捷键Command F。 导航到用户目录: 在Finder的菜单栏中&#xff0…

编译运行 webAssembly(wasm)

环境准备&#xff1a; lunix下docker 参考https://hub.docker.com/r/emscripten/emsdk 拉编译环境 docker pull emscripten/emsdk 编译 随便找个目录&#xff0c;敲下面命令&#xff0c;编译一个webAssembly 程序 # create helloworld.cpp cat << EOF > hellowo…

【nginx】搭配okhttp 配置反向代理

nginx的默认是一个反向代理。 nginx会默认把输入的请求,转向其他的服务器执行。 这些转向的服务器与客户端发起的服务器不是同一个。 客户端只认识nginx,不知道ngiix转向何方。 正向代理修改okhttp的proxy,实际上很多代理都是正向的。 反向代理修改请求路径到nginx。 感觉还…

在线IP代理检测:保护您的网络安全

在互联网飞速发展的今天&#xff0c;越来越多的人开始意识到网络安全和隐私保护的重要性。在线IP代理检测工具作为一种有效的网络安全手段&#xff0c;能够帮助用户识别和检测IP代理的使用情况&#xff0c;从而更好地保护个人隐私和数据安全。本文将详细介绍在线IP代理检测的相…

鸿蒙开发之ArkUI 界面篇 五

Image 图片组件&#xff0c;用专门用于显示图片 语法&#xff1a;Image(图片源)&#xff0c;这里可以是网络、也可以是本地的图片 例如&#xff1a;Image(https://wxls-cms.oss-cn-hangzhou.aliyuncs.com/online/2024-04-18/218da022-f4bf-456a-99af-5cb8e157f7b8.jpg)效果如下…

# wps必须要登录激活才能使用吗?

WPS 必须登录激活才能使用吗&#xff1f; 如下图&#xff0c;当我们使用WPS时&#xff0c;不登录会显示工具栏灰色不可用状态。 答&#xff1a;WPS 不一定要登录激活才能使用。 一、免费使用的情况 1、基础功能 在不登录的情况下&#xff0c;用户可以使用 WPS 的一些基础功…

3.Java高级编程实用类介绍(一)

三、Java高级编程实用类介绍(一) 文章目录 三、Java高级编程实用类介绍(一)一、枚举类型二、包装类三、Math 一、枚举类型 使用enum进行定义 public enum 枚举名字{值1,值2.... }二、包装类 每个基本类型在java.lang包中都有一个相应的包装类 /** new包装类&#xff08;字符…

python selenium网页操作

一、安装依赖 pip install -U seleniumselenium1.py&#xff1a; from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Chrome() driver.get("https://www.selenium.dev/selenium/web/web-form.html") title driver.ti…

uniapp使用高德地图设置marker标记点,后续根据接口数据改变某个marker标记点,动态更新

最近写的一个功能属实把我难倒了,刚开始我请求一次数据获取所有标记点,然后设置到地图上,然后后面根据socket传来的数据对这些标记点实时更新,改变标记点的图片或者文字, 1:第一个想法是直接全量替换,事实证明这样不行,会很卡顿,有明显闪烁感,如果标记点比较少,就十几个可以用…

[数据集][图像分类]茶叶病害分类数据集6749张7类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;6749 分类类别数&#xff1a;7 类别名称:["Unlabeled","alg…

反编译 AndroidManifest.xml文件-android反编译技术

一、安卓打包后目录 想要查看原来版本配置和关联信息&#xff0c;被打包了&#xff0c;这时候需要工具 AXMLPrinter2.jar 二、反编译环境要求 序号软件说明1java电脑得有java环境2AXMLPrinter2.jarapk中xml解析文件 三、反编译指令 java -jar AXMLPrinter2.jar "C:\Us…

钻机、塔吊等大型工程设备,如何远程维护、实时采集运行数据?

在建筑和工程领域&#xff0c;重型设备的应用不可或缺&#xff0c;无论是在道路与桥梁建设、高层建筑施工&#xff0c;还是在风电、石油等能源项目的开发中&#xff0c;都会用到塔吊、钻机等大型机械工程设备。 随着数字化升级、工业4.0成为行业发展趋势&#xff0c;为了进一步…

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 &#x1f378;前言 &#x1f37b;一、台式电脑基本组成 &#x1f37a;二、组装 &#x1f379;三、安装系统 &#x1f44b;四、系统设置 &#x1f440;五、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

数据结构——复杂度讲解

已经太久没用更新了&#xff0c;由于各种原因&#xff0c;导致很久没用更新了&#xff0c;但是停更期间我也是一直在很努力的学习与复习之前学过的知识&#xff0c;读了两本C语言的数据&#xff0c;初学者也是可以看的&#xff0c;推荐给大家&#xff0c;如果需要pdf&#xff0…

【车载以太网】【SOME/IP】Wireshark 解析

目录 ​​​​​​​Wireshark 官方插件 相关代码: 启用协议插件 Lua插件 测试数据包 Wireshark 下载链接:Wireshark Go DeepSOMEIP插件介绍:https://www.wireshark.org/docs/dfref/s/someip.html官方插件 Wireshark从3.2版本开始支持SOME/IP,启用相应的插件即可以…

机器学习-梯度下降实验一

import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split, KFold from sklearn.metrics import mean_squared_error, r2_score from mpl_toolkits.mplot3d import Axes3D # 用于3D图plt.rcParams[fon…