MPU9250在STM32单片机SPI通信接口下的初始化
扫描二维码
随时随地手机看文章
MPU9250在STM32单片机SPI通信接口下的初始化及九轴数据读取总结
很多人用SPI接口读取MPU9250磁力计数据读不出来,关键问题在于MPU9250内部与磁力计是IIC接口(很坑,技术文档也没有特别说明,只在内部结构图中有展示),所以读取时必须要加延时,若只读取加速度和陀螺仪数据才可以达到1-20MHz的速率。
大部分单片机IIC接口不是很好用,相信很多朋友在调试的时候踩过不少坑,而且由于IIC自身的限制,采样速率有时不足为用,所以被迫换为SPI接口。但SPI接口调试磁力计依然受内部IIC限制,不过若只使用加速度和陀螺仪数据,速率便会比IIC快几倍。
本次博客记录笔者在实际调试过程中遇到的一些问题,以提醒后人在调试中应该注意的事项,以免踩坑。
本次调试采用STM32f103系列单片机进行数据读取。
一、初始化流程:
1.解除休眠;
2.初始化内部IIC(mpu9250内部采用IIC与磁力计通信);
3.SPI初始化加速度计和陀螺仪(配置参数具体参考技术手册);
4.通过SPI与内部IIC通信,初始化磁力计;
5.根据需求决定FIFO、DMP是否启用。
注意:
1.解除休眠后要加至少100ms延时,以保证mpu9250初始化完毕(内部IIC通信较慢),若只读取加速度计和陀螺仪的六轴数据而不使用磁力计的话,可以省去磁力计的初始化部分。
2.加速度计和陀螺仪的量程(精度)由实际使用情况配置,人体姿态捕获建议加速度计±8g,陀螺仪设置最大±2000°/s;
二、SPI接口配置及通信底层程序
本次调试使用的是硬件SPI接口,具体使用接口请按照硬件实际连接接口配置。
1.SPI接口初始化:
2.SPI发送一个字节:
3.MPU9250寄存器读写:
SPI写寄存器:
4.MPU9250内部IIC的写入和读取(磁力计用):
注意:
实测地磁计数据读取要加100us以上延时保证数据读取完整,否则磁力计数据会有问题;
内部IIC写入:
三、九轴数据的读取
1.加速度读取:
2.陀螺仪读取:
3.磁力计读取:
i2c_Mag_read(AK8963_ST2_REG) 此步读取不可省略;
数据读取结束寄存器,reading this register means data reading end;
AK8963_ST2_REG 同时具有数据非正常溢出检测功能;