4.STM32之通信接口《精讲》之IIC通信---软件实现IIC《深入浅出》面试必备!
接下正式,进入软件编写IIC时序了,并实现对MPU6050的控制,既然是软件实现,那么硬件方面,我仅需两根控制线即可,即:数据控制线SDA,时钟控制线SCL。(人为软件层面定义的,就是把单片机的GPIO模拟成IIC时序)在单片机上,我们只需两个普通的GPIO即可。
(软件实现IIC的好处就是端口不受限,可以任意指定)
可以参考51单片机-IIC实验1-AT24C02数据存储(实战1)_51使用iic模块-CSDN博客https://blog.csdn.net/qq_58662017/article/details/142199565?spm=1001.2014.3001.5501
座右铭:我们何必为人生的部分片段而哭泣,我们整个人生都催人泪下!
目前实现的逻辑是STM32是主机,MPU6050是从机,一主一从。如下图(主机对SCL完全掌控)在写程序的过程中我们一般只关注主机端的程序。
程序主框架,编写IIC时序,然后利用IIC对MPU6050进行写寄存器和读寄存器。最后,在主函数里调用一下即可!(主函数主要实现初始化,拿到数据,和打印数据)
开漏输出(Open-Drain 或 Open-Collector)是单片机或其他数字电路中常用的一种输出方式,它可以通过合理的电路设计实现输入功能。以下是详细说明:
问题1:开漏输出,可以输入吗?
开漏输出的工作原理
-
开漏输出特点:
- 当输出为低电平(逻辑0)时,开漏输出内部的 MOSFET 或晶体管导通,输出直接拉低至地(GND)。
- 当输出为高电平(逻辑1)时,内部 MOSFET 或晶体管断开,输出处于高阻态(悬空状态),需要通过外部上拉电阻将输出电平拉高。
-
电路结构: 开漏输出电路没有直接的 "高电平" 驱动能力,必须依赖外部上拉电阻将输出端拉到高电平电压(如 3.3V 或 5V)。
开漏输出是否可以作为输入?
可以实现输入功能,但需要特定的电路设计。
1. 直接作为输入
- 如果开漏输出端口本身的电路允许双向通信(如 I2C 总线),它可以接收来自其他设备的信号。
- 在这种情况下:
- 当开漏输出为高阻态时,端口可以感知外部输入信号(如其他设备的驱动信号或电压变化)。
- 当开漏输出为低电平时,它会主动拉低信号线。
2. 需要外部电路支持
- 如果开漏端口不直接支持输入,可以通过额外的硬件设计(如与其他电路连接)实现输入功能。典型方法包括:
- 外部上拉电阻与驱动器相结合,输入信号可以通过上拉电阻的电压水平反映到开漏输出端。
- 使用外部电路,如电平转换器或双向驱动芯片,将开漏端与输入信号连接。
3. I2C 典型例子
- I2C 总线是一种开漏输出的经典应用。I2C 中的 SDA(数据线)和 SCL(时钟线)通过外部上拉电阻实现双向数据通信:
- 在设备 "发送" 数据时,单片机通过开漏端口主动拉低 SDA 线。
- 在设备 "接收" 数据时,单片机的开漏端口进入高阻态,从而允许外部设备驱动 SDA 线。
注意事项
-
上拉电阻的选择:
- 电阻值太大:信号线的上升时间变长,影响高速通信。
- 电阻值太小:消耗过多电流,降低电路能效。
- 一般情况下,推荐使用 4.7kΩ ~ 10kΩ 的电阻。
-
输入电压范围:
- 确保外部输入信号的电压范围在单片机的输入电平(如 0V ~ VCC)之内,以避免损坏器件。
-
避免冲突:
- 如果多个设备连接到开漏输出引脚,必须确保这些设备不会同时主动拉低信号线(避免驱动冲突)。
总结
开漏输出引脚可以实现输入功能,特别是在需要双向通信的场景(如 I2C 总线)。关键在于设计合理的外部电路,包括适当的上拉电阻,并确保输入信号的电压范围和驱动能力与开漏端口兼容。
代码实现:
软件初始化IIC:(也就是IIC的基本6个操作基本单元)
起始条件,终止条件,读一个字节,写一个字节,接收应答位,不接受应答位。
通过下面6张图,可以看出,分离设计,也就是在SCL期间:SDA如果改变电平,则就会产生开始或停止的信号(即:SCL=1 ,SDA从高到底就是开始信号,SDA从低到高就是停止信号),反之,就会使传输数据的过程,即:就是在SCL=0期间,变换电平来传输数据。
相关文章:

