最后更新:2022-06-20 17:14:58 手机定位技术交流文章
STM32F103VET6的注释,野火指南者,中文参考手册, HAL库 开发了手册和网站的野火指南的中级视频。我看过很多中级文章,但它往往不被全面理解,现记下小笔记,用来回顾。属于个人笔记,不用于商业。
IIC,集成电路总线。只用到两根线,SDA表示双向串行数据线,用于表示数据;SCL代表串行时钟线,用来数据收发同步。不需要USART、CAN或其他通信协议的外部接收器和发射器,也就是说,你不需要转换一个平整的芯片。它现在广泛用于系统中多个集成电路(IC)之间的通信。

公共汽车: 由多个设备共享的信号线。
每个连接到总线的设备都有一个独立的固定地址,该主机可以使用它来访问不同的设备。
当IIC设备空时,输出高电阻状态。 当设备空时,输出高电阻状态时,上载电阻将总线拉到高压水平。
当多个主机同时使用总线时,使用仲裁来确定哪些设备占有总线,以防止数据冲突。
有三种传输模式:标准模式的传输速度为100kbit/s,快模式为400kbit/s,快模式为3.4Mbit/s。
与同一公共汽车连接的IC数限于公共汽车最大容量400pF。

S 表示由主机的 I2C 接口产生的 传输起始信号 (S) ,这时连接到 I2C 公共汽车上的所有接收器将接收这个信号,在最初信号生成后,机上的每一个人开始等待主机按下一个广播 的 从机地址信号 (SLAVE_ADDRESS) .在I2C总线上,每个设备的地址是唯一的,当主机广播地址与设备地址相一致时,设备被选定,而未选定的设备会忽略数据信号。
根据 I2C 协议,这个服务器地址可以是 7位(默认)或 10 位 。
在地址位置之后,是传输方向的选择位置,即 0 然后,它表示后面的数据传输方向是从主机发送到主机,即主机写数据到主机。 相反, 主机从机器里读取数据.
在收到机器的匹配地址后,主机或机会返回一个答案 (ACK) 或非应答 (NACK) 一个信号, 主机不能继续发送或接收数据,直到它收到响应信号.


当 SCL 线是高电平时,SDA线由高电平向低电平切换,表示通讯的起始。
当SCL线 是高电平时, SDA 线由低电平向高电平切换,表示通讯的停止。

SDA 数据线在SCL的每个时钟周期中传输一个数据.
传输时, SCL 为高电平的时候, SDA 所显示的数据是有效的,即目前的SDA 对于高功率,数据是“1”,对于低功率,数据是“0”。
当 SCL 为低电平时, SDA 数据无效,目前通常是SDA 执行电位调整开关,为下一次做好数据准备.
每个数据传输都以字节为单位, 传输的字节数是无限的.
当阅读数据方向时,主要的机会释放了 SDA 信号线的控制由机器控制. SDA 信号线,主机接收信号,写数据方向,SDA 由主机控制, 从机器接收信号.

假设设备地址:1100=0x78
设备的读取地址是:11001=0xf1
设备的写字地址是:1100=0xf0

软件仿真协议:使用CPU直接控制通信附件的电平面,生成符合通信协议标准的逻辑。
硬件仿真协议:外部安装在STM32IIC芯片上,负责执行IIC通信协议,只要配置好该外设,它将自动生成协议所要求的通信信号,接收、发送和存储数据,CPU只检测外部设备的状态,并访问数据记录,就能完成数据收发。通过外部硬件处理IIC协议的方法减少了CPU的工作量,并使软件的设计更加简单。

SMBA线用于SMBUS警告信号,而IIC通信则不使用。

SCL 线的时钟信号,由 I 2 C 接口根据 时钟控制寄存器 (CCR) 控制, 控制的参数主要是时钟频率.
配置 I2C 的 CCR 注册表可以修改与通信速度有关的参数:
• 可选择 I2C 通讯的“标准 / 快速模式,两个模式分别 I2C 对应 100/400Kbit/s 的通讯速率。
• 在快速模式下可选择 SCL 时钟的占空比,可选 Tlow/Thigh=2 或 Tlow/Thigh = 16/9模式。I2C 协议在 SCL 高电平时对 SDA 信号采样, SCL 低电平时 SDA 准备下一个数据,
修改 SCL 电平衡的程度会影响数据采样,但事实上两个模式之间的比例差并不大,除非要求非常严格,这里只是选择和选择。
• CCR 寄存器中还有一个 12 位的配置因子 CCR ,它与 I2C 外部输入时钟源合作生成SCL时钟, STM32 的 I2C 外设都挂载在 APB1 总线上,使用 APB1 的时钟源 PCLK1 , SCL
信号线的输出时钟公式如下:

