对于MPU6050的一些问题汇总

本文作者在使用MPU6050进行I2C通讯时遇到问题,包括I2C的两种通讯方式对DMP初始化的影响、STM32F103的IO口配置、数据发送延迟等。作者详细记录了解决这些问题的过程,并分享了MPU6050初始化、DMP使用中可能遇到的难点,如FIFO读取速度、电源和中断问题等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人大二,这两年才刚接触单片机,这个暑假用MPU6050练习一下I2C通讯,结果I2C还好说,但在使用MPU6050时遇到很多问题,上网查有些问题也没有具体的原因和解决方案。于是有了一个在这里汇总记录一下我遇到的问题和解决办法的主意。要是能顺便帮到也被这些问题所困惑的各位就更好了。由于本文性质更偏向于总结、日记,文中含有一些个人吐槽。

那么接下来就直接进入主题。

I2C

在这里我不多提关于I2C的部分,只说一点。I2C的通讯以我目前了解有两种。一种是全程利用延迟,对SDA和SCL的输出和接收高低电平的时间进行控制以起到通讯作用。二是利用中断接收ACK信号以起到通讯作用。在实际操作中,发现第二种通讯会对DMP的初始化产生影响。
(2021.1.18补充)对于STM32F103单片机,有两个需要注意的地方。
一:延迟要准确。对于我自己的i2c驱动,2微妙和4微妙的延迟必须相对比较准确才行。那么对于其他所有软件i2c,延迟需要准确这条应该都是适用的。
二:想对于F4,F103的IO口配置稍微多一点(这个问题一开始没注意到,卡了我一天。。)。
实际设置发现F4只需要设置GPIO_MODER寄存器即可。具体设置为将scl和sda对应的IO口初始化为输出NOPULL,之后需要SDA为输出状态时把GPIO_MODER所对应的配置位改为01,需要输入的时候改为00即可。
而F103在设置时,需要同时修改GPIO_CRL中的端口模式位(MODEy)和端口配置位(CNFy)才行。具体设置为SCL和SDA初始化都为输入且NOPULL。SDA为输出模式时需要修改MODE为10,CNF为00;输入模式时MODE为00,CNF为01。
若各位在确认I2C时序无错且延迟准确后,还发现无法与6050正常通讯,不妨查查是否在IO设置里有问题。
如上,祝诸君顺利使用。
(2021.3.12补充)
对于i2c的数据发送之间的延迟,理论上来说只要大于i2c协议规定的最低时间,且小于最长时间即可。但实际使用时又发现,有时候延迟太久反而会导致无法通讯。这一点希望大家注意。可能有时候时序之类的都没有问题了,但还是无法通讯,这时候可以建议去修改一下i

评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值