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

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

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

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

可读ID,则I2C读取是正常,写入不一定对-->此时检查寄存器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但加速度数据为零

 这个就相对简单一些了,寄存器读写正常,我们已经离正确读数只有一行代码的距离。可以尝试初始化两次,或者在初始化前加延时。我尝试初始化一次并在函数开始前加延时,仍为无法读数,情况表现为 有时可以读数有时不可以 读,大部分情况是读值为零的。初始化两次后则读值正常。          

                                      

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