嵌入式开发之STM32学习笔记day16

article/2025/7/2 13:43:29

STM32F103C8T6 I2C通信协议

1 I2C简介

        I2C(Inter-Integrated Circuit)是一种两线制的串行通信协议,广泛应用于微控制器与外围设备之间的数据传输,它支持多主多从的通信模式,允许多个设备连接在同一总线上,通过7位或10位的唯一地址进行识别,数据传输与时钟信号同步,支持标准模式(100 kbit/s)、快速模式(400 kbit/s)和高速模式(3.4 Mbit/s),并且通过起始和停止条件来标识通信的开始和结束,以及通过应答信号(ACK/NACK)来确认数据接收,因其简单、可靠且成本效益高,I2C协议成为许多嵌入式系统和微控制器系统中首选的通信协议。

        I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线;两根通信线:SCL(Serial Clock)、SDASerial Data同步,半双工带数据应答;支持总线挂载多设备(一主多从、多主多从);所有I2C设备的SCL连在一起,SDA连在一起;设备的SCL和SDA均要配置成开漏输出模式;SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右。

2 I2C时序基本单元

起始条件:SCL高电平期间,SDA从高电平切换到低电平

终止条件:SCL高电平期间,SDA从低电平切换到高电平

发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA

发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答;

接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA);

 指定地址写:对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data

        这张图片显示的是I2C(Inter-Integrated Circuit)通信协议的波形图,它是一种用于连接微控制器和外围设备的两线制串行通信协议。图中展示了SCL(串行时钟线)和SDA(串行数据线)上的信号波形。

  1. 起始条件(S):通信开始于一个起始条件,由SDA线在SCL线为高电平时从高电平跳变到低电平。

  2. 发送字节(Send Byte)

    • 第一个发送的字节是0xD0,这通常包含从设备的地址和读/写(R/W)位。图中显示了7位地址后跟一个位R/W位,其中R/W位为0表示写操作。

    • 第二个发送的字节是0x19,这是寄存器地址,用于指定从设备中读取或写入数据的寄存器位置。

    • 第三个发送的字节是0xAA,这是要写入从设备的数据。

  3. 应答信号(RA:0):在每个字节发送后,从设备通过拉低SDA线来发送一个应答信号(ACK),表示已成功接收到该字节。

  4. 停止条件(P):通信结束于一个停止条件,由SDA线在SCL线为高电平时从低电平跳变到高电平。

当前地址读:对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data

指定地址读:对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data


http://www.hkcw.cn/article/MIHgQHdtUh.shtml

相关文章

Redis数据类型操作命令

Redis通用命令 keys:查看符合模板的所有key 因为keys命令使用的是模糊查序,比较耗性能,由于有redis是单线程,因此在生成情况下不建议使用该命令。del:删除一个或者多个keyexists:判断一个key是否存在expi…

Leetcode 2123. 使矩阵中的 1 互不相邻的最小操作数

1.题目基本信息 1.1.题目描述 给你一个 下标从 0 开始 的矩阵 grid。每次操作,你可以把 grid 中的 一个 1 变成 0 。 如果一个矩阵中,没有 1 与其它的 1 四连通(也就是说所有 1 在上下左右四个方向上不能与其他 1 相邻)&#x…

STL解析——list的使用

目录 1.简介 2.构造函数 3.迭代器 3.1封装 3.2迭代器分类 4.排序性能 4.1链式与数组 4.2缓存读取 1.简介 STL容器中提供的list容器也是一种顺序容器,底层实现方式是带头双向链表,这种实现方式能比单链表更高效的访问数据。 下面围绕部分重要接口…

数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握)

数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握) 前言一、什么是集合查询?二、集合操作的三种类型1. 并操作2. 交操作3. 差操作 三、使用集合查询的前提条件四、常见问题与注意事项五、…

数学建模期末速成 最短路径

关键词:Dijkstra算法 Floyd算法 例题 已知有6个村庄,各村的小学生人数如表所列,各村庄间的距离如图所示。现在计划建造一所医院和一所小学,问医院应建在哪个村庄才能使最远村庄的人到医院看病所走的路最短?又问小学建…

MonitorSDK_监测用户行为(点击、页面路由变化、页面浏览量变化)

