【开源】SPI读取MPU9250 9轴加速度,陀螺仪,磁力计

2019-07-21 01:51发布

本帖最后由 小白来学习 于 2016-7-28 17:45 编辑

众所众知,SPI的读写速度非常诱人,对于MPU9250而言,除了加速度、陀螺仪外,新增了磁力计模块,但是磁力计模块只支持I2C的读写,

为了能够利用起SPI的优势,此时MPU 内部的i2c Master功能为此提供了方便


楼主不才,花了一些功夫,仔细研读了MPU9250 datasheet 整理出SPI读取MPU9250全套工程源码,亲测可用。
楼主觉得有需要注意之处,都配有详细注释(若有不对之处请多多包涵)

希望能提供给大家一些参考价值(工程已打包附件,内附MPU datasheet资料及i2c源码) MPU9250.rar (9.73 MB, 下载次数: 179484) 2016-7-28 17:27 上传 点击文件名下载附件

下图为楼主SPI读取9轴数据——Jlink仿真结果

CG]XJ9D7$UK%PI00)8D90R0.png
file:///C:UsersAdministratorAppDataRoamingTencentUsers312485168QQWinTempRichOleCG]XJ9D7$UK%PI00)8D90R0.png






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
50条回答
踏雪sunnyboy
2019-07-27 09:50
本帖最后由 踏雪sunnyboy 于 2016-10-15 20:24 编辑
小白来学习 发表于 2016-10-14 21:04
你的这个问题我之前也碰到过,说说我的理解:spi读取磁力计中间经过了两个过程,spi ->master register - ...

感谢回复!最后我设置了加速度陀螺仪200hz,磁力计60几hz读取,就是说检测磁力计数据没准备好的话,就直接跳过不更新(磁力计循环采样是100hz) // i2c_Mag_write(AK8963_CNTL1_REG,0x01);
        flag1 = i2c_Mag_read(AK8963_ST1_REG);
        flag2 = i2c_Mag_read(AK8963_ST2_REG);
        if(!(flag1 & AK8963_STATUS_DRDY) || (flag1 & AK8963_STATUS_DOR) || (flag2 & AK8963_STATUS_HOFL))
     return;

一周热门 更多>