STM32 IIC协议
本文代码使用 HAL 库。
文章目录
- 前言
- 一、什么是IIC协议
- 二、IIC信号
- 三、IIC协议的通讯时序
- 1. 写操作
- 2. 读操作
- 四、上拉电阻作用
- 总结
前言
从这篇文章开始为大家介绍一些通信协议,包括 UART,SPI,IIC等。
UART串口通讯协议
SPI通信协议
一、什么是IIC协议
- IIC协议概念:
IIC 协议是由 SDA 数据线 和 SCL时钟线 组成的串行总线,可以发送接收数据,采用半双工的通信方式。每个挂在总线上的器件都有唯一的地址,通常一个主机多个从机。
- 数据线 :
完成数据的收发
。 - 时钟线:
完成数据的同步传输。
位速在标准模式下可达 100kbits/s, 在快速模式下可达 400kbits/s, 在高速模式下可达 3.4Mbits/s.
- IIC 系统结构:
(1). 在一个芯片内部,有一个或者多个 IIC控制器(主机)。
(2). 在一个 IIC 控制器上,可以连接一个或多个 IIC设备(从机)。
(3). IIC 总线只需要 2 根线:时钟线 SCL, 数据线 SDA。
(4). 在 IIC总线的SCL,SDA 上都有上拉电阻。
(5). 时钟线只能由主机产生,作用给从机,从而完成数据的收发同步。
二、IIC信号
IIC协议中数据的传输单位是字节。要用到 9 个时钟。前 8 个时钟用来传输数据,第 9 个时钟用来传输信号。传输数据时,先传输最高位
。
- 空闲状态
当总线上的SDA 和 SCL 两条信号线同时处于高电平时,便于空闲状态。当不传输数据时,SDA和SCL就会被上拉电阻拉高,便进入了空闲状态。
- 开启信号
当SCL为高电平期间,SDA由高变低的跳变;便是总线的起始信号,只能由主机发起,且在空闲状态下才可以启动。
- 停止信号
当 SCL为高电平期间,SDA 由低到高的跳变,便是总线的停止信号,表示数据已经传输完成。
- 响应信号
接收器在接收到 8 位数据后,在第 9个周期,拉低 SDA。当接收方接收该字节成功,便会输出一个 ACK应答信号。
当SDA 为高电平,表示为非应答信号 NACK
,当 SDA为低电平,表示为应答信号 ACK
。
三、IIC协议的通讯时序
IIC总线上的设备可以 发送/接收 数据。
1. 写操作
流程如下:
- 主芯片要发送一个起始信号 start 。
- 然后主设备发送一个设备地址(用来确定是往哪个从机写数据),方向(0表示读,1表示写)。
- 从设备回应(用来确定从设备是否存在),然后就可以传输数据。
- 主设备发送一个字节的数据给从设备,等待回应。
- 每传输一字节数据,接收方都要有一个回应信号(用来确定数据是否接收完成),然后再传输下一个数据。
- 数据传输完成后,主芯片就会发送一个停止信号。
2. 读操作
流程操作:
- 主设备发送一个起始信号。
- 主设备发出一个从设备地址(用来确定从哪个设备读数据),方向(0表示写,1表示读)。
- 从设备回应(用来确定从设备是否存在),然后就可以传输数据。
- 从设备发送一字节数据给主设备,等待回应。
- 每传输一字节数据,接收方要有一个回应信号(用来确定数据是否接收成功),然后再传输下一个数据。
- 数据发送完成后,主设备会发送一个停止信号。
四、上拉电阻作用
-
IIC 总线的SCL,SDA 上都有上拉电阻。
外接2个上拉电阻的作用:当总线处于空闲状态时,总线为高电平状态
。 -
问 :SCL 为何要使用上拉电阻?
答 :在第 9 个时钟后,如果有某一方设备需要更多的时间来处理数据,它可以一直驱动三极管把 SCL 拉低。当 SCL为低电平时,其他设备都不使用 IIC总线;只有当 SCL从低电平变为高电平的时候,IIC总线才能够被使用。
当该设备处理数据完毕,就绪时,就不再驱动三极管。这时上拉电阻把SCL变为高电平,其他设备就可以继续使用 IIC总线了。
总结
下一篇文章为大家介绍 SPI 和 UART 通信协议。
相关文章:

STM32 IIC协议
本文代码使用 HAL 库。 文章目录 前言一、什么是IIC协议二、IIC信号三、IIC协议的通讯时序1. 写操作2. 读操作 四、上拉电阻作用总结 前言 从这篇文章开始为大家介绍一些通信协议,包括 UART,SPI,IIC等。 UART串口通讯协议 SPI通信协议 一、…...

