打印
[其他ST产品]

STM32F1常用外设介绍

[复制链接]
楼主: 范德萨发额
手机看帖
扫描二维码
随时随地手机跟帖
281
范德萨发额|  楼主 | 2023-2-28 21:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
(高位先行)在SCL低电平期间,主机如果想要发送0,就拉低SDA到低电平,如果想要发送1,就放手,SDA回弹到高电平,在SCL低电平期间允许改变SDA的电平,当这一位放好后,主机就松手时钟线,SCL回弹到高电平,在高电平期间是从机读取SDA的时候,SCL高电平期间,SDA不允许变化,SDA处于高电平时从机需要尽快读取SDA,一般是在上升沿的时刻,从机已经读取完成了,主机在放手SCL一段时间后,就可以继续拉低SCL传输下一位,主机需要在SCL下降沿之后尽快把数据放在SDA上,主机有时钟的主导权,不需要着急,只需要在低电平的任意时刻把数据放在SDA上就行了,数据放完之后,主机再松手SCL,SCL高电平从机读取这一位,在SCL的同步下,依次进行主机发送和从机接收,循环8次就发送了8位数据,也就是一个字节。

使用特权

评论回复
282
范德萨发额|  楼主 | 2023-2-28 21:28 | 只看该作者
接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机再接收之前,需要释放SDA,释放SDA就相当于切换为输入模式)。

使用特权

评论回复
283
范德萨发额|  楼主 | 2023-2-28 21:28 | 只看该作者

使用特权

评论回复
284
范德萨发额|  楼主 | 2023-2-28 21:30 | 只看该作者
也可以理解为:所有设备包括主机始终都属于输入模式,当主机需要发送的时候,就可以去主动拉低SDA,而主机再被动接收的时候,就必须先释放SDA,总线是线与的特征,任何一个设备拉低了,总线就是低电平,如果接收的时候还拽着SDA不放手,无论别人发什么数据,总线都始终属于是低电平。

使用特权

评论回复
285
范德萨发额|  楼主 | 2023-2-28 21:30 | 只看该作者
发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

使用特权

评论回复
286
范德萨发额|  楼主 | 2023-2-28 21:30 | 只看该作者
接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

使用特权

评论回复
287
范德萨发额|  楼主 | 2023-2-28 21:30 | 只看该作者

使用特权

评论回复
288
范德萨发额|  楼主 | 2023-2-28 21:31 | 只看该作者
也可以理解为发送1位和接收1位,这一位用来作为应答,在发送完一个数据之后,就要立即进行接收应答,来判断从机是否接收到主机发送的数据
主机在起始条件之后,要先发送一个字节叫一下从机名字,所有从机都会收到第一个字节,与自己的名字(地址)比较,如果一样,相对应的从机就会响应主机的读写操作,在同一条I2C总线里,挂在的每个设别地址必须不一样,防止主机叫一个地址有多个设备都响应。

使用特权

评论回复
289
范德萨发额|  楼主 | 2023-2-28 21:31 | 只看该作者
从机设备地址,在I2C协议标准里分为7位地址和10位地址
每个I2C设厂时,厂商都会为它分配一个7位的地址、
MPU6050的地址是:1101 000
一般不同型号的设备地址都是不同的,相同型号的设备地址都是相同的
如果相同型号的设备挂在在同一条总线上,可以利用设备的地址的可变部分,一般器件地址的最后几位是可以在电路中改变的,例如MPU6050地址的最后一位,由板子上的AD0引脚确定,AD0引脚接低电平,那它的地址就是1101 000,AD0引脚接高电平那它的地址就是1101 001,AT24C02地址的最后三位都可以分别由这个板子上的A0、A1、A2引脚确定

使用特权

评论回复
290
范德萨发额|  楼主 | 2023-2-28 21:31 | 只看该作者
指定地址写

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

使用特权

