mpu9250 + spi + dmp ,dmp移植出错

2019-07-20 05:30发布

各路好汉~
      兄弟用STM32F407ZGT的开发板,spi方式,读取到了mpu9250的原始数据,然后想使用dmp(运动数字处理引擎),于是把原子哥读取6050数据的源程序中的dmp部分移植过来,然而源程序中inv_mpu.c文件支持的是I2C方式,我对I2C也不是很了解,所以出现了问题:
      现在没把握的是:我用spi读数据的函数直接替换用i2c读取数据的函数,少用了一个参数addr,不知道有问题没有?(函数对比见下图)
[mw_shl_code=c,true]//spi方式,从寄存器reg中读一个长度为len的数据,存放在buf中 u8 MPU_Read_Len(u8 reg,u8 len,u8 *buf) { u8 i; MPU_9250_ENABLE; SPI2_ReadWriteByte(reg|0x80); //发送读命令+寄存器号 for(i=0;i<len;i++) //一共读取len字节数据 { buf=SPI2_ReadWriteByte(0xff); //循环读取 } MPU_9250_DISENABLE; return 0; }[/mw_shl_code]
[mw_shl_code=c,true]//IIC方式,原子哥的程序 //addr:器件地址,比spi多的一个参数 //reg:寄存器号 //len:长度 //buf:数据存储区 u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf) { IIC_Start(); IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待应答 { IIC_Stop(); return 1; } IIC_Send_Byte(reg); //写寄存器地址 IIC_Wait_Ack(); //等待应答 IIC_Start(); IIC_Send_Byte((addr<<1)|1);//发送器件地址+读命令 IIC_Wait_Ack(); //等待应答 while(len) { if(len==1)*buf=IIC_Read_Byte(0);//读数据,发送nACK else *buf=IIC_Read_Byte(1); //读数据,发送ACK len--; buf++; } IIC_Stop(); //产生一个停止条件 return 0; }[/mw_shl_code]
     请教:
1、什么叫器件地址,为什么在spi中少了一个参数?
2、谁知道怎么把dmp在spi的方式下移植到mpu9250中?
谢过
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。