STM32开发板连接MPU6050模块,IIC通信读地址为209,初始化失败,读数据错误

问题描述:

  1. MPU6050初始化的时候,有一个步骤是读取IIC从机的地址(读0x75寄存器)。
	res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
	printf("res=%d  \r\n",res);	//发送到串中调试助手
	if(res==  ADD_CHECK  )//器件ID正确·

理论上应该读出的是104(0x68),但是实际上是209(0xD1),如果把AD0接到VDD上,理论上应该是0x69,但是它显示0xFF。我一度怀疑,0x75寄存器里面读出的应该是全8位,即1101 0001(0xD1),而不是教程上的忽略最低位,即1101 000(0x68)。

  1. 读取数据错误:不是显示的数据不变,就是全是0 。

试验材料:

我使用STM32开发板连接MPU6050模块,使用的是最常见的那种MPU6050模块,程序用的是正点原子的例程,后来还有网上别人分享的程序,都有问题。

解决方法:

在这里插入图片描述
MPU6050 初始化失败,读出 DI 不正确(常见读到 ID = 0XD1)问题
如图:将IIC初始化里面,引脚的模式从推挽输出改成开漏输出就OK了。
感谢这位路人大哥,把我从DeBug的泥潭里拯救出来,那种“同样的电路,同样的程序,别人行,我就不行”的情况是很让人气馁的,要不是他这一句话,我可能就放弃这个模块了。
总之最后,地址读取正确,是104(0x68),0x75寄存器里面读出来确定应该是7位,即1101 000,原始数据和DMP的数据都读出来了。

另,如果DMP初始化不成功,可以试试把IIC里面的延时改大一些,我从4us改成了10us 。

至于为什么正点原子的程序和网上其他人的程序用推挽输出可以,我用就不行:不想深究了,脑仁疼。

其它参考资料

MPU6050 初始化失败,读出 DI 不正确(常见读到 ID = 0XD1)问题
题主遇到的问题的原因是杜邦线接触不良。

使用IIC去驱动MPU6050时为什么总读取失败
这位答主从电路方面进行了解释,利害!

【杂谈】读取地址错误问题,读取ID0,209(0xd1),255
另一个例子。

STM32输入输出模式理解

来自正点原子的开发指南。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值