4.STM32之通信接口《精讲》之IIC通信---软件实现IIC《深入浅出》面试必备!
接下正式,进入软件编写IIC时序了,并实现对MPU6050的控制,既然是软件实现,那么硬件方面,我仅需两根控制线即可,即:数据控制线SDA,时钟控制线SCL。(人为软件层面定义的&…...

6G通信技术对比5G有哪些不同?
6G,即第六代移动通信技术,是5G之后的延伸,代表了一种全新的通信技术发展方向。与5G相比,6G在多个方面都有显著的不同和提升,以下是对6G通信技术及其与5G差异的详细分析: 一、6G的基本特点 更高的传输速率…...

「Mac玩转仓颉内测版28」基础篇8 - 元组类型详解
本篇将介绍 Cangjie 中的元组类型,包括元组的定义、创建、访问、数据解构以及应用场景,帮助开发者掌握元组类型的使用。 关键词 元组类型定义元组创建元组访问数据解构应用场景 一、元组类型概述 在 Cangjie 中,元组是一种用于存储多种数据…...

WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理
WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理 1. 标题识别elementUI组件爆红 这个原因是: 在官网说明里,才版本2024.1开始,默认启用的 Vue Language Server,但是在 Vue 2 项目…...

机械设计学习资料
免费送大家学习资源,已整理好,仅供学习 下载网址: https://www.zzhlszk.com/?qZ02-%E6%9C%BA%E6%A2%B0%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83SOP.zip...

Python 快速入门(上篇)❖ Python 字符串
Python 字符串 字符串格式化输出字符串拼接获取字符串长度字符串切片字符串处理方法 字符串格式化输出 name “xhx” age 30 # 方法1 print("我的名字是%s,今年%s岁了。 " % (name, age)) # 方法2 print(f"我的名字是{name},今年{age}岁了。")字符串拼接…...

Ubuntu中使用多版本的GCC
我的系统中已经安装了GCC11.4,在安装cuda时出现以下错误提示: 意思是当前的GCC版本过高,要在保留GCC11.4的同时安装GCC9并可以切换,可以通过以下步骤实现: 步骤 1: 安装 GCC 9 sudo apt-get update sudo apt-get ins…...

1+X应急响应(网络)文件包含漏洞:
常见网络攻击-文件包含漏洞&命令执行漏洞: 文件包含漏洞简介: 分析漏洞产生的原因: 四个函数: 产生漏洞的原因: 漏洞利用条件: 文件包含: 漏洞分类: 本地文件包含: …...

机器学习实战记录(1)
决策树——划分数据集 def splitDataSet(dataSet, axis, value): retDataSet [] #创建返回的数据集列表for featVec in dataSet: #遍历数据集if featVec[axis] value:reducedFeatVec featVec[:axis] #去掉axis特征reducedFeatVec.extend(featVec[axis1…...

PHP8解析php技术10个新特性
PHP8系列是 PHP编程语言的最新主线版本,带来了许多激动人心的新特性和改进。作为一名PHP开发者,了解这些更新能够帮助你编写更高效、安全和现代的代码。 8的核心技术知识点,包括语言特性、性能优化、安全增强以及开发者工具的改进。 Just-In…...

C++模版特化和偏特化
什么是模版特化 特化的含义:所谓特化,就是将泛型搞得具体化一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特定的修饰(例如const或…...

Simulink中Model模块的模型保护功能
在开发工作过程中,用户为想要知道供应商的开发能力,想要供应商的模型进行测试。面对如此要求,为了能够尽快拿到定点项目,供应商会选择一小块算法或是模型以黑盒的形式供客户测试。Simulink的Model模块除了具有模块引用的功能之外&…...

Linux常用工具的使用(2):文本编辑器的使用
实验题目:Linux常用工具的使用(2):文本编辑器的使用 实验目的: (1)理解文本编辑器vi的工作模式; (2)掌握文本编辑器的使用方法 实验内容: &a…...

【StarRocks】starrocks 3.2.12 【share-nothing】 多Be集群容器化部署
文章目录 一. 集群规划二.docker compose以及启动脚本卷映射对于网络环境变量 三. 集群测试用户新建、赋权、库表初始化断电重启扩容 BE 集群 一. 集群规划 部署文档 https://docs.starrocks.io/zh/docs/2.5/deployment/plan_cluster/ 分类描述FE节点1. 主要负责元数据管理、…...

联想ThinkServer服务器主要硬件驱动下载
联想ThinkServer服务器主要硬件驱动下载: 联想ThinkServer服务器主要硬件Windows Server驱动下载https://newsupport.lenovo.com.cn/commonProblemsDetail.html?noteid156404#D50...

Ansys Zemax Optical Studio 中的近视眼及矫正
近视,通常称为近视眼,是一种眼睛屈光不正,导致远处物体模糊,而近处物体清晰。这是一种常见的视力问题,通常发生在眼球过长或角膜(眼睛前部清晰的部分)过于弯曲时。因此,进入眼睛的光…...

三次握手后的数据传输
一旦三次握手成功完成,TCP连接便正式建立,双方可以开始传输数据。在这个阶段,TCP协议利用其独特的可靠性和流控机制,确保数据的有序、无差错传输。 序列号与确认号:在数据传输过程中,TCP会为每个报文段分配…...

企业OA管理系统:Spring Boot技术实现与案例研究
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足,创建了一个计算机管理企业OA管理系统的方案。文章介绍了企业OA管理系统的系统分析部…...

(免费送源码)计算机毕业设计原创定制:Java+JSP+HTML+JQUERY+AJAX+MySQL springboot计算机类专业考研学习网站管理系统
摘 要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在大学生在线计算机类专业考研学习网站管理的要求下,开发一…...

Go语言工程测试的基本规则和流程
Go语言工程测试的基本规则和流程 在Go语言的工程实践中,测试是确保软件质量和稳定性的关键环节。本文将深入探讨Go语言中的工程测试,包括单元测试、性能测试和集成测试等,以及它们的编写规则、组织方式和执行流程。 单元测试(Unit Testing) 单元测试是针对软件中最小可…...

阿里云cdn配置记录和nodejs手动安装
cdn 登录阿里云 域名解析权限 开启cdn,接引导流程, 源可以设置 域名或者ip等 配置好域名解析 上传https证书 图片不显示,后端开发需要配置 回源配置的回源协议 ,配置跟随客服端【如果浏览器多次重定向错误,客服或者改…...

PTC在电池中的作用
一、电池安全性的重要性 在现代电子设备中,电池作为能源储存和供应的核心组件,其性能和安全性一直是关注的重点。尤其是在锂离子电池等高能量密度电池的广泛应用中,电池发生过流、过热、短路等问题可能导致电池失效,甚至引发热失控和火灾等安全事故。因此,如何提高电池的…...

嵌入式C语言面试题 - 2024/11/18
欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导 转载请注明来源: 下边代码,x值是? int x10;x 3x%(3); 解析: 初始值:x 10 计算 x % 3: 10 % 3 的结果是 1&#…...

理解原子变量之四:可见性、memory_order_acquire与 memory_order_release
在理解原子变量之二:从volatile到内存序-进一步的认识-CSDN博客里的实例3里面,我们看到,如果在一个线程里修改原子变量done,另一个线程读取done时,就会看到这个变化。这就是原子变量的可见性。其实这个认识是不全面的。…...

requests的session
如果有cookie,能够自动关联,可以使用如下: session对象能够帮我们自动管理和传递cookie,但是后续的请求,必须使用session对象发起 session requests.session() re session.get() re session.post()或 session reque…...

MySQL面试题补
内连接和外连接的区别: ○1.功能和用法不同:内连接是连接两表都满足情况的数据;而外连接是以一边的表为主表,另一个表只显示匹配的行; ○2.用途:内连接一般是用于检索不同表需要根据共同的列值进行匹配的&a…...

Windows系统编程 - 进程遍历
文章目录 前言进程的遍历CreateToolhelp32SnapshotProcess32FirstProcess32Next进程遍历 总结 前言 各位师傅好,我是qmx_07,今天给大家讲解进程遍历的相关知识点 进程的遍历 快照:使用vmware虚拟机的时候,经常需要配置环境服务…...

从零开始创建一个 Vue3+Vite+TS+Eslint项目
一、创建一个最简单的 Vue3 项目 pnpm create vuelatest只设置项目名,其它任何功能都不加。 二、引入 Typescript 详见 Vue3 Vite 项目引入 Typescript 三、引入 Eslint Pritter 详见 Vue3 Vite TS 项目引入 Eslint Pritter 四、配置自动导入插件引入 El…...

Python操作neo4j库py2neo使用(一)
Python操作neo4j库py2neo使用(一) 安装(只用于测试) docker-compose .yml 文件 version: 3.8 services:neo4j:image: neo4j:5.6.0-enterprise #商业版镜像hostname: neo4jcontainer_name: neo4jports:- "7474:7474"-…...

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)
Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案https://blog.csdn.net/shijianduan1/article/details/133386281 某业务配置表,按配置的时间区间及组织层级取方案,形成报表展示出所有部门方案的取值; 例如࿰…...