当前位置: 首页 > news >正文

【stm32】I2C通信协议

【stm32】I2C通信协议

概念及原理

  • 如果我们想要读写寄存器来控制硬件电路,就至少需要定义两个字节数据

    • 一个字节是我们要读写哪个寄存器,也就是指定寄存器的地址

    • 另一个字节就是这个地址下存储寄存器的内容

      • 写入内容就是控制电路,读出内容就是获取电路状态

I2C硬件规定(硬件电路)

一主多从
  1. cpu就是我们的单片机,作为总线的主机

    1. 任何时候都是主机掌控SCL线

    2. 在空闲状态下,主机可以主动发起对SDA的控制

    3. 只有在从机发送数据和从机应答的时候,主机才会转交SDA的控制权给从机

    4. 对于从机在任何时候,都只能被动的获取SCL时钟线,从机不允许控制SCL线

    5. 对于SDA数据线,只有在主机发送读取从机的命令后,或者从机应答的时候,从机才能短暂的获取SDA的控制权

L2C的SCL和SDA的输入输出配置问题
  1. 为了避免总线没协调好导致电源短路这个问题(从机一个输出高电平一个输出低电平),I2C的设计是,禁止所有设备输出强上拉的高电平

  2. 采用外置弱上拉电阻加开漏输出的电路结构

    1. 在这里插入图片描述

    2. 就是设备的SCL和SDA均要配置成开漏输出模式

  3. 在这里插入图片描述

    1. 要是想输出,就去拉杆子或放手,操作杆子变化就行

    2. 要是像输入,就直接放手,观察杆子高低就行

    3. 因为开漏模式下,开漏模式下,输出高电平就相当于断开引脚

      1. 所以在输入之前,可以直接输出高电平

      2. 不需要再切换成输入模式了

关于SCL和SDA时序问题

  1. 拽下SCL是因为:

    1. 一方面是占用这个总线

    2. 另一方面也是方便我们这些基本单元的拼接

      1. 就是我们之后会保证,除了起始和终止条件,每个时序单元的SCL都是以低电平开始低电平结束
  2. 主机接收一个字节数据

    1. 在接收前需要释放SDA,释放SDA就相当于切换成输入模式

    2. 或者理解成,所有设备包括主机都处于输入模式,当主机需要发送的时候,可以主动拉低SDA,而主机在被动接收的时候,就必须先释放SDA

    3. 因为总线是线与的特征,任何一个设备拉低,总线就是低电平

如果有相同的芯片挂在同一条总线

  • 这就用到地址中的可变部分了

  • 一般器件的最后几位是可以在电路中改变的

  • 比如MPU6050地址的最后一位,就可以由板子上的AD0引脚确定

    • 这个引脚接低电平,那他的地址就是1101 000

    • 这个引脚接高电平,那他的地址就是1101 001

相关文章:

【stm32】I2C通信协议

【stm32】I2C通信协议 概念及原理 如果我们想要读写寄存器来控制硬件电路,就至少需要定义两个字节数据 一个字节是我们要读写哪个寄存器,也就是指定寄存器的地址 另一个字节就是这个地址下存储寄存器的内容 写入内容就是控制电路,读出内容就…...

《论文阅读》构建情感共识并利用未配对数据生成共情对话 ACL 2021

《论文阅读》构建情感共识并利用未配对数据生成共情对话 ACL 2021 前言简介模型构架损失函数实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Constructing Emotion Consensus and Utilizing …...

xilinx fpga 程序固化(含sdk)

一、前言 xilinx 旗下的产品主要有包含有处理器的SOC系列,也有只有纯逻辑的fpga,两者的程序固化的方法并不相同,本文介绍含有处理器或者microblaze中有程序的固化。 二、固化流程 2.1 在sdk中固化 SDK中选择Xilinx Tools–Program FPGA&a…...

更高效、更简洁的 SQL 语句编写丨DolphinDB 基于宏变量的元编程模式详解

元编程(Metaprogramming)指在程序运行时操作或者创建程序的一种编程技术,简而言之就是使用代码编写代码。通过元编程将原本静态的代码通过动态的脚本生成,使程序员可以创建更加灵活的代码以提升编程效率。 在 DolphinDB 中&#…...

Python中的sort()与sorted()用法

