STM32硬件I2C与软件模拟I2C超详解

      最后更新:2022-05-13 15:43:01 手机定位技术交流文章

      目录

      • 一.I2C协议简介
      • 二.I2C物理层
      • 三.I2C协议层
        • I2C 基本读写方法
        • 1.空闲状态
        • 二,启动并停止信号。
        • 3.数据有效性
        • 4.地址及数据方向
        • 五. 反应和不反应的信号
      • 四.硬件I2C
        • (重点) I2C 外部功能框架图
        • 1.通信引脚
        • 2.时钟控制逻辑
        • 3.数据控制逻辑
        • 4.整体控制逻辑
        • 5.I2C STM32(关键)的对外通信进程
          • 主发送器
          • 主接收器
        • I2C 初始化结构 6
      • EEPROM V介绍
        • 一.STM32读取EPROM的字节,然后写下来。
        • 2 STM32从EPROM(页面)中写出大量字节。
        • 三. STM32读取来自EEPROM任何地点的随机数据。
        • 四.STM32随机读取EEPROM中任何地址的数据。
      • 以硬件 I2C 读写 EEPROM 实验
        • 实验目的
        • 实验原理
        • 源码
        • 实验效果
      • 软件模式的 I2C 协议
        • 实验目的
        • 实验原理
        • 源码
      • 八.总结

      一.I2C协议简介

      菲尔普斯创立了I2C通讯协议(综合电路)。由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等外部通信设备。 (平板转换芯片。 )系统内许多集成电路之间的通信正变得司空见惯。

      I2C只有一个数据总线,即 " 序列数据线 ",用于一对一的数据传输和序列通信。半双工通信

      • 半双向通信:双向通信是可能的,但双向通信可能不是双向同时发生,必须旋转,众所周知,单工作通信可以转换,同时只能按一个方向进行通信,只使用一条数据线。

      就I2C通信议定书而言,它分为物理层和议定书层的物理层,界定具有机械、电气(硬件)部件的通信系统的特征,保证物理媒介的原始数据传输。协议的数量从根本上界定了通信逻辑。接收者和发送者的数据包装和包装标准标准化(软件一级)。

      二.I2C物理层

      I2C是连接通信装置的常用方法。

      在这里插入图片描述
      (1) 它是支助设备的公共汽车线路,“住房”是指几个装置共用的信号线,多I2C通信装置可在I2C通信公共汽车上连接,以支持多个通信主机和多个通信运营商。

      (2) 单一辆I2C公共汽车只需要两条公共汽车线。过去曾形成双向数据线SDA(系列数据线)字符串。SCL( 序列数据线) 是一系列的时钟线 。数据线用于表示信息。时钟线用于同步输入和输出数据 。

      (3) 当I2C装置是免费的时,主线通过上下推动获得电力供应。会输出高阻态等所有设备齐备后走出高抗力模式后,将公交车换成高空模式。

      请参阅GPIO港的八种经营方式。
      在这里插入图片描述

      输出输出 PMS 功能不起作用 。
      一. 当内存输出为高水平时,则使用相当于()的拉出高耐力。开路(b) 如果在I2C SDA大巴上到达脚,默认情况下将公交车拉到高水平。
      二. 当输出内存输出为低水平时, 脚输出也是低水平的 。
      在这里插入图片描述
      在这里插入图片描述
      复用功能开漏输出

      但是,您可以重新使用功能模式、输出能量、输出速度配置和功能性泄漏模式。输出信号来自其他外部因素(I2C)。, GPIOx_ODR 输出数据登记册有错误;有输入,输入数据登记册后得出当前 I/O 状态 。然而,数据信号通常直接从场外登记册中采集。

      SMT32, I2C 外推的双腿自失能装置在此使用,而 SCL 程序可以重复函数的泄漏输出模式和从 I2C 外推获得的输出信号。

      你为什么想要激活泄漏模式?
      以及为什么两条公共汽车线不得不拖到高水平, 巴士假定是高水平, 如下图所示。
      在这里插入图片描述
      为什么SDA和SCL必须出口高耐力(相当于取消与SDA和SCL公共汽车的连接),而该设备显然为了不干扰其他通信设备的目的不活动?

      (4) 为了避免数据冲突,当许多主机同时使用公交车时,仲裁被用来选择使用公交车的哪些设备,即在提供数据之前,设备将检查I2C公交车是否繁忙(公交车的繁忙程度应较低)。

      (5) I2C有三种传输方式:标准模式传输率为100千比特/秒,快速模式传输率为400千比特/秒,高速模式传输率最高为3.4百万比特/秒,然而,目前大多数I2C设备不使用高速模式。

      连接公交车的每个设备都有自己的地址, 主机可以使用这些地址与其他设备进行通信。 地址也是信息。 匹配成功后, 主机可以使用自失能车提供的地址出去, 公交车上安装的设备将相互匹配, 彼此沟通 。

      三.I2C协议层

      STM32可用作主机或附属物品,本篇文章将重点论述如何将STM32用作读写数据的主机。
      只有从主机, I2C 设置通信时钟, 开始并停止信号 。

      以下是SPM32主机 带有EPROM内存的一个例子。

      I2C 基本读写方法

      • 一. 从机器到机器的热数据传输
        在这里插入图片描述
        当最后一个字节被发送到这里时, 主机不需要接收机器的非响应信号来发送停止信号。 即使响应来自主机, 也可以直接发送停止信息结束它 。

      表示由主机的 I2C 接口创建的传输启动信号(S),该信号将在初始信号产生后从机器接收,用于与 I2C 公共汽车的所有连接。 初始信号产生后,将建立主机的 I2C 接口创建的传输启动信号(S)。 初始信号产生后,所有与 I2C 公共汽车连接的传输启动信号(S)将从机器接收。
      在I2C巴士上,从航班地址(SLAVE_ADRESS)上。每个装置的地址是唯一的当主机广播地址与设备匹配时,设备会被选中,数据信号(高抗力输出和两条主线被切断)被未选中的设备忽略。

      根据 I2C 协议, 这可以是机器的 7 或 10 位数, 当机器收到匹配的地址时, 主机或从机会返回 ACK 或 NACK 信号, 而主机只能在收到回复后继续传输或接收数据 。

      地址之后是选择传输方向,指明其背后数据传输的方向。
      0时,主机主机将从机器上写入数据。
      机器的数据由主机在1点钟读取。

      • 二. 读取机器数据所需时间

      在这里插入图片描述
      记住,数据接收方产生响应信号(对我来说,对于我,对于数据)或不反应信号(对于我,我不想要数据)的并不总是主机。

      • 三. 多种格式的阅读和写作数据
        在这里插入图片描述
        第一个通信是发现机器的内部内存或读写存储器的地址,第二个是读或写内部登记册或内存地址以上数据是最后确定的。

      1.空闲状态

      I2C大巴的两个信号线,即SDA和SCL, 在同一时间都是高功率的,大巴闲置,大巴上安装的所有设备都高度耐力(相当于与大巴断线),两条大巴线被高耐力塞拉高。

      二,启动并停止信号。

      在这里插入图片描述
      当SCL线从高线转到低线,而SDA线则高线时,这是一个起始信号。
      当短链氯化石蜡处于高水平时,自失能装置线从低线转到高线。

      注意:
      SCL是高级、自失能和自失能装置的程序,而不仅仅是低和低级别程序,被称为初始和停止信号。

      只有主机才能产生开始和停止信号

      3.数据有效性

      在这里插入图片描述
      在这里插入图片描述
      SDA数据线每个SCL时钟周期(时钟脉冲)携带一个数据包。

      • SCL是一个高等级的时期,这意味着数据如SDA所显示的那样是真实的,SDA的水平是一致的,数据是高等级的“1”和低等级的“0”。

      • SCL是一个低级协议:SDA数据无效,通常在目前进行。电平切换准备下一次数据指示。

      在这里插入图片描述
      8比特/字节用于传输数据和地址。先传输数据的高位发送的字节数量不受限制。

      4.地址及数据方向

      I2C总线上每个设备都有自己的独立地址,主机在SDA信号线上传送设备地址(SLAVE_ADPRESS),当它开始通信时,该设备在SDA信号线上。I2C协议允许设备地址为7或10位,视设备而定。更多使用7位数的地址。设备地址附近的数据位置用于识别数据传输方向,即第8位或第11位。

      • 数据方向 : “ 1 ” 表示主机读取机器的数据 。
      • 数据方向零:表示主机将从机器中写入数据。
        在这里插入图片描述

      首要机会是控制SDA信号线的发射,控制机器上的SDA信号线(将数据传送到主机),接收主机的信号,写出数据方向,SDA由主机控制(将数据传送到机器),在读取数据方向时接收机器的信号。

      五. 反应和不反应的信号

      I2C 数据和地址传输在作为数据接收器发挥作用的同时,也得到了反应。 答复包括“ 回复( ACKs) ” 和“ 非回复( NACKs) ” 的信号。数据接收结束(不论主机是否主机)在从 I2C 收到字节数据或地址后,允许您继续发送数据 。重要的是将“ACK”信号传送到贴有标签的“Access to the ACK”(Acquis)”和“Access to the ACK”(ACK)(Acc)信号的标签上的另一面。如果接收方决定终止数据传输,交付方将发送以下数据。寄到另一边的贴有标签的“NACK”(“NACK”), 然后寄到另一边的“NACK”(“NACK”), (“NACK”), (“NACK”), (“N-N-N-K”), (“N-N-N-K”), (“N-N-N-K”), (“N-N-K), (“N-N-K”), (“N-N-K”), (“N-N-K), (“N-N-K), (“N-N-K”), (“N-N-N-K), (“N-N-K”), (“N-N-K”), (“NN-N-K), (“NN-N-K”), (“N-N-K)), (“N-N-K”), (“N-N-K”), (“N-N-K”), (“N-K”) (“N-N-K”)。当发送者收到信号时,它产生一个停止信号。结束信号传输。

      八小时后,一个字节传输。第9个时钟期间,接收器必须返回发报机的响应位置(ACK)或无响应位置(NACK)。
      在这里插入图片描述
      大约九点左右SDA控制由数据发送人发布。数据接收器控制自失能系统,向发送者发送响应或无响应信号。

      • 高空是自失能(SDA):无反应信号(NACK)。

      • SDA是一个低级信号:回答信号(ACK)。

      为什么数据发送器放弃自失能控制(将自失能总线提高到高水平)?
      在这里插入图片描述

      四.硬件I2C

      我不得不吐口水 在这个硬件I2C 在谈论它之前。当它被困在事故测试中时 迟早会来不及了在重新启动之前关掉电源至关重要。然而,可能存在硬件I2C问题。今后也许没有必要这样做,但我们大多正在研究如何使用硬件达成国际2C协议。这将有助于我们以后学到其他东西。

      • I2C 硬件: 直接利用STM32芯片中的 I2C 硬件,硬件 I2C 与USART 序列端口相似,因为它生成标准序列协议时间序列,只要正确注册即可。利用外部的I2C是一种方便的办法,以I2C议定书的形式控制I2C的场外通信,而不需要内核直接操作触发器的火花。

      • I2C软件模拟:I2C协议要求直接使用CPU内核,以控制全球定位系统组织的低水平和高水平输出。如果控制生成初始 I2C 信号,脚输出的高端输出最初由作为SCL线的GPIO控制。然后,GPS基点作为SDA线加以控制,以在这一间隔期间完成从高水平向低水平的转变。最后,将SCL线开关设为低。这将生成正常的 I2C 启动信号 。

      为规范基础,I2C硬件直接利用外部设置。它减少了CPU的负荷。。不过使用作为SCL和SDA的固定拖脚的I2C装置。要启动程序, 程序会使用任何 GPIO 复制 I2C 。 它相对适应性较强 。

      (重点) I2C 外部功能框架图

      在这里插入图片描述

      1.通信引脚

      在STM32中,有两种I2C配置,而硬件I2C是使用这些引信所必需的,因为它们与I2C连接,例如I2C1外部,PB6和PB7附在装置内。

      在这里插入图片描述
      例如,使用了正原子的STM32mini版本。东道主(stm32)使用PB6、PB7作为SCL和SDA脚。但是,PB6和PB7与EPROM的SCL没有联系,我们需要与之互动。SDA的足线是I2C巴士PC12和PC11链接到EEPROM的SCL。SDA引脚,所以我们用Dubon线 连接PB6和PB7 PC12和PC11这将间接安装PB6。PB7与EEPROM的SCL和SDA脚相连。组成I2C总线。

      如果您使用 I2C1 与 EEPROM 进行互动,而不将 PB6 和 PB7 连接到 EEPROM 的 SCL, 如果您写花朵, SDA 将是无用的 。
      原理图:
      在这里插入图片描述
      实物图:
      在这里插入图片描述

      2.时钟控制逻辑

      在这里插入图片描述
      时钟控制寄存器
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      由于I2C1安装在APB1总线上,所以它是Tpclk1。
      在这里插入图片描述

      这只是一个如何计算发件人的数值的示例。 我们只需要通过使用图书馆功能来指定相应的登记册参数。 图书馆功能会帮助我计算自动写作。 不要吓坏了 。

      3.数据控制逻辑

      在这里插入图片描述

      • 在发送数据时,数据传输登记册使用数据储存库,通过SDA信号线一次传送数据。

      • 数据传输登记册在从外部接收数据时,将数据从SDA信号线上的数据保存在数据登记册中单一地点。

      数据随后通过CPU或DMA书写或读到数据登记册(通过一个阵列储存在一个阵列中)。

      数据寄存器DR
      在这里插入图片描述
      自身地址寄存器1
      在这里插入图片描述
      在这里插入图片描述

      4.整体控制逻辑

      在此选择几个密钥保存器槽, 然后配置 I2C 远程硬件逻辑, 以自动控制 SDA 和 SCL 巴士, 生成 I2C 协议时间序列, 如: 启动信号、 响应信号、 停止信号等等 。
      在这里插入图片描述

      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      以下是我们发现:

      • BRR代表公交车错误。

      在地址或数据字节传输期间,如果 I2C 接口检测到一个公交车错误是由外部停放或启动环境造成的。。此时:

      Berr 位数设为“ 1 ” ; 如果设置 ITREREN 位数, 就会发生中断 。
      • 在模型假设中删除数据,硬件释放总线:
      ─ 如果是错误的开始条件,等待地址或停止状态。
      ─ 如果是错误的停止条件,在正常停机条件下运行设备,然后放行硬件巴士。
      • 在主要模式下,硬件不会在不危及目前传输状态的情况下放弃公共汽车,而是由软件来终止目前的传输。
      在这里插入图片描述
      主机模式与从机模式
      在这里插入图片描述

      • 应答错误(AF)

      当 STM32 检测到一个非响应空档时出现回答错误 。

      • 武装部队的职位已经到位,如果ITERREN的职位已经到位,就会出现中断。
      • 如果发件人收到 " NACK ",信息必须重复:
      - 如果在模式,释放硬件公交车。
      ─ 如果是处于主模式的软件必须创建停止状态 。
      在这里插入图片描述

      • OVR(超载/超时错误)

      从模式下当时钟不延长时, I2C 接口接收数据。收到了一字节(RxNE=1),但DR登记册中的前一字节数据没有读出。时出现负载问题。此时此刻:
      • 放弃最后收据数据。
      • 如果出现超载故障,程序应删除RxNE比特,发送者应重新发送最后交付的字节。

      从模式如果时钟无法延长, I2C 接口正在发送数据 。在下一个字节时间到来之前,新的数据尚未放入DR登记簿(TxE=1) 。出了错,此时此刻:
      • 在DR数据库中初始字节会重复 。
      • 用户应确定,如发生负载错误,接收端应删除收到的重复数据,发送者必须按I2C总线标准在必要时间更新DR登记册。
      解甲返乡登记簿必须在解甲返乡方案清除后写成,第一个SSCL在转发第一个字节的同时上升;如果这不可行,接受者应无视最初的数据。 ]

      STM32 应该是连续不时用 10 字节来写入和读取数据, 示例主机使用 10 字节, 当发生错误时您只传送 5 字节 : 在下一个字节时钟到来之前, 新的数据尚未放入 DR 登记册 。

      在这里插入图片描述
      在这里插入图片描述

      在这里插入图片描述

      5.I2C STM32(关键)的对外通信进程

      I2C模式选择:
      该接口可以用四种不同模式之一使用:
      ● 从发送器模式
      ● 从接收器模式
      ● 主发送器模式
      ● 主接收器模式
      默认情况下,该模块从模式运行。 界面。生成启动条件后, 从模式自动移动到主模式 。当仲裁失败或发出停止信号时,从主模式向模式转换模式。

      • STM32作为主机通信(传送机和接收机)是主要途径。
      • STM32作为机器通信(传送机和接收机)模式

      在这里,我基本上使用 SSM32 来进行主机通讯。

      I2C主模式:
      默认情况下, I2C 接口总是从模式到模式的函数。要从模式过渡到主模式,必须提供一个起始条件。

      在主模式中, I2C 接口启动数据传输并创建时钟信号 。当序列数据传输开始时,它总是从起始状态开始,到停止状态结束。裁武条约的位置在公共汽车上创造了启动条件,设备进入了主模式。

      主发送器

      在这里插入图片描述

      • EV5事件
        在这里插入图片描述

      当设置 START=1 时, 当 BUSY = 0 设定时, I2C 接口将产生起始状态和向主模式( M/ SL 位置)的过渡。
      在这里插入图片描述
      在启动要求得到满足之后,我们必须确定SB是否有1,启动信号是否成功发送。

      在这里插入图片描述
      • SB比特位于硬件中,如果ITEVFEN比特设好,就会发生中断。
      主设备然后等待阅读SR1登记册,该登记册从DR登记册的地址中写出。

      • EV6事件
        在这里插入图片描述

      从机地址的发送

      • 只有一个字节以7位数的地址模式提供。
      一旦地址字节被发送,
      - 硬件设置 ADDR 位, 如果 ITEVFIN 位设置, 就会发生中断 。
      主设备然后等待SR1登记册在进入SR2登记册之前阅读一次。

      主设备根据发送地址的最低位置选择是否输入发报机或接收模式。
      • 使用7位数地址时,
      - 要输入发件人模式,主设备是从“ 0” 的最低地址传输的。
      - 要输入接收模式,主设备从地址“ 1” 的最低位置发送。
      在这里插入图片描述
      当计算机回复完成后,EV6事件是通过从机器地址发送而发现的:
      在这里插入图片描述
      为确保下一份数据从机器传送到机器,如果未发现未发送地址或未答复,你应立即向谁传送数据?

      • EV8_1事件:
        在这里插入图片描述
        当提供地址时,将进行这一测试。在现实中,我们需要做的就是测试EV6事件。地址(数据)是在EV6成功之后发出的。而且从机还应答了,为填写正数据登记册,提供了地址。我敢肯定,它是空的。所以不检测也可以。

      • EV8事件
        在这里插入图片描述
        在这里插入图片描述
        发送后, 我们必须检查数据登记册是否为空 。数据登记册是空的(TXE),因此可以输入新的数据;否则,先前的数据没有移到移动的登记册,而编写新数据的CPU将覆盖先前的数据olda登记册是空的(TXE),因此可以输入新的数据;否则,以前的数据没有移到移动的登记册,而编写新数据的CPU将覆盖先前的数据。

      在这里插入图片描述

      • EV8_2事件
        在这里插入图片描述
        发送最后字节后, 我们应该测试 EV8_2 事件, 特别是 BTF 位 。
        在这里插入图片描述
        为什么 这是测试数据传输登记已完成所有数据的发送。,最后的字节是交付的。

      • 关闭通信

      在将最后字节放入 DR 登记册后, 设置 STOP 位后产生停止状态, I2C 接口自动返回模式( M/ S 位清除 ) 。

      主接收器

      在这里插入图片描述
      由于STM32是接收器,STM32也是主机,主机必须同时提供初始信号和地址发出的信号,EV5、EV6、EV6_1事件与主接收器相同。

      • EV7事件
        在这里插入图片描述
        主机使ACK位置能够接收数据并自动生成响应信号。

      在这里插入图片描述
      CPU可在接收数据之前读取数据登记册中的数据,确定数据储存库是否可用,数据登记册是否为空(RNXE)。

      • EV7_1事件
        关闭通信
        在从设备接收最后一个字节后,主设备发送了一个 NACK 。收到NACK后从设备中删除对SCL和SDA线的控制。主要装置具有传递中继/重新启动状态的能力。
        · 在收到最后一个字节后产生一个NACK脉冲,在读取倒数第二数据字节(上次RxNE事件后)后删除ACK位置。
        • 为了产生停止/重新开始条件,程序必须在读取最后的数据字节(上次RxNE事件之后)后确定STAST/START时段。
        • 当只收到一个字节时,必须在EV6(EV6_1)之后立即关闭反应和停止条件(EV6_1),在ADDR清除后,I2C接口在停止条件形成后自动恢复为模式(M/SL清除)。

      背面接收字节时不生成答复,不视为答复。
      在这里插入图片描述
      此外,东道方还将收到停机信号。
      在这里插入图片描述
      CPU然后通过评估EV7事件从数据登记册获得最后字节数据。

      只要你意识到写法代码不是手帕, 它就直截了当, 你会传送它, 硬件 I2C 写法代码必须知道和理解主发件人的操作 和主接收器理解你意识到 写法代码不是手帕, 这是直截了当的, 你会传送它, 硬件 I2C 写法代码必须知道和理解 主发件人和主接收器的操作。

      I2C 初始化结构 6

      在这里插入图片描述

      • I2C_ClockSpeed

      设置 I2C 传输率, 我们输入的值不得超过 400 KHz 。
      初始化功能将把时钟因数写入 I2C 时钟控制存储器 CCR, 取决于我们输入的值和后来的空间比率参数。

      CCR登记册不能列入小数点型的时钟系数,影响SCL的实际频率可能低于该成员指定的参数值,对普通的I2C通信没有影响,只有较慢的通信除外。

      在这里插入图片描述
      初始化函数
      在这里插入图片描述

      • I2C_Mode

      选择 I2C 模式 (I2C_ Mode_ I2C) 和 SMBus 主机模式 (I2C_ Mode_ SMBusHost, I2C_ Mode_ SMBusDevice) 。
      在这里插入图片描述

      • I2C_DutyCycle

      指定 I2C 的 SCL 时钟的间距比。 有两个选项: 2:1 (I2C_ DutyCyCycle_ 2) 和 16: 9 (I2C_ DutyCycle_ 16_ 9) 。
      你选它也没什么区别
      在这里插入图片描述

      • I2C_OwnAddress1

      STM32中的I2C设备配置有自己的地址,与I2C总线连接的每个设备必须有自己的地址作为主机。

      如果地址在I2C公共汽车上,可调整为7或10。唯一的即可。
      可能真的有两个地址; 这是第一个地址。

      第二个地址应使用不同的图书馆功能设定,不超过7个位。
      在这里插入图片描述

      • I2C_Ack_Enable

      设置此选项可允许 I2C 响应发送响应信号。 当 SPM32 接收 IPM32 数据时, 允许响应( I2C_ Ack_ Enable) 的通用配置将自动创建一个回答, 必须启用它 。
      在这里插入图片描述

      • I2C_AcknowledgeAddress

      选择 I2C 是否在 7 或 10 个地点存在 。这需要根据装置与I2C总线的物理连接情况作出决定。I2C_OwnAddress1的成员同样也受到这一成员的影响。只有当模式设定为 10 位时 。I2C_OwnAddress1 最多只能允许十个地址 。
      在这里插入图片描述
      设置完成后, 请拨打 I2C 启动程序 。

      记得使能I2C外设
      在这里插入图片描述
      在这里插入图片描述

      EEPROM V介绍

      EEPROM是一种可电解、可编程、只读的内存,具有全称电子可读和可编程可读内存。在这里,阅读的唯一方法就是不阅读。以前,光盘只能读而不是写。可读取EEPROM。为什么它被命名为可读:它只是一个被遗忘的名称。

      在这里插入图片描述
      原理图:
      在这里插入图片描述
      在这里插入图片描述
      WP引脚直接
      在这里插入图片描述

      EEPROM(作为中间器)的设备地址
      在这里插入图片描述

      EEPROM的I2C硬件
      在这里插入图片描述
      I2C协议也管理EPROM通信,它产生第一个信号,停止传输,并对一切作出反应。

      一.STM32读取EPROM的字节,然后写下来。

      在这里插入图片描述

      2 STM32从EPROM(页面)中写出大量字节。

      在这里插入图片描述
      书写的八字节是相继地址,除非是连续的,否则无法写出页面。
      在这里插入图片描述
      在这里插入图片描述

      总结:

      • 当你写一个页面时,您写的记忆地址与8对齐, 因此您只能写到 08, 16, 32.. 并除以 8。
      • 页限一次写8字节。

      我什么也做不了,因为按照规则,我会犯错

      • 检查是否将 EEPROM 写入完成 :

      在这里插入图片描述
      这是什么意思?EPROM对我们来说是一个非丢失的储存媒介(电力损失不造成数据损失)。它的功能类似于计算机中的硬盘。阅读和写作需要很长时间。因此,在STM32传输数据后,等待 EEPROM 将数据写入自己的内部内存,然后写入下一波数据(单字节或页)至关重要。除非你等EPROM把最终数据放回EPROM 否则你无法谈论它这表明EEPROM正在使用。

      检查是否已经写入 EEPROM 数据 :
      STM32主机继续提供EEPROM的启动信号,然后提供EEPROM的设备地址,以回应EEPROM的反应。如果没有,请重复,直到EEPROM代表EEPROM先前数据作出的答复完成后再传送下一个数据!

      三. STM32读取来自EEPROM任何地点的随机数据。

      在这里插入图片描述
      在这里插入图片描述

      四.STM32随机读取EEPROM中任何地址的数据。

      在这里插入图片描述
      EEPROM拥有256个字节,相当于(0255)。
      读完最后一个字节后, 即255, 第256个字节, 您重新开始( 第一个字节数据) 。

      以硬件 I2C 读写 EEPROM 实验

      实验目的

      作为主机,STM32从EPROM内存中写出256字节。
      作为主机,STM32读取储存在EPROM内存的数据256字节。

      阅读和写作获得绿灯,而写和读取得到红信号。

      实验原理

      • 硬件设计
        原理图
        在这里插入图片描述
        实物图
        在这里插入图片描述

      编程要点
      (1) 将用作通信泄漏模型的目标配置;
      (2) 开发控制功能,复制I2C时间序列。
      (3) 开发基本的I2C附带功能;
      (4) 为阅读和写作准备EEPROM存储内容的职能;
      (5) 制定测试方案,以验证数据读写。

      PB6和PB7都易燃。
      这里有一个联络点。 您被设置为输出模式, 对输入函数没有影响 。
      详情请看——> GPIO端口的八种工作模式
      在这里插入图片描述

      源码

      i2c_ee.h
      理论已经相当全面了,所以请继续 代码号喇叭!

      i2c_ee.c

      main.c

      集中注意如何解决下页的写作问题,以便实现连续的写作。

      • 当你写一个页面时,您写的记忆地址与8对齐, 因此您只能写到 08, 16, 32.. 并除以 8。
      • 页限一次写8字节。

      现在,让我们看看代码的底部功能 是如何解决问题的。
      在这里插入图片描述

      如果地址对齐:
      在这里插入图片描述
      在这里插入图片描述
      如果地址不对齐:
      在这里插入图片描述

      实验效果

      请添加图片描述

      软件模式的 I2C 协议

      实验目的

      作为主机,STM32从EPROM内存中写出256字节。
      作为主机,STM32读取储存在EPROM内存的数据256字节。

      阅读和写作获得绿灯,而写和读取得到红信号。

      实验原理

      在这里插入图片描述
      我们的CPU控制 I2C 软件模型 生成 I2C 时间序列。因此,我们可以选择任何选择。但是,你选择的脚必须连接到EPROM的SCL和SDA。这是PC12,由PC11担任主机STM32SCL。SDA引脚。

      • 主机产生起始信号
        在这里插入图片描述
      • 主机产生停止信号
        在这里插入图片描述
      • 东道方发出响应信号或无响应信号。
        在这里插入图片描述
        在这里插入图片描述
      • 等待 EEPROM 回复

      在这里插入图片描述

      • 主机向机器发送字节 。
        在这里插入图片描述
      • 主机从 EEPROM 接收一个字节 。
        在这里插入图片描述
        数值应该从零开始,抱歉,我忘了

      源码

      i2c_ee.h

      i2c_ee.c

      main

      没有看到I2C硬件的同样影响。

      八.总结

      无论它是硬件I2C还是软件I2C,不管它们的长处和缺点如何,理解IC2协议对于实现进程至关重要。由于它经常使用,I2C必须集体讨论它,最后,如果该条的实质内容有疑问的话!

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/24716.html

          热门文章

          文章分类