点击事件监测 为了实现用户点击事件的监控和数据埋点,可以通过监听全局的 mousedown 和 touchstart 事件,收集用户交互数据,并将其上报到服务器。 export default function onClick(){[mousedown, touchstart].forEach( eventType > { …

NE555输出PWM驱动NMOS控制灯光电路Multisim仿真

仿真电路: 遇到的一些问题: 1、NE555怎么产生PWM波形? 解: 555定时器频率计算器_555定时器频率在线计算_电路参数计算 - 电子发烧友(www.elecfans.com) 这个在线工具可以通过设定频率、占空比、电阻,从而求出电阻值…

ThinkPrune:在RL中引入长度限制,在保持性能一致或略有提升下,显著提升推理效率

摘要:我们提出了THINKPRUNE,这是一种简单而有效的方法,用于缩短长思考型大语言模型(LLMs)的思考长度。这些模型被发现常常会产生低效且冗余的思考过程。现有的关于减少思考长度的初步探索主要集中在迫使思考过程提前结…

重温经典算法——堆排序

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 基本原理 堆排序是一种基于二叉堆的排序算法,时间复杂度为O(n log n)。堆排序核心步骤包括构建最大堆和反复取出堆顶元素排序:首先从最后一个非叶子…

PyTorch——卷积层(3)

conv_arithmetic/README.md at master vdumoulin/conv_arithmetic GitHub out_channel1 out_channel2

5.29 自学测试 Linux基础 Day4

一、Linux操作系统介绍 1.操作系统介绍: 管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。 2.常见的操作系统 桌面操作系统:Windows系列、Linux、MacOS 嵌入式操作系统:Linux 服务器操作系统&#x…

推荐一款使用html开发桌面应用的工具——mixone

简介 mixone是开发桌面应用(Win、Mac、Linux)的一款工具、其基于electron实现。其拥有简单的工程结构。以为熟悉前端开发的程序员可以很轻松的开发出桌面应用,它比electron的其他框架更简单,因为那些框架基本上还需要了解electro…

leetcode hot100 二叉树(二)

书接上回:https://blog.csdn.net/weixin_74129837/article/details/148367615?spm1001.2014.3001.5501 8.验证二叉搜索树 维护一个min_val和max_val,限制当前结点的合法值范围。min_val和max_val动态变化。 class Solution { public:bool check(Tree…

【Linux】基础文件IO

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 前言 无论是日常使用还是系统管理,文件是Linux系统中最核心的概念之一。对于初学者来说,理解文件是如何被创建、读取、写入以及存储…

MYSQL MGR高可用

1,MYSQL MGR高可用是什么 简单来说,MySQL MGR 的核心目标就是:确保数据库服务在部分节点(服务器)发生故障时,整个数据库集群依然能够继续提供读写服务,最大限度地减少停机时间。 2. 核心优势 v…

【java面试】MySQL篇

MySQL篇 一、总体结构二、优化(一)定位慢查询1.1 开源工具1.2Mysql自带的慢日志查询1.3 总结 (二)定位后优化2.1 优化2.2 总结 (三)索引3.1 索引3.2 索引底层数据结构——B树3.3 总结 (四&#…

头像预览和上传

在写一个项目的时候,遇到了头像修改这个功能的需求,在最开始的学习中发现可以通过type为file的input文件读取图片,然后将其转换为DataUrl格式,最终作为Ima元素的src即可在页面上展示图片。但到后面开始写交互的时候发现DataUrl格式…

解锁效率新高度:Agent Zero智能助手框架

探索Agent Zero AI框架:您的个性化智能助手 在迅速发展的科技世界,Agent Zero AI框架为我们揭开了一个全新的大门。被设计成能够与用户同步成长与学习的智能助手,Agent Zero展现了它作为个性化使用工具的非凡潜力。在本篇文章中,…

第43节:Vision Transformer (ViT)视觉领域的革命性架构

1. ViT的诞生背景与核心思想 Vision Transformer (ViT) 是2020年由Google Research团队提出的一种革命性计算机视觉架构,它将自然语言处理(NLP)领域中大获成功的Transformer模型引入到计算机视觉任务中。这一创新彻底改变了传统卷积神经网络(CNN)在视觉任务中的主导地位,为图…

leetcode0513. 找树左下角的值-meidum

1 题目:找树左下角的值 官方标定难度:中 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7]…