Python中的sort()函数主要用于对列表(list)中的元素进行排序。它有两种形式:一种是列表的方法(即直接对列表对象调用),另一种则是内置的sorted()函数,它返回一个新的已排序列表,而不…...

15.队列集

1.简介 在使用队列进行任务之间的“沟通交流”时,一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集。FreeRTOS提供的队列集功能可以对多个队列进行“监听”,只要…...

Dubbo 集群容错

Dubbo 集群容错 假设我们运营一个大型的电子商务网站,它有大量的用户在任何时间都在进行购物、浏览商品、添加到购物车、结账等操作。为了处理这种高流量和高并发性的情况,我们可能已经设置了一个由多个服务器组成的计算机集群。 在这种情况下&#xf…...

杨辉三角形(蓝桥杯,acwing)

题目描述: 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ... 给定一个正整数 N,请你输出数列中第一次出现…...

计算系数(acwing,数论)

题目描述: 给定一个多项式 (axby)^k,请求出多项式展开后 x^n*y^m 项的系数。 输入格式: 共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格…...

阿里面试题二

实在是太长了 重新开一篇吧 dubbo 服务暴露 Dubbo——服务调用、服务暴露、服务引用过程 - 简书 这两篇文章写的是极好 我现在查得资源强的可怕朋友们 服务降级 MockClusterInvoker 负载均衡策略 容错机制在哪里实现的源码 通信 NIO、BIO区别,NIO解决了什么…...

第9章 文件和内容管理

思维导图 9.1 引言 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理。它的重点在于保持文件和其他非结构化或半结构化信息的完整性,并使这些信息能够被访问。文件和非结构化内容也应是安全且高质量的。 确保文件和内容…...

【Erlang】【RabbitMQ】Linux(CentOS7)安装Erlang和RabbitMQ

一、系统环境 查版本对应,CentOS-7,选择Erlang 23.3.4,RabbitMQ 3.9.16 二、操作步骤 安装 Erlang repository curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash安装 Erlang package s…...

pe格式从入门到图形化显示(七)-导出表

文章目录 前言一、什么是Windows PE格式中的导出表?二、解析导出表并显示1.导出表的结构2.解析导出表3.显示导出表 前言 通过分析和解析Windows PE格式,并使用qt进行图形化显示 一、什么是Windows PE格式中的导出表? PE文件格式的导出表是P…...

图片地址生成二维码(通过前端实现)

文章目录 概要安装插件代码实例 概要 要将图片地址生成二维码,你可以使用 QrCode 库(假设你已经在项目中引入了该库)。以下是一个简单的示例代码,演示了如何使用 QrCode 库将图片地址转换为二维码并显示在页面上 安装插件 先下载…...

window安装maven和hadoop3.1.4

前面的文章已讲解如何安装idea和进行基本设置,本文主要带着大家安装配置好maven和hadoop. 大家不用去官网下载,直接使用我发给大家的压缩文件,注意解压后的文件夹不要放在中文目录下,课堂上我们讲解过原因。 这是我电脑上的路径&a…...

Redis系列之主从复制集群搭建

在上一篇博客,我们已经知道怎么搭建一个redis单机版,这篇博客基于之前的基础,来搭建一个redis主从同步,本博客框架是一主二从,一个主节点,其它两个从节点 实验环境 CentOS7Xshell6XFtp6Redis6.2.2 主从关…...

spring框架介绍

spring 1.优点 1)针对接口编程,解耦合 2)aop:变向切面编程,动态增加功能 3)方便集成框架,mybatis,hibernate,strust等 4)降低j2ee接口的使用难度 2.spring是干什么的 管理bean及bean…...

如果在 Ubuntu 系统中两个设备出现两个相同的端口号解决方案

问题描述: 自己的移动机器人在为激光雷达和IMU配置动态指定的端口时,发现激光雷达和深度相机配置的 idVendor 和 idProduct 相同,但是两个设备都具有不同的ttyUSB号,如下图所示 idVendor:代表着设备的生产商ID,由USB设…...

随手分享的APP链接,可能会让你“大型社死”

早晨上班路上,你在地铁百无聊赖地刷着短视频,看到一则好笑的,随手分享给了你的公司“饭搭子”,并配上了一串“哈哈哈哈哈哈”。 晚上下班路上你再次打开视频APP,发现首页弹窗给你推荐了一组“可能认识的人”&#xff…...