I2C 的 SDA 信号主要连接到数据传输登记册,数据传输登记册的数据源和目标是数据传输登记册(DR)。 、地址寄存器 (OAR) 、 PEC 寄存器以及 SDA 数据线:在外部传输数据时,数据传输登记册使用“数据登记册”作为数据源,通过SDA逐一传递数据 信号线被发送出去;当接收外部数据时,数据传输登记器将SDA 信号线样本的数据被存储在数据记录中,一个一个。
如果数据被检查,接收的数据将通过 PCE 计算器操作. 操作的结果存储在“ PEC 寄存器”中。
当 STM32 的 I2C 在机器模式下工作时,接收设备地址信号时,数据传输登记器与STM32匹配接收地址 的自身的“ I2C 将地址注册表的值与主机的地址响应相比较。 STM32 的自
身 I2C 可以通过修改“自备地址库”来修改地址,以支持同时使用两个地址 I2C 设备地址,两个地址分别存储在OAR1中 和 OAR2 中。
整个控制逻辑负责协调整个 I2C 外部控制逻辑的工作模式根据我们配置的控制注册表(CR1/CR2)的参数改变。 当外部工作时,控制逻辑将根据外部工作状态修改状态注册表(SR1) 和 SR2) 我们可以通过简单的阅读与这些登记册有关的登记册来理解这一点 I2C 工作状态。 此外,控制逻辑负责对I2C的生产控制 中断信号、 DMA 请求及各种 I2C 通信信号(启动、停止、响应信号等) ) 。

过程:
(1) 起始信号 (S) 由主机端生成并控制初始信号(S) 当一个初始信号发生时,它触发一个事件 EV5 ”,并会对 SR1 寄存器的“ SB ”位置 1 ,表示起始信号已经发送;
(2) 立即发送设备地址,等待响应信号。如果机器响应,发生事件 EV6 ”及“ EV8 ”,这时SR1 寄存器的“ ADDR ”位和“ TXE ”位都被置 1 。
ADDR 为 1 表示地址已经发送, TXE 为 1 表示数据寄存器为空;
(3) 上述步骤是正常执行的, ADDR 位清零后,我们往 I2C 的“数据寄存器 DR 输入将发送的数据,然后TXE 位会被重置 0 ,表示数据寄存器非空, I2C 外设通过 SDA 一个信号线发送数据,然后生成一个"EV8" ”事件,即 TXE 位被置 1,表示数据寄存器为空重复此过程以发送多于一个字节的数据;
(4) 当我们完成发送数据时,控制 I2C 该设备产生停止信号 (P) ,这个时候会产生 EV8_2 事件,SR1 的 TXE 位及 BTF 位都被置 1 ,表示通讯结束。
假如我们使能了 I2C 当上述所有事件发生时,会发生中断 I2C 中断信号,输入相同的中断服务函数,到I2C 在中断服务程序后, 再检查注册表来确定哪些事件.

过程:
(1) 起始信号 (S)它由主机端子生成,并控制初始信号的生成。初始信号生成后,它产生事件EV5 ”,并会对 SR1 寄存器的“ SB ”位置 1 ,表示起始信号已经发送;
(2) 立即发送设备地址,等待响应信号。如果机器响应,发生事件 EV6 ”这时 SR1 寄存器的“ADDR ”位被置 1 ,表示地址已经发送。
(3) 接收端口地址后,开始向主机端口发送数据。 当主机接收这些数据时,“ EV7 ”事件,SR1 寄存器的 RXNE 被置 1 ,表示接收数据寄存器非空读完登记册后,我们可以清理登记册,以便接收下一个数据。 此时,我们可以控制I2C 发送应答信号 (ACK) 或非响应信号(NACK),如答复,重复上述步骤接收数据,如不答复,停止传输;
(4) 发送不响应信号后生成一个停止信号 (P) ,结束传输。
在发送和接收过程中,有些事件不仅标记上述国家,也可以同时标记诸如东道国等国家,读完后必须清除国家,这更复杂。 库函数直接检测这些事件的复合符号,减少编程困难。
IIC通常用于AT24C06、PCF8563和SD2405。

如AT24C02。
IIC配置:
硬件IIC:时间序列由IIC外部和IIC线的GPIO外部的配置生成。
软件IIC: 配置IIC线的GPIO外部性,使用内核提高或降低GPIO在IIC通信箱上的电位,模拟时间序列。
本文由 在线网速测试 整理编辑,转载请注明出处。