STM32通信接口学习:I2C通信

1.两根通信线:(同步半双工)

SCL:串行时钟线

SDA:串行数据线

2.带数据应答;支持总线挂载多设备(一主多从,多主多从)

3.硬件规定:

主机权利:任何时候,主机完全掌控SCL线;空闲状态,主机可以发出对SDA的控制,只有在从机发送数据和应答时,主机才会转交SDA控制权给从机

从机权利:任何时候,都只能被动读取SCL线;从机不能主动发起对SDA的控制,只有在主机发送读取从机的命令后或从机应答时,可以获取SDA控制权

硬件电路:所以I2C设备的SCL连在一起,SDA连在一起

SCL和SDA各外置弱上拉电阻,均配置成开漏输出(只能输出低电平)

4.软件规定:(主要看时序图)

起始条件:SCL高电平,同时SDA下降沿,且最终都处于低电平

终止条件:SCL高电平,同时SDA上升沿,且最终都处于高电平

发送一个字节:SCL低电平时,主机将数据位依次到SDA上(高位先行),然后释放SCL,在SCL高电平时,从机读取数据位,依次循环上述八次,即可发送一个字节(可以看出主机对时序掌控的主导地位)

接收一个字节:SCL低电平,从机将数据位依次到SDA上(高位先行),然后释放SCL,在SCL高电平时,主机读取数据位,依次循环上述八次,即可发送一个字节

发送应答:主机在接受完一个字节后,发送一位数据,0表示应答

接受应答:主机在发送完一个字节后,接受一位数据,判断从机是否应答,0表示应答

5.从机地址:

每个从机设备地址都要不一样,有的7位,有的10位

设备地址可在芯片手册里找到,一般器件地址最后几位时可以在电路中改变的(由引脚电平切换)

6.I2C时序:

指定地址写:指定设备指定地址写入指定数据;起始+从机地址位+读写位(0表示写)+应答位+指定地址+指定数据+应答+指定数据+应答。。。+非应答+停止 (写入一次数据后,地址指针自动+1

当前地址读:读取指定设备的当前地址指针指示的地址里的从机数据;起始+从机地址位+读写位(1表示读)+应答位+读的时序。。。+非应答+停止

指定地址读:假指定地址写(到指定地址这一步,不写数据)+当前地址读;起始+从机地址位+读写位(0表示写)+应答位+指定地址+起始+从机地址位+读写位(1表示读)+应答位+读的时序。。。+非应答+停止

7.通信一般目的:方便主机读取从机的寄存器数据


MPU6050

(把PS和RM手册看一遍)

1.6轴姿态传感器:测量XYZ轴的加速度(加速度计A),角速度(陀螺仪传感器G);

9轴:3轴加速度,角速度,磁场强度

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

2.数据融合得到姿态角(欧拉角):装置相对于初始三个轴的夹角

3.3轴加速度计:静态稳定性;3轴陀螺仪:角速度积分得粗略角度,有动态稳定性

4.参数:

16位ADC模拟信号,范围(有符号数):-32768-32767;加速度计满量程选择(最大AD值对应加速度的最大量程是多少):正负2,4,8,16(g);陀螺仪满量程选择:正负250,500,1000,2000(度每秒)  (量程越小,测量越精细;运动剧烈选大量程);可配置的数字低通滤波器(数据抖动厉害时可加,配置滤波器参数越大,输出数据抖动越小);可配置的时钟源;可配置的采样分频 (分频越小,AD转换越快)

5.I2C从机地址:1101 000(AD0=0)(0x68,如果它要当从机地址时,还需要将0x68左移一位(0xD1)后在加上读写位);1101 001(AD0=1)

6.内部的传感器(相当于一个可变电阻)产生模拟电压,进行AD转换后得到的传感器数据放入数据寄存器,读取寄存器就可以得传感器测量值;转换是内部自动进行的

7.XCL XDA引脚通常用于外接磁力计或气压计

8.每个传感器都有一个自测单元;使能自测,读数据,再失能自测,读数据,两数据相减得自测响应,若在芯片手册的自测响应范围内,则说明芯片正常

9.有电荷泵升压

10.FIFO 先入先出寄存器 对数据流缓存

11.DMP 芯片内部自带的姿态解算的硬件算法

12.上电默认是睡眠模式,需要解除


软件I2C读写MPU6050 代码部分:

配置SCL和SDA(GPIO初始化)->写好6个时序基本单元

拼接基本时序成数据帧


硬件I2C

1.STM32内部集成了硬件I2C收发电路;支持可变多主机模型;支持DMA;支持7位/10位地址;10位地址:11110+2位地址+1位读写位+8位地址;兼容SMBus协议

2.引脚固定;对应GPIO口要配置成复用、开漏输出模式

3.发送:数据写入数据寄存器,移位寄存器为空时,数据就转到移位寄存器,然后发送

4硬件I2C读写MPU6050.代码部分

配置I2C外设 初始化->控制外设电路 实现读写时序


1.  |=:可以把一个字节的某些位置1,而不影响其他位

&=:可以把一个字节的某些位清0,而不影响其他位

^=:可以把一个字节的某些位取反,而不影响其他位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值