首页 > 其他分享 >STM32_10(I2C)

STM32_10(I2C)

时间:2023-05-16 18:55:53浏览次数:45  
标签:10 SCL 主机 高电平 地址 STM32 从机 SDA I2C

I2C通信

  • I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线
  • 两根通信线:SCL(Serial Clock)、SDA(Serial Data)
  • 同步,半双工
  • 带数据应答
  • 支持总线挂载多设备(一主多从、多主多从)
  • 使用同步时序可以极大降低单片机对硬件电路的依赖

 

硬件电路

  • 所有I2C设备的SCL连在一起,SDA连在一起
  • 设备的SCL和SDA均要配置成开漏输出模式
  • SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

任何时候都是主机完全掌握SCL,在空闲状态下,主机可以主动发起对SDA的控制。只有从机在发送数据和从机应答的时候,主机才会把SDA的控制权交给从机。

把SDA和SCL想象成一根杆子,并且让所有人都不能往上拉,只能往下拉或松手,之后我们外置一根弹簧到这根杆子上,输出低电平就往下拽,输出高电平就放手,这是一个弱上拉的高电平,完全不影响数据传输。

 

I2C时序基本单元

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

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

 

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

 

起始条件后,第一个字节必须为主机发送。如果主机想发送0,则让拉低SDA到低电平。如果发送1,则放手让SDA回弹到高低电平。在SCL低电平期间,允许改变SDA电平,在SCL高电平期间,不允许改变SDA的电平,并且是从机读取SDA的时候,从机必须尽快读取SDA,一般在上升沿时刻就读取完数据。主机放手SCL一段时间后,继续拉低SCL传输下一位,主机也需要在SCL下降沿之后尽快把数据放在SDA上,但主机掌握着时钟的主导权,所以在低电平的任意时刻把数据放在SDA上即可。

 

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

实线是主机控制部分,虚线是从机控制部分。

 

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

主机释放SDA的时候,从机就应该把SDA拉下来,在SCL高电平期间,主机读取应答位,应答位为0,说明从机确实收到了。

发送应答位目的是告诉从机,是不是要继续发,如果从机发送一个数据后,得到主机的应答,说明要继续发送,如果主机没有应答则从机停止发送,交出SDA的控制权。

 

I2C时序

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

这个数据帧的目的式在指定从机地址1101000的设备,在其内部0x19地址的寄存器下,写入0xAA数据。

在起始条件后,紧跟着的时序必须是发送一个字节的时序,字节的内容必须是从机地址+读写位。从机地址为7位,读写位为1位,加起来正好8位。发送从机地址就是确定通信的对象,发送读写位就是确定接下来是写入还是读出。紧跟着的单元式接受从机的应答位。

 

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

在Sr前面就是指定地址写,后面就是当前地址读。

先起始写入地址,停止,因为写入的地址会存在地址指针里,所以这个地址不会因为时序停止而消失,我们可以再起始,读当前位置,停止。

 

MPU6050

  • MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景
  • 3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度
  • 3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度
  • 加速度计具有静态稳定性,不具有动态稳定性

 

MUP6050参数

  • 16位ADC采集传感器的模拟信号,量化范围:-32768~32767
  • 加速度计满量程选择:±2、±4、±8、±16(g)(如果测量的物体运动非常剧烈,可以把满量程选择大一些。反之同理)
  • 陀螺仪满量程选择: ±250、±500、±1000、±2000(°/sec)(满量程选得越小,测量分辨率越高)
  • 可配置的数字低通滤波器
  • 可配置的时钟源
  • 可配置的采样分频
  • I2C从机地址:1101000(AD0=0) 1101001(AD0=1)

如果认为0x68是从地址,在发送第一个字节需要把0x68左移一位,再按位或上读写位。  

把0x68左移一位后的数据当作从机地址,左移一位是0xD0。在实际发送第一个字节的时候,如果需要写就直接把0xD0当作第一个字节,如果需要读则把0xD0或0x01,即0xD1当作第一个字节。这种操作方式是读写位融入到从机地址中。0xD0是写地址,0xD1是读地址。

 

硬件电路

   

XDA和XCL通常用于外接磁力计或气压计,当接上之后,MPU6050主机接口可以直接访问扩展芯片的数据。

 

MPU6050框图

Self test(自测模块):先使能Self test测得X Accel数据,再失能Self test测X Acce数据,测出来的数据两个进行相减,再根据手册里面数据进行对比,看是否在这个区间内,在能正常使用。

Interrupt Status Register(中断状态寄存器):控制内部事件到中断引脚的输出。

FIFO(先入先出寄存器):对数据流进行缓存。

Config Registers(配置寄存器):对内部的各个电路进行配置。

Sensor Registers(传感器寄存器或数据寄存器):存储各个传感器的数据。

