一.I2C通信简介
1.inter IC BUS,是一种通用数据总线,两根通信线:SCL(时钟线),SDA(数据线),是同步时序,半双工(兼具发送和接收)
2.带数据应答
3.支持总线挂载多设备(一主多从,多主多从)
二.硬件电路(一主多从)
1.所有I2C的设备的SCL要连在一起,SDA要连在一起
2.所有的SCL和SDA均要配置成开漏输出模式(输出为低电平,默认为高电平)
3.SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
4.左边位SCL,右边为SDA,采用开漏输出
(输出低电平,开关管导通,引脚直接接地,强下拉)
5.所有的设备只能输出低电平,不能输出高电平
三.I2C时序基本单元
1.起始条件:SCL高电平期间,SDA从高电平切换到低电平
2.终止条件:SCL高电平期间,SDA从低电平切换到高电平
3.发送一个字节:SCL低电平期间,主机将数据依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节
如红框中,scl低电平,sda选择1,0,scl拉高,读取数据
4.接受一个字节:SCL低电平期间,从机将数据依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA,SDA控制权给从机了)
5.发送应答:主机在接受完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
6.接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA,SDA控制权给从机了)
四.三种I2C时序
1.指定地址写
对于指定设备,在指定地址下,写入指定数据
五.MPU6050简介
1.MPU6050时一个6轴姿态传感器,可以测量芯片自身X,Y,Z轴的加速度,角速度参数,通过数据融合,可进一步得到姿态角,常用于平衡车,飞行器的检测自身姿态的场景
2.3轴加速度计:测量X,Y,Z的加速度
3.3轴陀螺仪传感器:测量X,Y,Z的角速度
六.MPU6050参数
1.16位ADC采集传感器的模拟信号,量化范围:-32768-32767 也就是2的16次方
2.加速度计满量程选择:±2,±4,±8,±16(g)
3.陀螺仪满量程选择:±250,±500,±1000,±2000(度/sec)
4.可配置的数字低通滤波器
5.可配置的时钟源
6.可配置的采样分频
7.I2C从机地址:1101000(AD0=0) 1101001(AD0=1)
七.I2C硬件外设
1.STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担
2.支持多主机模型 支持7位/10位地址模式 支持不同的通讯速度,标准速度(高达100 kHz),快速(高达400 kHz) 支持DMA 兼容SMBus协议
3.STM32F103C8T6 硬件I2C资源:I2C1、I2C2