同步(有时钟频率),半双工(同一个时间只能接收或者发送),串行(一个字节一个字节传输),高位读取
一主多从:表示只能主机同意发送才可以发送
多主多从:表示其中每一个人都有说话的权力,但是同一个时间只能有一个人说话【仲裁】
1)主机控制SDA和SCL,只有从机发送应答的时候主动权才在从机上
2)从机不允许控制SCL
应答:因为在CLK和SDA上有一个上拉电阻,表示在没有传入数据的时候,默认两个数据线上的电平为高电平。当我们接收到数据时,就要将电平从高电平拉低为低电平。所以nack(高电平)表示未接收到数据,ack(低电平)表示接收到数据。
起始/终止都是由主机产生的
表示当主机数据传输结束后,需要从机发送一个应答信号。
主机将SDA拉高,如果从机接收到数据了,则将SDA拉低,
如果没有接收到,则SDA不变(还是处于被主机拉高的状态)
1)SCL在低电平时期-->SDA将数据放上去-(此时数据放好了)-->SCL松开手(变为高电平)---->从机开始读取数据--(数据读取好了)->SCL拉低电平
2)当在传输数据的时候,产生中断,此时SCL和SDA不会发生变化,会等待处理完成后在接着执行
3)任何一个设备拉低电平,整个线上都是低电平
4)只有全部设备都拉高,整个线上才会是高电平
发送数据:低电平,主机发送数据
高电平,从机接收数据
发送完数据就要是否SDA--》置为高电平
读取数据:低电平,从机发送数据【从机掌握SDA的控制权,所以主机要先是否SDA】
高电平,主机接收数据
IIC总线在进行数据传送时,时钟线SCL为低电平期间,发送器向数据线发送一位数据,此期间数据线上的信号允许发送变化,时钟线SCL为高电平期间,接收器从数据线上读取一位数据,此期间数据线上的信号不允许发生变化,需保持稳定。(即时钟线SCL的作用是告诉发送器什么时候发送数据,告诉接收器什么时候读取数据。故时钟线SCL既连在发送器上,又连在接收器上)
第一个数据=从机地址+读/写位
0:写入操作
1:读入操作
0:写入操作
1:读入操作
由于当前地址读,当设置为读时序,就马上开始读,所以无法指定要读取哪一个寄存器的值。所以只能读取当前寄存器的值。
用于读取外挂寄存器的值
为什么我们这里可以进行指定写寄存器的值???
这里我们在当前地址读操作前加上指定地址写--->指定地址读=指定地址写+当前地址读
2)记得最后结束的时候应答信号是0(非应答信号)
10轴:3轴加速度+3轴角速度+3轴磁场强度+1个气压强度
姿态角=欧拉角【比如飞机的左转,右转等】
压了任意一个面,就会产生压力,输出对应的压力值
具有静态稳定性,不具有动态稳定性(因为在运动的时候,计算出来的结果会有误差)
MPU6050中陀螺传感器测量的是角速度
陀螺仪具有动态稳定性,不具有静态稳定性
1)满量程:等价于ADC转换中的Vref参考电压一样
2)加速度的单位:g(1g=9.8m/s^2)
3)
如果MUP6050的从机地址为:0xD0(包含写地址位)或者0xD1(包含读地址位),表示将读/写位融入从机地址
如果MUP6050的从机地址为:0x68(直接把7位地址转换位十六进制得到的),则在计算传入数据时要将数据(0x68<<1)再或与上读/写
根据我们此时的应用场景
直接将J1引脚上的SCL和SDA直接接到我们对应STM32的IIC引出的RXD和TXD两个引脚上即可。
升压自动的
MPU-6050_(TDK InvenSense(应美盛))MPU-6050中文资料_价格_PDF手册-立创电子商城 (szlcsc.com)
软件IIC读写:实际上就是自己操控GPIO引脚的高低电平转换
可移植性高
1)初始化为开漏输出,释放总线(置为高电平)
2)SCL和SDA处于高电平,此时IIC处于空闲状态
1)要先拉低SDA再拉低SCL
2)先确保SDA和SCL都为高电平,然后再拉低SDA和SCL
先拉低SDA(确保SDA是从低电平--->高电平)
再拉高SCL
最后拉高SDA
1)将SCL拉低
2)趁SCL为低,将数据放到SDA上
3)将SCL拉高,开始读取SDA
4)读取结束,将SCL拉低,准备下一次读取
1)将SCL拉低
2)将SDA释放---》表示将SDA的主动权交给从机(设置为高电平)【因为此时数据是从从机输出给主机】
3)如果传输的是高电平则就就拉高,如果传输的是低电平则就拉低
4)趁SCL为低,将数据放到SDA上
5)将SCL拉高,开始读取SDA【判断SDA上是高电平还是低电平】
6)读取结束,将SCL拉低,准备下一次读取
1)将SCL拉低
2)将应答数据放入SDA
3)拉高SCL,开始读取应答信号
4)拉低SCL,开始读取下一次数据
1)将SCL拉低
2)释放SDA--》将SDA主动权交给从机【因为此时数据是从从机输出给主机】
3)将应答数据放入SDA
4)拉高SCL,开始读取应答信号
5)拉低SCL,开始读取下一次数据
指定地址写
前面一部分和“ mpu6050写入寄存器 ”一样
最后记得将应答信号修改为不应答
获取MPU6050的id
[10-3] 软件I2C读写MPU6050_哔哩哔哩_bilibili
未看完-->等待后面继续了解【44分】