OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3281|回复: 0

原子哥提供的MPU6050的i2c一些疑问

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-11-10
在线时间
1 小时
发表于 2020-11-17 14:28:08 | 显示全部楼层 |阅读模式
在MPU6050的例程,涉及到连续读写时,当len>1时 数据都是写到了一个寄存器里面的。这个和MPU6050的驱动库的想要实现的i2c_write()是有一些差异的
例如下面这段
本意是想把data[0]的数据也到pwr1寄存器里面,data[1]的数据写到pwr2寄存器里面(因为各个轴加速度的待机状态就是在pwr2中去进行配置的)。
所以我觉的这里可能有点问题,我并没有使用范例提供的i2c而是使用了我现在用的板子上面自带的硬件i2c,目前我碰到了这样的问题,就是当写多个数据时,我是重复写到了同一个地址中,而不是逐渐递增的地址中,所以我这里和大家说下,大家可以测试下是否存在这样的问题。
[img]blob:http://www.openedv.com/fdd041e0-4a8f-49d6-a07f-b1d99ade5c4a[/img]


u8 MPU_Write_Len(u8 addr, u8 reg, u8 len, u8 *buf)
{
  u8 i;
  MPU_IIC_Start();
  MPU_IIC_Send_Byte((addr << 1) | 0); //&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#1463;+д&#65533;&#65533;&#65533;&#65533;
  if (MPU_IIC_Wait_Ack())             //&#65533;&#564;&#65533;&#1254;&#65533;&#65533;
  {
    MPU_IIC_Stop();
    return 1;
  }
  MPU_IIC_Send_Byte(reg); //д&#65533;&#308;&#65533;&#65533;&#65533;&#65533;&#65533;&#1463;
  MPU_IIC_Wait_Ack();     //&#65533;&#564;&#65533;&#1254;&#65533;&#65533;
  for (i = 0; i < len; i++)
  {
    MPU_IIC_Send_Byte(buf); //&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
    if (MPU_IIC_Wait_Ack())    //&#65533;&#564;&#65533;ACK
    {
      MPU_IIC_Stop();
      return 1;
    }
  }
  MPU_IIC_Stop();
  return 0;
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 12:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表