打印
[STM32F3]

基于STM32F103C8T6的MPU6050调试与数字运动处理器DMP

[复制链接]
539|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呈兴|  楼主 | 2022-11-22 22:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
基于STM32F103C8T6的MPU6050调试与数字运动处理器DMP

StrongerHangover

笔者之前也接触过MPU6050模块,但是并没有真正的去了解内部的通讯方式与内部的寄存器操作,况且之前接触的程序是基于51单片机的,笔者只是使用者并未自己书写。虽然说,不管是基于51单片机还是基于STM32单片机,它内部的通讯方式和寄存器配置依然相同,主要区别于操作方式有所区别。当然STM32单片机又分为基于寄存器版本和基于库函数版本的,笔者是基于固件库书写的MPU6050测试程序。笔者觉得MPU6050的程序主要分为I2C协议和MPU6050寄存器两部分(基于STM32有一定基础),我主要分为以下:
一、I2C通讯协议
二、MPU6050寄存器解析
三、MPU6050程序调试及Bug

使用特权

评论回复
沙发
呈兴|  楼主 | 2022-11-22 22:12 | 只看该作者
I2C通讯协议
简介:I2C是两线式串行总线。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,一般这两条线是开漏和双向。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。IIC是半双工通信方式。
笔者将以下几点讲解I2C协议:
1)空闲状态:I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。 也就是说在没有数据传输时,SDA=1,和SCL=1。可以看下图1空闲状态下两条线都是高电平。

使用特权

评论回复
板凳
呈兴|  楼主 | 2022-11-22 22:13 | 只看该作者
Photos 1
2)启动信号START:如上图,当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。简单的说就是SCL=1,SDA=1->SDA=0,意思就是在时钟到来之前把要传输的数据准备好,保证数据有效传输。就相当于,要做某一件事,那是不是要做一定的准备,以保证把这件事做好。一个好的开始嘛!

使用特权

评论回复
地板
呈兴|  楼主 | 2022-11-22 22:13 | 只看该作者
3)停止信号STOP:如上图,当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。简单的说就是SCL=1,SDA=0->SDA=1,意思就是时钟线拉高,数据线才会拉高,如果时钟还在允许数据传输的状态下,数据线已经拉低,这样就可能会导致数据丢失,时钟线线拉高是保证数据有效传输。

使用特权

评论回复
5
呈兴|  楼主 | 2022-11-22 22:14 | 只看该作者
4)应答信号ACK:发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。 对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号。简单的说就是你叫别人的名字,别人给你一个回应,就说明他听到你的呼应了,这就是有效应答,否则就是得不到回应,不知道别人没有听见你的呼应,这是就是无效应答。

使用特权

评论回复
6
呈兴|  楼主 | 2022-11-22 22:15 | 只看该作者
Photos 2
5)数据有效性:I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。即:数据在SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。

使用特权

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

本版积分规则

20

主题

121

帖子

0

粉丝