STM32 IIC协议

本文代码使用 HAL 库。

文章目录

  • 前言
  • 一、什么是IIC协议
  • 二、IIC信号
  • 三、IIC协议的通讯时序
      • 1. 写操作
      • 2. 读操作
  • 四、上拉电阻作用
  • 总结

前言

从这篇文章开始为大家介绍一些通信协议,包括 UART,SPI,IIC等。

UART串口通讯协议
SPI通信协议


一、什么是IIC协议

  1. IIC协议概念:

IIC 协议是由 SDA 数据线 和 SCL时钟线 组成的串行总线,可以发送接收数据,采用半双工的通信方式。每个挂在总线上的器件都有唯一的地址,通常一个主机多个从机。

  • 数据线 :完成数据的收发
  • 时钟线:完成数据的同步传输。

位速在标准模式下可达 100kbits/s, 在快速模式下可达 400kbits/s, 在高速模式下可达 3.4Mbits/s.

  1. IIC 系统结构:
    在这里插入图片描述
(1). 在一个芯片内部,有一个或者多个 IIC控制器(主机)。
(2). 在一个 IIC 控制器上,可以连接一个或多个 IIC设备(从机)。
(3). IIC 总线只需要 2 根线:时钟线 SCL, 数据线 SDA。
(4). 在 IIC总线的SCL,SDA 上都有上拉电阻。
(5). 时钟线只能由主机产生,作用给从机,从而完成数据的收发同步。

二、IIC信号

IIC协议中数据的传输单位是字节。要用到 9 个时钟。前 8 个时钟用来传输数据,第 9 个时钟用来传输信号。传输数据时,先传输最高位

  1. 空闲状态
    当总线上的SDA 和 SCL 两条信号线同时处于高电平时,便于空闲状态。当不传输数据时,SDA和SCL就会被上拉电阻拉高,便进入了空闲状态。
    在这里插入图片描述
  2. 开启信号
    当SCL为高电平期间,SDA由高变低的跳变;便是总线的起始信号,只能由主机发起,且在空闲状态下才可以启动。
    在这里插入图片描述
  3. 停止信号
    当 SCL为高电平期间,SDA 由低到高的跳变,便是总线的停止信号,表示数据已经传输完成。
    在这里插入图片描述
  4. 响应信号
    接收器在接收到 8 位数据后,在第 9个周期,拉低 SDA。当接收方接收该字节成功,便会输出一个 ACK应答信号。

当SDA 为高电平,表示为非应答信号 NACK当 SDA为低电平,表示为应答信号 ACK
在这里插入图片描述

三、IIC协议的通讯时序

IIC总线上的设备可以 发送/接收 数据。

1. 写操作

流程如下:

- 主芯片要发送一个起始信号 start 。
- 然后主设备发送一个设备地址(用来确定是往哪个从机写数据),方向(0表示读,1表示写)。
- 从设备回应(用来确定从设备是否存在),然后就可以传输数据。
- 主设备发送一个字节的数据给从设备,等待回应。
- 每传输一字节数据,接收方都要有一个回应信号(用来确定数据是否接收完成),然后再传输下一个数据。
- 数据传输完成后,主芯片就会发送一个停止信号。

在这里插入图片描述

2. 读操作

流程操作:

- 主设备发送一个起始信号。
- 主设备发出一个从设备地址(用来确定从哪个设备读数据),方向(0表示写,1表示读)。
- 从设备回应(用来确定从设备是否存在),然后就可以传输数据。
- 从设备发送一字节数据给主设备,等待回应。
- 每传输一字节数据,接收方要有一个回应信号(用来确定数据是否接收成功),然后再传输下一个数据。
- 数据发送完成后,主设备会发送一个停止信号。

在这里插入图片描述

四、上拉电阻作用

  1. IIC 总线的SCL,SDA 上都有上拉电阻。外接2个上拉电阻的作用:当总线处于空闲状态时,总线为高电平状态

  2. 问 :SCL 为何要使用上拉电阻?

答 :在第 9 个时钟后,如果有某一方设备需要更多的时间来处理数据,它可以一直驱动三极管把 SCL 拉低当 SCL为低电平时,其他设备都不使用 IIC总线;只有当 SCL从低电平变为高电平的时候,IIC总线才能够被使用。

当该设备处理数据完毕,就绪时,就不再驱动三极管。这时上拉电阻把SCL变为高电平,其他设备就可以继续使用 IIC总线了。

在这里插入图片描述


总结

下一篇文章为大家介绍 SPI 和 UART 通信协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663807.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】YOLOv10实战:20行代码将笔记本摄像头改装成目标检测监控

目录 一、引言 二、YOLOv10视觉目标检测—原理概述 2.1 什么是YOLO 2.2 YOLO的网络结构 三、YOLOv10视觉目标检测—训练推理 3.1 YOLOv10安装 3.1.1 克隆项目 3.1.2 创建conda环境 3.1.3 下载并编译依赖 3.2 YOLOv10模型推理 3.2.1 模型下载 3.2.2 WebUI推理 …

微服务架构-微服务架构的挑战与微服务化的具体时机

目录 一、微服务架构的挑战 1.1 概述 1.2 服务拆分 1.3 开发挑战 1.4 测试挑战 1.4.1 开箱即用、一键部署的集成环境 1.4.2 测试场景和测试确定性 1.4.3 微服务相关的非功能测试 1.4.4 自动化测试 1.5 运维挑战 1.5.1 监控 1.5.2 部署 1.5.3 问题追查 1.5.4 依赖管…

chrome调试手机网页

