【STM32】IIC(Inter Integrated Cirruit--集成电路总线)

news2024/9/24 21:26:26

【单片机】14-I2C通信之EEPROM-CSDN博客

一、IIC总线协议介绍

1.IIC简介

同步(有时钟频率),半双工(同一个时间只能接收或者发送),串行(一个字节一个字节传输),高位读取

一主多从:表示只能主机同意发送才可以发送

多主多从:表示其中每一个人都有说话的权力,但是同一个时间只能有一个人说话【仲裁】

2.IIC总线结构图

1)主机控制SDA和SCL,只有从机发送应答的时候主动权才在从机上

2)从机不允许控制SCL

3.IIC协议时序

应答:因为在CLK和SDA上有一个上拉电阻,表示在没有传入数据的时候,默认两个数据线上的电平为高电平。当我们接收到数据时,就要将电平从高电平拉低为低电平。所以nack(高电平)表示未接收到数据,ack(低电平)表示接收到数据。

4.起始/停止代码

起始/终止都是由主机产生的

5.接收应答信号:主机--->从机

表示当主机数据传输结束后,需要从机发送一个应答信号。

主机将SDA拉高,如果从机接收到数据了,则将SDA拉低,

                             如果没有接收到,则SDA不变(还是处于被主机拉高的状态)

6.发送应答信号:从机-->主机

7.发送非应答信号

8.开始信号、结束信号、应答信号

9.发送1字节数据

1)SCL在低电平时期-->SDA将数据放上去-(此时数据放好了)-->SCL松开手(变为高电平)---->从机开始读取数据--(数据读取好了)->SCL拉低电平

2)当在传输数据的时候,产生中断,此时SCL和SDA不会发生变化,会等待处理完成后在接着执行

3)任何一个设备拉低电平,整个线上都是低电平

4)只有全部设备都拉高,整个线上才会是高电平

发送数据:低电平,主机发送数据

                  高电平,从机接收数据

发送完数据就要是否SDA--》置为高电平

10.接收1字节数据

读取数据:低电平,从机发送数据【从机掌握SDA的控制权,所以主机要先是否SDA】

                  高电平,主机接收数据

11.数据传输注意点

IIC总线在进行数据传送时,时钟线SCL为低电平期间,发送器向数据线发送一位数据,此期间数据线上的信号允许发送变化,时钟线SCL为高电平期间,接收器从数据线上读取一位数据,此期间数据线上的信号不允许发生变化,需保持稳定。(即时钟线SCL的作用是告诉发送器什么时候发送数据,告诉接收器什么时候读取数据。故时钟线SCL既连在发送器上,又连在接收器上)

12.重点:当前地址写时序图

1.第一字节:指定地址写

第一个数据=从机地址+读/写位

0:写入操作

1:读入操作

2.第二字节:指定寄存器地址

3.第三字节:传输数据

13.当前地址读时序图

0:写入操作

1:读入操作

由于当前地址读,当设置为读时序,就马上开始读,所以无法指定要读取哪一个寄存器的值。所以只能读取当前寄存器的值。

14.重点:指定地址读时序图(复合格式)

用于读取外挂寄存器的值

为什么我们这里可以进行指定写寄存器的值???

这里我们在当前地址读操作前加上指定地址写--->指定地址读=指定地址写+当前地址读

2)记得最后结束的时候应答信号是0(非应答信号)

二、MPU6050:6轴姿态传感器

1.MPU6050简介

10轴:3轴加速度+3轴角速度+3轴磁场强度+1个气压强度

姿态角=欧拉角【比如飞机的左转,右转等】

压了任意一个面,就会产生压力,输出对应的压力值

加速度计(压力计):A

具有静态稳定性,不具有动态稳定性(因为在运动的时候,计算出来的结果会有误差)

陀螺传感器:G

MPU6050中陀螺传感器测量的是角速度

陀螺仪具有动态稳定性,不具有静态稳定性

2.MPU6050参数

1)满量程:等价于ADC转换中的Vref参考电压一样

2)加速度的单位:g(1g=9.8m/s^2)

3)

        如果MUP6050的从机地址为:0xD0(包含写地址位)或者0xD1(包含读地址位),表示将读/写位融入从机地址

      如果MUP6050的从机地址为:0x68(直接把7位地址转换位十六进制得到的),则在计算传入数据时要将数据(0x68<<1)再或与上读/写

3.硬件电路

根据我们此时的应用场景

直接将J1引脚上的SCL和SDA直接接到我们对应STM32的IIC引出的RXD和TXD两个引脚上即可。

4.MPU6050框图

自测功能

电荷泵

升压自动的

IIC接口

5.略读数据手册

MPU-6050_(TDK InvenSense(应美盛))MPU-6050中文资料_价格_PDF手册-立创电子商城 (szlcsc.com)