国内AI大模型已近80个,哪个最有前途?

根据中国新一代人工智能发展战略研究院发布的报告显示,目前全国已有3k+家人工智能企业,国内的AI大模型应该也近在200了!!! (原图图片过长了,这里就先放了20个) 面对如…...

告别迷茫!在嵌入式Linux上用libwebsockets v4.0实现WebSocket客户端(含SSL配置避坑)

嵌入式Linux实战:libwebsockets v4.0客户端开发与SSL避坑指南 当树莓派的GPIO引脚需要与云端实时同步数据时,WebSocket往往是嵌入式开发者的首选协议。但面对内存仅512MB的ARMv7开发板,选用一个既支持SSL加密又能兼容C99标准的轻量级库&#…...

穿越机老鸟踩坑实录:MPU6000传感器在F4飞控上的IMU方向“玄学”配置

穿越机IMU方向配置实战:从MPU6000异常自旋到飞控底层校准 当你的穿越机在通电瞬间像被无形大手狠狠抽了一记耳光般疯狂自旋,而Betaflight地面站里陀螺仪数据却显示"一切正常"时,这往往意味着你正遭遇IMU方向配置的"量子纠缠态…...

从零构建AOD-Net:PyTorch实战图像去雾模型开发全流程

1. 环境准备与数据理解 在开始构建AOD-Net之前,我们需要先搭建好开发环境。推荐使用Anaconda创建独立的Python环境,避免与其他项目产生依赖冲突。这里我选择Python 3.8和PyTorch 1.12的组合,这个版本经过实测在图像处理任务中表现稳定。 安装…...

柔性LED灯丝DIY:从电路原理到创意饰品制作全攻略

1. 项目概述:当生日遇上柔性LED灯丝给孩子的生日派对准备一份独一无二的、会发光的惊喜,是很多家长和手工爱好者的心愿。这次,我们不买现成的塑料灯牌,而是亲手做一个能戴在头上或挂在脖子上的“生日数字灯冠”。这个项目的核心&a…...

基于Fire2012算法与FastLED库的Arduino LED篝火制作全攻略

1. 项目概述:用代码点燃一场永不熄灭的数字篝火夏夜、星空、朋友围坐,篝火带来的温暖与氛围是露营的灵魂。但现实是,很多营地禁止明火,或者在城市阳台、室内空间,生一堆真正的火既不安全也不现实。作为一名玩了十多年A…...

Aurora框架解析:一体化高性能云原生开发平台的设计与实践

1. 项目概述与核心价值如果你在开源社区里混迹过一段时间,尤其是对现代化、高性能的Web开发框架感兴趣,那么“Aurora”这个名字你大概率不会陌生。它不是一个简单的库或者工具,而是一个由社区驱动的、旨在构建下一代企业级应用开发平台的雄心…...

openpilot自动驾驶系统深度解析:架构剖析与实战指南

openpilot自动驾驶系统深度解析:架构剖析与实战指南 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Trending/…...

为AI编程助手构建安全防线:Cursor自定义规则实战指南

1. 项目概述:为AI编程助手装上“安全护栏” 如果你和我一样,深度使用Cursor这类AI编程助手,那你一定体验过它带来的效率革命。它能帮你生成代码、重构函数、甚至解释复杂的逻辑,就像一个不知疲倦的编程伙伴。但硬币总有另一面——…...

ElevenLabs匈牙利语音API响应延迟飙升300%?内网穿透+CDN缓存+匈牙利语音素预加载三阶优化方案

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs匈牙利文语音API响应延迟飙升300%的现象复现与根因定位 近期多位开发者反馈,ElevenLabs API 在处理匈牙利语(hu-HU)文本转语音请求时,平均端到…...

【2026最新】鸿蒙NEXT ArkUI实战:培训班管理系统UI界面开发全攻略

鸿蒙UI开发总是踩坑?ArkUI组件用法记不住?本文用15分钟带你彻底搞懂ArkUI核心组件、布局系统、自定义组件和交互动画,附完整培训班管理系统实战代码和踩坑记录,让你的鸿蒙App界面从此丝滑流畅!一、培训班管理界面设计1…...