Java生成随机数的几种方式
随机数,在一些特殊场景下,是非常常用的。比如一些测试和验证场景、安全加密、随机抽样等都有随机数的‘身影’。 一、 使用java.util.Random类 java.util.Random类提供了更全面的随机数生成功能,包括随机整数、随机浮点数、随机布尔值等。 p…...

【面试】什么是Java虚拟机
目录 1. 说明2. 关键点 1. 说明 1.Java虚拟机(Java Virtual Machine,简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境。2.JVM是Java平台无关性的关键,它允许Java程序在任何支持JVM的硬件和操作系统上运…...

Go 语言的基本构成、要素与编写规范
Go 语言,作为由 Google 开发的现代编程语言,以其简洁、高效和并发编程能力而著称。在构建高性能分布式系统和现代软件开发中,Go 语言正日益受到欢迎。本篇文章将详细探讨 Go 语言程序结构的各个要素,包括函数定义、注释规范、数据…...

从了解到掌握 Spark 计算框架(二)RDD
文章目录 RDD 概述RDD 组成RDD 的作用RDD 算子分类RDD 的创建1.从外部数据源读取2.从已有的集合或数组创建3.从已有的 RDD 进行转换 RDD 常用算子大全转换算子行动算子 RDD 算子综合练习RDD 依赖关系窄依赖宽依赖宽窄依赖算子区分 RDD 血统信息血统信息的作用血统信息的组成代码…...

香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(三)
整期笔记索引 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(一) 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(二) 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(…...

【git】常用命令
删除 删除本地分支: // 删除本地分支 git branch -d localBranchName 删除远程仓库分支 git push origin --delete <branch_name> 验证远程分支是否删除 git fetch -p //会清理已经删除的远端分支的引用 git branch -r //列出所有远端分支࿰…...

JavaWeb_MySQL数据库
数据库: MySQL数据模型: MySQL是关系型数据库。 SQL: 简介 分类: 数据库设计-DDL 对数据库操作: 表操作: 小练习: 创建下表 SQL代码: create table tb_user (id int primar…...

中国BI步入增长大周期,腾讯云ChatBI加速AI+BI融合
过去十年,大数据技术的快速发展,让数据消费前进一大步,数据价值得到一定程度的挖掘与释放,真正开启了“用数”的大时代。但数据分析繁杂的技术栈、复杂的处理过程以及程式化的交互方式,让“数据消费”的门槛始终降不下…...

揭秘Python:下划线的特殊用法,你绝对想不到!
在Python编程中,下划线(underscore)是一个常见而又强大的工具。它不仅仅是一个普通的字符,而是具有特殊含义和用法的符号。今天,我们就来揭开Python下划线的神秘面纱,探索它的各种妙用。 下划线的基本用法…...

深入探索Java世界中的Jackson魔法:玩转JsonNode
哈喽,大家好,我是木头左! 揭秘Jackson库:JSON处理的瑞士军刀 在Java的世界里,处理JSON数据就像是一场探险。幸运的是,Jackson库就像一把多功能的瑞士军刀,为提供了强大而灵活的工具来解析和操作…...

为什么要使用动态代理IP?
一、什么是动态代理IP? 动态代理IP是指利用代理服务器来转发网络请求,并通过不断更新IP地址来保护访问者的原始IP,从而达到匿名访问、保护隐私和提高访问安全性的目的。动态代理IP在多个领域中都有广泛的应用,能够帮助用户…...

【PB案例学习笔记】-09滚动条使用
写在前面 这是PB案例学习笔记系列文章的第8篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gitee…...

C++中常见的构造函数类别
目录 摘要 默认构造函数(Default Constructor): 带参数的构造函数(Parameterized Constructor): 拷贝构造函数(Copy Constructor): 移动构造函数(Move C…...

万界星空科技MES系统功能介绍
制造执行系统或MES 是一个全面的动态软件系统,用于监视、跟踪、记录和控制从原材料到成品的制造过程。MES在企业资源规划(ERP) 和过程控制系统之间提供了一个功能层,为决策者提供了提高车间效率和优化生产所需的数据。 万界星空科技MES 系统基础功能&am…...

炸裂的开源AI语音生成模型ChatTTS
今天看到GitHub上开源了一个非常厉害的AI语音生成模型ChatTTS,可以生成和人类声音非常接近的语音,而且有语气、语调、可以停顿和发出笑声,再也没有了以前的AI味道 体验地址:https://colab.research.google.com/drive/1MYep5f0-BJ…...

Mac逆向Electron应用
工具库 解压asar文件 第一步 找到应用文件夹位置 打开活动监视器: 搜索相关应用 用命令行打开刚才复制的路径即可 open Applications/XXX.app/Contents/Resources/app第二步 解压打包文件 解压asar文件...

(三)MobaXterm、VSCode、Pycharm ssh连接服务器并使用
背景:根据前两篇文章操作完成后, 手把手教学,一站式安装ubuntu及配置服务器-CSDN博客 手把手教学,一站式教你实现服务器(Ubuntu)Anaconda多用户共享-CSDN博客 课题组成员每人都有自己的帐号了࿰…...

【Linux】初识信号及信号的产生
初始信号 初始信号什么是信号站在应用角度的信号查看Linux系统定义的信号列表 信号的常见处理方式信号的产生通过终端按键产生信号什么是core dump?如何开启core dump?core dump有什么用?为什么默认关闭core dump?设置了core文件大小但是没有产生core文…...

故障诊断 | 基于 KAN、KAN卷积的轴承故障诊断模型
研究背景: 轴承是机械设备中常见的关键部件之一,其工作状态直接影响设备的性能和可靠性。因此,轴承故障的早期诊断对于设备的正常运行和维护具有重要意义。近年来,基于振动信号的轴承故障诊断成为了研究的热点之一。KAN: Kolmogorov-Arnold Network 是一种有效的处理方法。…...

【设计模式】JAVA Design Patterns——Factory Method(虚拟构造器模式)
🔍目的 为创建一个对象定义一个接口,但是让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类 🔍解释 真实世界例子 铁匠生产武器。精灵需要精灵武器,而兽人需要兽人武器。根据客户来召唤正确类型的铁匠。 通俗描述 它为类…...

Spring——依赖项
文章目录 依赖注入基于构造函数的依赖注入基于 Setter 的依赖注入依赖解析过程依赖注入的示例 依赖关系和配置详细信息直接值(原语、字符串等)idref标签References to Other Beans (对其他 Bean的引用)Inner Beans(内部…...

C语言 | Leetcode C语言题解之第119题杨辉三角II
题目: 题解: int* getRow(int rowIndex, int* returnSize) {*returnSize rowIndex 1;int* row malloc(sizeof(int) * (*returnSize));row[0] 1;for (int i 1; i < rowIndex; i) {row[i] 1LL * row[i - 1] * (rowIndex - i 1) / i;}return row…...

深入分析 Android Service (一)
文章目录 深入分析 Android Service (一)1. Android Service 设计说明1.1. Service 的类型1.2. Service 的生命周期1.3. 创建和启动 Service1.4. 绑定 Service1.5. ServiceConnection1.6. 前台 Service1.7. IntentService示例:创建和使用 IntentService 2. Service …...

英飞凌24GHz毫米波雷达-BGT24LTR11N16家用机器人应用
BGT24LTR11N16基础描述: 关于BGT24LTR11N16,它是一款用于信号生成和接收的硅锗雷达MMlC,工作频率为24.00GHz至24.25GHz ISM频段。它基于24GHz基本电压控制振荡器(VCO)。 这颗芯片是属于1T1R,也就是一发一收…...

17.js字符串
字符串创建 1.字面量创建 var 字符串名字符串 2.内部构造函数创建 var 字符串名new String(字符串) length属性 只能读取不能设置 var strabcdfegfglconsole.log(str.length) //10str.length5 console.log(str) //不能写 abcdfegfgl index属性 只能读不能设置 var strab…...

JS-51-Node.js10-yarn
一、yarn的简介 Yarn 是一款 JavaScript 的包管理工具(npm的代替方案),是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。 正如 Yarn 官网的介绍,Yarn 的具有速度快 、安全 、可靠 的优点&#x…...

idea项目一直在build
IDEA项目一直在build的原因可能包括构建进程堆大小过小、缓存问题、依赖包下载缓慢或网络问题。12 构建进程堆大小过小:如果IDEA的构建进程堆大小设置得不够大,可能会导致构建过程缓慢或卡顿。解决方法是将构建进程堆大小参数扩大,例如将700…...

SpringBoot六种API请求参数读取方式
SpringBoot六种API请求参数读取方式 同步请求和异步请求 同步: 指单线程依次做几件事异步: 指多线程同时做几件事 同步请求: 指客户端浏览器只有一个主线程, 此线程负责页面的渲染和发出请求等操作, 如果此主线程发出请求的话则停止渲染而且会清空页面显示的内容 直到服务器响…...

WSDM2024推荐系统和LLM相关论文整理(二)
WSDM 2024接收的论文已经公布,全部收录的论文可前往地址 网址:https://www.wsdm-conference.org/2024/accepted-papers/ 其中推荐系统相关论文三十余篇,下文列举了部分论文的标题以及摘要,更多内容欢迎关注公众号【深度学习推荐算…...