三、软件IIC读写MPU6050

软件IIC读写:实际上就是自己操控GPIO引脚的高低电平转换

1.硬件连接

2.模块划分

3.IIC代码编写

0.引脚的封装

可移植性高

1.iic_init()

1)初始化为开漏输出,释放总线(置为高电平)

2)SCL和SDA处于高电平,此时IIC处于空闲状态

2.起始条件

1)要先拉低SDA再拉低SCL

2)先确保SDA和SCL都为高电平,然后再拉低SDA和SCL

3.终止条件

先拉低SDA(确保SDA是从低电平--->高电平)

再拉高SCL

最后拉高SDA

4.发送一个字节

1)将SCL拉低

2)趁SCL为低,将数据放到SDA上

3)将SCL拉高,开始读取SDA

4)读取结束,将SCL拉低,准备下一次读取

5.接收一个字节

1)将SCL拉低

2)将SDA释放---》表示将SDA的主动权交给从机(设置为高电平)【因为此时数据是从从机输出给主机】

3)如果传输的是高电平则就就拉高,如果传输的是低电平则就拉低

4)趁SCL为低,将数据放到SDA上

5)将SCL拉高,开始读取SDA【判断SDA上是高电平还是低电平】

6)读取结束,将SCL拉低,准备下一次读取

6.发送应答

1)将SCL拉低

2)将应答数据放入SDA

3)拉高SCL,开始读取应答信号

4)拉低SCL,开始读取下一次数据

7.接收应答

1)将SCL拉低

2)释放SDA--》将SDA主动权交给从机【因为此时数据是从从机输出给主机】

3)将应答数据放入SDA

4)拉高SCL,开始读取应答信号

5)拉低SCL,开始读取下一次数据

4.IIC测试代码

指定地址写

main.c

5.MPU6050代码

1.mpu6050写入寄存器

2.mpu6050读入寄存器

前面一部分和“ mpu6050写入寄存器 ”一样

最后记得将应答信号修改为不应答

6.MPU6050测试代码

获取MPU6050的id

[10-3] 软件I2C读写MPU6050_哔哩哔哩_bilibili

未看完-->等待后面继续了解【44分】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卡尔曼滤波器在车流量检测中的应用

目录 1. 作者介绍2. 卡尔曼滤波器2.1 卡尔曼滤波概述2.2 标志性发展2.3 卡尔曼公式理解 3. 车流量检测3.1 背景介绍3.2 实现过程3.2.1 YOLOv3网络模型结构3.2.2 SORT算法3.2.3 基于虚拟线圈法的车辆统计 4. 算法实现4.1 Kalman.py4.2 完整代码4.3 结果展示 1. 作者介绍 吴思雨…

左支座零件的机械加工工艺规程及工艺装备设计【计算机辅助设计与制造CAD】

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;左支座 获取完整CAD工程源文件论文报告说明书等 一、论文目录 二、论文部分内容 设计任务 1.完成左支座零件—毛坯合图及左支座零件图 2.完成左支座零件工艺规程设计 3.完成左支座零件加工工艺卡 4.机床专用夹具装备总图 …

小迪笔记(1)——操作系统文件下载反弹SHELL防火墙绕过

名词解释 POC&#xff1a;验证漏洞存在的代码&#xff1b; EXP&#xff1a;利用漏洞的代码&#xff1b; payload&#xff1a;漏洞利用载荷&#xff0c; shellcode&#xff1a;漏洞代码&#xff0c; webshell&#xff1a;特指网站后门&#xff1b; 木马&#xff1a;强调控制…

华为流量统计的2种配置方法

第一种就是用实打实的配置去设置&#xff0c;配置比较复杂 比如华为防火墙流量统计&#xff1a; acl 3000 rule permit ip source 192.168.0.1 0.0.0.0 dest 10.0.0.1 0.0.0.0 diagnose firewall statistic acl 3000 enable dis firewall statistics acl //流量查看 另一种最…

C语言实现带头双向循环链表

文章目录 写在前面1. 链表节点的定义2. 链表的初始化3. 插入数据3.1 头插3.2 尾插3.3 在指定位置的前面插入数据 4 删除数据4.1 头删4.2 尾删4.3 删除指定位置的数据 5 查找并修改数据5. 链表的销毁 写在前面 上面文章用C语言实现了单链表的增删查改&#xff0c;我们知道&…

Python将已标注的两张图片进行上下拼接并修改、合并其对应的Labelme标注文件

Python将已标注的两张图片进行上下拼接并修改、合并其对应的Labelme标注文件 前言前提条件相关介绍实验环境上下拼接图片并修改、合并其对应的Labelme标注文件代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff…