前期准备 1、 PC端安装好chrmoe浏览器 2、 安卓手机安装好chrmoe浏览器 3、 数据线 原文地址:https://lengmo714.top/343880cb.html 手机打开调试模式 进入手机设置,找到开发者模式,然后启用USB调试 打开PC端chrome调试功能 1、点击chr…

视频汇聚平台EasyCVR对接GA/T 1400视图库:结构化数据(人员/人脸、车辆、物品)对象XMLSchema描述

在信息化浪潮席卷全球的背景下,公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中,GA/T 1400标准作为公安视频图像信息应用系统的核心规范,以其结构化数据处理与应用能力,为公安信息化建设注入了强大的动力。…

webpack5零基础入门-19HMR的应用

1.定义 HMR即HotModuleReplacement 开发时,当我们修改了其中一个模块的代码webpack默认会将所有模块重新打包编译,速度很慢所以我们需要做到修改摸个模块代码,只对这个模块的代码重新打包编译,其他模块不变,这样打包…

【excel】设置二级联动菜单

文章目录 【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项【步骤】step1 制作辅助列1.列转行2.在辅助列中匹配班级成员 之前做完了 【excel】设置可变下拉菜单(一级联动下拉菜单),开始做二级联动菜单。 【需求】在…

算法(六)计数排序

文章目录 计数排序技术排序简介算法实现 计数排序 技术排序简介 计数排序是利用数组下标来确定元素的正确位置的。 假定数组有10个整数,取值范围是0~10,可以根据这有限的范围,建立一个长度为11的数组。数组下标从0到10,元素初始…

【C++】哈希(2万字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 unordered系列关联式容器 unordered_map unordered_map的文档介绍 unordered_map的接口说明 unordered_set 底层结构 哈希概念 哈希冲突 哈希函数 哈希…

【康耐视国产案例】Nvidia/算能+智能AI相机:用AI驱动 | 降低电动车成本的未来之路

受环保观念影响、政府激励措施推动与新能源技术的发展,消费者对电动汽车(EV)的需求正在不断增长,电动汽车已经成为了未来出行方式的重要组成部分。然而,电动汽车大规模取代燃油汽车的道路还很漫长。最大的障碍就是电动汽车的售价相对过高。尽…

新设立湖北投资管理公司流程和要求

在湖北投资管理企业进行注册时,需要准备一系列的材料并按照一定的流程进行办理。本文将从注册材料及注册流程两方面来介绍,帮助您了解注册投资管理企业的步骤和所需的具体材料。详情致电咨询我或者来公司面谈。 新注册材料要求: 企业名称申请书:要求提供…

vue路由跳转之【编程式导航与传参】

vue路由有两种跳转方式 ----> 编程式与声明式,本文重点讲解vue路由的【编程式导航 】【编程式导航传参 ( 查询参数传参 & 动态路由传参 ) 】等内容,并结合具体案例让小伙伴们深入理解 ,彻底掌握!创作不易,需要的…

汇编:调用C函数

在32位汇编程序中可以调用C函数;这种做法在很多情况下是有用的,尤其是在汇编程序需要与C代码进行交互或利用C语言的库函数时。下面是一些情况下使用汇编调用C函数的常见情景: ①优化性能:某些特定的任务可能用汇编语言编写更有效率…

[Linux]重定向

一、struct file内核对象 struct file是在内核中创建,专门用来管理被打开文件的结构体。struct file中包含了打开文件的所有属性,文件的操作方法集以及文件缓冲区(无论读写,我们都需要先将数据加载到文件缓冲区中。)等…

POP —— Nodes DOP

POP Advect by Volumes —— 使用速度场驱动粒子 此节点被设计为更容易通过流体来驱动粒子,通常流体被单独模拟并从磁盘上读取速度场;此操作将修改force、vel、P属性; Update Force,调整粒子的加速度,类似POP Force&a…

RAID技术迭代、原理对比、产品梳理(HCIA)

目录 一、RAID技术迭代 传统RAID LUN虚拟化2.0 工作原理: 块虚拟化2.0 为什么有RAID2.0? RAID2.0实现原理: RAID-TPRAID 7 华为RAID-TP技术 RAID的4种工作状态 RAID算法 普通RAID算法 华为动态RAID算法 保险箱盘(存掉…

el-table中的信息数据过长 :show-overflow-tooltip=‘true‘**

可以在 el-table-column中添加 :show-overflow-tooltip‘true’

数字孪生仿真渲染引擎EasyTwin全新升级,焕新、多元、优质、高效一步到位!

EasyTwin作为数字孪生仿真渲染引擎,自2023年进入公测以来,致力于实现低成本零代码操作。在今年年初,我们重新回归业务场景,将产品定位从“融合渲染”转变为“仿真渲染”,面向数字孪生仿真渲染领域推出全新版本&#xf…

Optional类

一、概述 泛型类、java8引进的、java.util包里 二、作用 解决空指针异常带来的不便 三、做法 将对象封装为一个Optional对象,如果封装的对象为空(即该对象不存在),可以使用默认值和或者执行默认操作 四、方法 1、empty() 创…

【Qt秘籍】[006]-Qt 的 Hello World程序-编程第一步

"Hello,World!" 中文意思是“你好,世界”。 因为 The C Programming Language 中使用它做为第一个演示程序,后来很多程序员在学习编程或进行设备调试时延续了这一习惯。 下面,我们也将演示Qt中的"Hello World!" 我们先创…

【脚本篇】---spyglass lint脚本

目录结构 sg_lint.tcl (顶层) #1.source env #date set WORK_HOME . set REPORT_PATH ${WORK_HOME}/reports puts [clock format [clock second] -format "%Y-%m-%d %H:%M:%S"] #2.generate source filelist #3.set top module puts "##…