Serial Interface Bypass Mux(接口旁路选择器):如果拨到上面,辅助的I2C引脚和正常的I2C引脚接在一起,两路总线结合在一起,STM32能控制所有设备。如果拨到下面辅助的I2C引脚就由MPU6050控制,这时STM32是MPU6050大哥,MPU6050是扩展芯片的大哥。

标签:10,SCL,主机,高电平,地址,STM32,从机,SDA,I2C
From: https://www.cnblogs.com/toutiegongzhu/p/17403919.html

相关文章

  • 记录--10个超级实用的Set、Map使用技巧
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助Set是一种类似于数组的数据结构,但是它的值是唯一的,即Set中的每个值只会出现一次。Set对象的实例可以用于存储任何类型的唯一值,从而使它们非常适用于去重。Map是一种键值对集合,其中每个键都是唯一的,可以是任何类型,......
  • AI女友同时和1000人谈恋爱,狂赚500万
    AI女友,预计暴赚4亿要说当下什么最火,AI首当其冲无可置疑。00后网络红人红卡琳·玛乔丽(CarynMarjorie)最近与ForeverVoices公司合作,通过视频训练等方式打造出个人形象、声音和性格的AI虚拟女友,就像在和玛乔丽本人交谈一样。简单来说,就是出售AI版本的自己,和男友们谈恋爱,每分钟收费......
  • GYM100722C - Ticket to Ride
    首先考虑\(dp_{i,msk}\)表示当前连通了\(msk\)中所有关键点,并且当前连通的非关键点包含\(i\)的最小代价。然后考虑如何转移。我们先用\(Floyd\)预处理所有点对之间的最短路\(dist_{i,j}\)。同时,每次选取的两个用于合并的关键点集合一定没有交集,所以我们可以直接枚举子集......
  • GYM102392 简要题解
    自己下午闲着没事单挑了一下,两小时左右一度rk1,但后继无力了。。。。A.MaxorMin肯定沿着出现过的数操作;然后发现如果a[i]=k,a[j]>k,a[k]<k就会增加一次操作所以维护一下差分序列即可。B.LevelUp两维DP,这个疑似edu出过。要注意的是:需要关于x排个序,不然会漏一些转移。D.......
  • LG P5410 【模板】扩展 KMP(Z 函数)
    \(\text{template}\)注意z[1]=n,从下标\(2\)开始求z!!\(\text{Code}\)#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=2e7+5;intz[N],p[N],n,m;chara[N],b[N];voidgetZ(char*s,intn,int*z){for(......
  • 基于STM32F407/STM32H743芯片和SOEM的E therCAT主站源码 提供配套CUBE工程和。
    基于STM32F407/STM32H743芯片和SOEM的EtherCAT主站源码提供配套CUBE工程和。可配套正点原子探索者开发板使用,或任何带以太网口的407/H743板子。支持DC同步。可配合汇川IS620N、埃斯顿ProNet、迈信EP3E、台达A2-E、伟创SD700、松下A5B/A6B和欧姆龙G5系列驱动器使用,或提供想适配的......
  • STM32vcu整车simulink应用层模型 模型包含高压上下电,车辆蠕
    STM32vcu整车simulink应用层模型模型包含高压上下电,车辆蠕动,驻坡功能,能量管理,档位管理,续航里程,定速巡航等等。每个功能都对应有详细的pdf文档详细说明,进入条件,退出条件,以及标定量详细说明。程序已经实车测试完成,注意,项目级别的。模型全局仿真通过,非常适合开发新能源汽车的工程师们......
  • STM32bms动力电池管理系统仿真 Battery Simulink电池平衡控制策略模型
    STM32bms动力电池管理系统仿真BatterySimulink电池平衡控制策略模型动力电池管理系统仿真BMS+BatterySimulink控制策略模型,动力电池物理模型,需求说明文档。BMS算法模型包含状态切换模型、SOC估计模型(提供算法说明文档)、电池平衡模型、功率限制模型等,动力电池物理模型包......
  • STM32fcu,燃料电池控制器,质子交换膜燃料电池系统模型(PEMFC),基于MATLAB/simulink开发,主要
    STM32fcu,燃料电池控制器,质子交换膜燃料电池系统模型(PEMFC),基于MATLAB/simulink开发,主要部分有空压机模型,供气系统模型(阴极和阳极),背压阀模型,电堆模型等。可进行控制策略等仿真开发工作。ID:4745692172825523......
  • canopencanopen sys tec 某泰学习资料,文档,例子,协 议站原程序,stm32的主站从站代码可编
    canopencanopensystec某泰学习资料,文档,例子,协议站原程序,stm32的主站从站代码可编译,其他平台没用过。协议支持全面,有nmtsdopdolss等功能,移植和开发文档详细,是开发canopen设备必备资源。远程IO,驱动等产品使用该资料,非常好用。ID:861500638397862379......