手写消息队列(基于RabbitMQ)

一、什么是消息队列&#xff1f; 提到消息队列是否唤醒了你脑海深处的记忆&#xff1f;回看前面的这篇文章&#xff1a;《Java 多线程系列Ⅳ&#xff08;单例模式阻塞式队列定时器线程池&#xff09;》&#xff0c;其中我们在介绍阻塞队列时说过&#xff0c;阻塞队列最大的用途…

【Linux】:体系结构与进程概念

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux体系结构和进程的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入…

「Java开发指南」如何在Spring中使用JAX-WS注释器?

本文将指导您如何使用JAX-WS注释器从Spring服务生成JAX-WS Web服务&#xff0c;在本教程中&#xff0c;您将学习如何&#xff1a; 为Spring服务启用JAX-WS部署应用程序并测试服务 所有与Spring scaffolding相关的任务都需要MyEclipse Spring或Bling授权。 MyEclipse v2023.1…

『力扣刷题本』:二叉树的中序遍历

一、题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1…

【NI-DAQmx入门】校准

1.设备定期校准的理由 随着时间的推移电子器件的特性会发生自然漂移&#xff0c;可能会导致测量结果的不准确性。防止出现良品和差品筛选出错的情况满足行业国际标准降低设备出现故障的风险使测量结果更具备参考性 2.查找NI设备的校准间隔。 定期校准会使DAQ设备的精度保持在…

Linux远程工具专家推荐(二)

8. Apache Guacamole Apache Guacamole 是一款免费开源的无客户端远程桌面网关&#xff0c;支持 VNC、RDP 和 SSH 等标准协议。无需插件或客户端软件&#xff1b;只需使用 HTML5 Web 应用程序&#xff08;例如 Web 浏览器&#xff09;即可。 这意味着您的计算机的使用不受任何一…

线性表--链表-1

文章目录 主要内容一.链表练习题1.设计一个递归算法&#xff0c;删除不带头结点的单链表 L 中所有值为 X 的结点代码如下&#xff08;示例&#xff09;: 2.设 L为带头结点的单链表&#xff0c;编写算法实现从尾到头反向输出每个结点的值代码如下&#xff08;示例&#xff09;: …

Jave 定时任务:使用Timer类执行定时任务为何会发生任务阻塞?如何解决?

IDE&#xff1a;IntelliJ IDEA 2022.2.3 x64 操作系统&#xff1a;win10 x64 位 家庭版 JDK: 1.8 文章目录 一、Timer类是什么&#xff1f;二、Timer类主要由哪些部分组成&#xff1f;1.TaskQueue2. TimerThread 三、示例代码分析四、自定义TimerTask为什么会发生任务相互阻塞的…

度加创作工具 演示

度加创作工具 功能图功能测试文比润色测试经验分享测试测试输出测试输出工具地址功能图 功能测试 文比润色测试 经验分享测试 测试输出 在人工智能领域,我们一直在追求一个终极目标:让机器能够像人类一样,能够理解、学习和解决各种复杂问题。而要实现这个目标,我们需要将…

设计模式常见面试题

简单梳理下二十三种设计模式&#xff0c;在使用设计模式的时候&#xff0c;不仅要对其分类了然于胸&#xff0c;还要了解每个设计模式的应用场景、设计与实现&#xff0c;以及其优缺点。同时&#xff0c;还要能区分功能相近的设计模式&#xff0c;避免出现误用的情况。 什么是…

麒麟系统安装找不到安装源!!!!设置基础软件仓库时出错

记录--华为RH2288 V3服务器安装麒麟系统遇到的问题 1.遇到的问题--“设置基础软件仓库时出错”报错导致无法继续安装 没办法下一步 先说结论&#xff1a;系统bug 该问题在CentOS、Rocky Linux最新版中均存在 解决&#xff1a; &#xff08;一&#xff09;、如果是外网直接配…

【机器学习基础】决策树(Decision Tree)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战 欢迎订阅&am…

metinfo 5.0.4 文件包含漏洞复现

metinfo 5.0.4 文件包含漏洞 漏洞环境 metinfo cms 版本 5.0.4 代码审计 在metinfo下的about/index.php代码中发现动态调用 上面没有赋值但是是有具体值的说明在上一个文件包含赋值了 查看这个文件的源代码 可以看到这里做了初始化但是是在fmodule不等于7的时候那假设等…

深入解析具名导入es6规范中的具名导入是在做解构吗

先说答案&#xff0c;不是 尽管es6的具名导入和语法非常相似 es6赋值解构 const obj {a: 1,f() {this.a}}const { a, f } objes6具名导入 //导出文件代码export let a 1export function f() {a}export default {a,f}//导入文件代码import { a, f } from ./tsVolution可以看出…