评论回复
291
范德萨发额|  楼主 | 2023-2-28 21:31 | 只看该作者
空闲状态下两个总线都是高电平,主机需要给从机写入数据的时候,在SCL高电平期间,拉低SDA,产生起始条件,在起始条件之后紧跟的时序,必须是发送一个字节的时序,字节的内容必须是从机地址+读写位,(从机地址是7位,读写位是1位加起来就是1个字节8位)(发送从机地址:确定通信的对象),(发送读写位:确认接下来是要写入还是读出,0:写入,1:读出),紧跟着的单元是接收从机的应答位(Receive Ack,RA),这个时刻主机需要释放SDA,如果从机应答,从机会立即拉低SDA,应答位产生后,从机释放SDA,从机交出SDA的控制权,同样的时序再来一遍,第二个字节数据就会送入指定数据的内部,一般第二个字节是寄存器地址或者是指令控制字,第三个字节是想要往寄存器地址中写入的值,如果主机不想发送数据了,要产生停止条件,在产生停止条件之前,先拉低SDA,会后续的上升沿做准备,然后释放SCL,再释放SDA,产生SCL高电平期间SDA的上升沿

使用特权

评论回复
292
范德萨发额|  楼主 | 2023-2-28 21:31 | 只看该作者

此数据帧的作用是:对于从机地址为1101000的设备在其内部0x19地址的寄存器中,写入0xAA这个数据

使用特权

评论回复
293
范德萨发额|  楼主 | 2023-2-28 21:32 | 只看该作者
当前地址读

    对于不指定设别(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data)

使用特权

评论回复
294
范德萨发额|  楼主 | 2023-2-28 21:32 | 只看该作者
在SCL高电平期间,拉低SDA,产生起始条件,主机首先发送一个字节,来进行从机的寻址和读写标志位,图示波形代表,本次寻址的目标是1101000的设备,读写标志为1,表示主机接下来想要读取设备,发送一个字节后,接收从机应答位,代表从机收到了第一个字节,把SDA的控制权交给从机,主机调用接收一个字节的时序,进行接收操作,从机接收到了主机的允许,可以在SCL低电平期间写入SDA,主机在哪SCL高电平期间读取SDA,主机再SCL高电平期间依次读取8位,就接收到了从机发送的一个字节数据0000 1111也就是(0x0F),没有指定地址这个环节,0x0F,(在从机中所有寄存器被分配到了一个线性区域中,会有个单独的指针变量,指示着其中一个寄存器,这个指针上电一般默认0地址,每写入一个字节或者读出一个字节后,这个指针就是自动自增一次,移动到下一个位置),从机返回的是当前指针指向的寄存器的值

使用特权

评论回复
295
范德萨发额|  楼主 | 2023-2-28 21:32 | 只看该作者
指定地址读

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

使用特权

评论回复
296
范德萨发额|  楼主 | 2023-2-28 21:32 | 只看该作者
指定从机地址是1101000 读写标志位是0,代表要进行写的操作,经过从机应答后,在发送一个字节第二个字节0001 1001,用来指定地址,这个数据就写入到从机的地址指针里了,从机接收到这个地址后,它的寄存器指针就指向了0x19这个位置,不给从机发要写入的数据,而是再来个起始条件,起始条件后,重新寻址并且指定读写标志位,此时读写标志位为1代表开始读,继续主机接收一个字节,这个字节数据就是0x19地址下的数据。

使用特权

评论回复
297
范德萨发额|  楼主 | 2023-2-28 21:32 | 只看该作者
写多个字节:重复三遍,发送一个字节和接收应答,第一个数据就写入0x19的位置(写入一个地址后地址指针会自动+1,编程吧0x1A)第二个数据就会写到0x1A的位置,第三个数据写入的是0x1B的位置

使用特权

评论回复
298
范德萨发额|  楼主 | 2023-2-28 21:32 | 只看该作者
欧拉角:飞机与XYZ轴的夹角,反应了飞机的姿态,侧仰,上倾,下倾;

使用特权

评论回复
299
范德萨发额|  楼主 | 2023-2-28 21:32 | 只看该作者
获得欧拉角需要多个数据,常用的数据融合算法:互补滤波、卡尔曼滤波等

使用特权

评论回复
300
范德萨发额|  楼主 | 2023-2-28 21:33 | 只看该作者
MPU6050 XCL和SDA是扩展使用,通常是外接磁力计或者气压计

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则