STM32读取MPU6050问题总结 (可读ID无数据; PWR_MGMT_1休眠位无法清零; 寄存器读写正常无数据;初始化前加延时无法解决问题)

  • Post author:
  • Post category:其他



因为网上关于STM32读取6050的例程并不少但是总会有古怪的问题存在,在尝试读取的过程中在网上逛论坛发现很多问题到最后没结果不了了之,不知那些前辈们是否已经自己查出了问题,我想尽自己微薄之力提供给大家我在这个过程中的解决思路。让后来者少走弯路更快的解决问题,有不对之处希望前辈多多指正,促进进步!


制作平衡车或四旋翼,读取6050是第一步。除了经常存在的问题如初始化前加延时,mpu坏掉,无法读ID(大部分是I2C通信有问题,重新比对时序,调试延时)读取过程中通常会存在这几个问题:







1.可以读ID->0x68(104)但是没有数据







可读ID,则I

2


C


读取是正常,写入不一定对–>此时检查寄存器

PWR_MGMT_1

是否被清零即6050初始化是否完成。还有一种情况是6050坏掉。



若发现休眠位

PWR_MGMT_1



仍为0x40或64–>





检查

I2C


写入时序(切记要细致入微比对);尝试改变

I2C延时(不同单片机延时效果不一样例程里能用的的不一定你就能用)









我查找过一篇文章是这个https://www.cnblogs.com/zjutlitao/p/5188240.html

点击打开链接




情况不太一样,但结果是一定要清休眠位



在我查找这个问题中,有的人是因为6050坏了;有的人是因为如上问题。





解决思路是




:初始化




PWR_MGMT_1


写0


,在可读ID情况下读取

PWR_MGMT_1发现其并未清零仍为0x40,则查找写入函数问题:I2C时序是否正确?时序中的延时是否恰当,要通过尝试来解决。通常解决了这两个问题,即可




PWR_MGMT_1


写0,6050的初始化正常






2.所有寄存器正常,可读ID但加速度数据为零







这个就相对简单一些了,寄存器读写正常,我们已经离正确读数只有一行代码的距离。可以尝试

初始化两次

,或者

在初始化前加延时。

我尝试初始化一次并在函数开始前加延时,仍为无法读数,情况表现为




有时可以读数有时不可以



读,大部分情况是读值为零的。初始化两次后则读值正常。







版权声明:本文为qq_26039737原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。