STM32之I2C硬件外设

devtools/2025/3/21 4:45:09/

在这里插入图片描述
在这里插入图片描述
注意:硬件I2C的引脚是固定的
SDA和SCL都是复用到外部引脚。
SDA发送时数据寄存器的数据在数据移位寄存器空闲的状态下进入数据移位寄存器,此时会置状态寄存器的TXE为1,表示发送寄存器为空,然后往数据控制寄存器中一位一位的移送数据。接收时数据控制寄存器中的数据一位一位的从引脚移位到数据移位寄存器中,当一个数据以为完成后就从数据移位寄存器中转移到数据寄存器,同时置RXNE表示接收寄存器非空。自身地址寄存器时STM32作为从机时的地址,比较器会比较主机的发出的地址与自身地址是否匹配,如果匹配就响应主机的召唤。STM32支持同时响应两个主机的召唤,所以有双低地址寄存器。PEC是用来数据校验的模块,执行CRC数据校算。

SCL的时钟控制是用来控制SCL的,时钟控制寄存器写对应的位,电路就会启用对应的功能,控制逻辑电路写入控制寄存器可以对电路进行控制,读取状态寄存器,可以读取电路的状态。
在这里插入图片描述
注意:使用I2C的时候,两个GPIO口都要配置成复用开漏输出的模式。此时是片上外设控制引脚电平。在这里插入图片描述
图中线路对应SDA的GPIO的连个箭头。分别对应输出和输入。

硬件I2C的操作流程:

在这里插入图片描述
7位主发送:
1.产生开始条件
2.EV5标志位,表示起始条件已发送,发送从机地址,然后等待从机应答A,如果没有应答就会产生中断
3.EV6事件:表示地址发送结束
4.EV8_1事件:准备好发送
5.EV8事件:表示可以写入下一个数据
6.EV8_2:表示数据发送完,可以产生终止条件在这里插入图片描述
7位主接收:
1.EV5:起始条件已经发送
2.寻址接收应答A
3.EV6:代表寻址已完成
4.EV6_1:表示数据正在移位
5.EV7:表示收到一个字节的数据
6.EV7_1:表示想要结束


http://www.ppmy.cn/devtools/168799.html

相关文章

大模型学习-从零开始在colab训练大模型

目录 写这篇文章的目的 1.准备训练所需的文件 2.将压缩包上传到谷歌云盘 使用colab 3.训练 写这篇文章的目的 这篇文章是对:大模型学习-在colab中训练并更换模型_colab调整模型-CSDN博客的一个优化,因为在之前的博文中,我是提供了一个现…

Java高频面试之集合-15

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:解决哈希冲突有哪些方法? 1. 开放寻址法(Open Addressing) 核心思想:当哈…

【Go】函数闭包、堆和栈的概念

闭包 闭包机制解析 在函数式编程中,闭包(Closure) 是一种特殊的函数结构,其核心特性是能够捕获并持有外部函数的上下文环境变量。这一机制打破了传统函数中局部变量的生命周期规则: 常规局部变量 在函数被调用时创建…

蓝桥杯备考:特殊01背包问题——》集合subset

我们划分成两个集合,实际上我们只需要看一部分就行了,也就是从集合的所有元素里挑出恰好满足集合总和的一半儿,当然,如果我们的集合总和是奇数的话,我们是无论如何也挑不出刚好一半儿的,因为我们没有小数&a…

【C++———IO流】

听专情的古人,把美言留给最爱的人........................................................................................ 文章目录 前言 一、【C/C IO流】 1、【C语言的输入与输出】 2、【CIO流引入】 二、【C标准IO流——】 2.1、【cin&&cout】 2.2…

Vue渲染函数 - render 函数

文章目录 Vue渲染函数 - render 函数1. 什么是 render 函数2、页面展示过程3、render 函数的参数4. 如何使用(1)基本渲染(2)传递属性和事件(3)条件渲染 5. render 函数的实际使用6.View Design 组件中的使用…

Git——分布式版本控制工具使用教程

本文主要介绍两种版本控制工具——SVN和Git的概念,接着会讲到Git的安装,Git常用的命令,以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。如果想直接上手用Vscode操作远程仓库则直接看7和9即可! 目录 1. SVN和Git介绍 1.1 …

PyTorch中,将`DataLoader`加载的数据高效传输到GPU

一、数据加载到GPU的核心步骤 数据预处理与张量转换 若原始数据为NumPy数组或Python列表,需先转换为PyTorch张量: X_tensor torch.from_numpy(X).float() # 转换为浮点张量 y_tensor torch.from_numpy(y).long() # 分类任务常用长整型显式指定设备&…