MPU9250在STM32單片機(jī)SPI通信接口下的初始化
MPU9250在STM32單片機(jī)SPI通信接口下的初始化及九軸數(shù)據(jù)讀取總結(jié)
很多人用SPI接口讀取MPU9250磁力計數(shù)據(jù)讀不出來,關(guān)鍵問題在于MPU9250內(nèi)部與磁力計是IIC接口(很坑,技術(shù)文檔也沒有特別說明,只在內(nèi)部結(jié)構(gòu)圖中有展示),所以讀取時必須要加延時,若只讀取加速度和陀螺儀數(shù)據(jù)才可以達(dá)到1-20MHz的速率。
大部分單片機(jī)IIC接口不是很好用,相信很多朋友在調(diào)試的時候踩過不少坑,而且由于IIC自身的限制,采樣速率有時不足為用,所以被迫換為SPI接口。但SPI接口調(diào)試磁力計依然受內(nèi)部IIC限制,不過若只使用加速度和陀螺儀數(shù)據(jù),速率便會比IIC快幾倍。
本次博客記錄筆者在實(shí)際調(diào)試過程中遇到的一些問題,以提醒后人在調(diào)試中應(yīng)該注意的事項(xiàng),以免踩坑。
本次調(diào)試采用STM32f103系列單片機(jī)進(jìn)行數(shù)據(jù)讀取。
一、初始化流程:
1.解除休眠;
2.初始化內(nèi)部IIC(mpu9250內(nèi)部采用IIC與磁力計通信);
3.SPI初始化加速度計和陀螺儀(配置參數(shù)具體參考技術(shù)手冊);
4.通過SPI與內(nèi)部IIC通信,初始化磁力計;
5.根據(jù)需求決定FIFO、DMP是否啟用。
注意:
1.解除休眠后要加至少100ms延時,以保證mpu9250初始化完畢(內(nèi)部IIC通信較慢),若只讀取加速度計和陀螺儀的六軸數(shù)據(jù)而不使用磁力計的話,可以省去磁力計的初始化部分。
2.加速度計和陀螺儀的量程(精度)由實(shí)際使用情況配置,人體姿態(tài)捕獲建議加速度計±8g,陀螺儀設(shè)置最大±2000°/s;
二、SPI接口配置及通信底層程序
本次調(diào)試使用的是硬件SPI接口,具體使用接口請按照硬件實(shí)際連接接口配置。
1.SPI接口初始化:
2.SPI發(fā)送一個字節(jié):
3.MPU9250寄存器讀寫:
SPI寫寄存器:
4.MPU9250內(nèi)部IIC的寫入和讀取(磁力計用):
注意:
實(shí)測地磁計數(shù)據(jù)讀取要加100us以上延時保證數(shù)據(jù)讀取完整,否則磁力計數(shù)據(jù)會有問題;
內(nèi)部IIC寫入:
三、九軸數(shù)據(jù)的讀取
1.加速度讀取:
2.陀螺儀讀?。?
3.磁力計讀?。?
i2c_Mag_read(AK8963_ST2_REG) 此步讀取不可省略;
數(shù)據(jù)讀取結(jié)束寄存器,reading this register means data reading end;
AK8963_ST2_REG 同時具有數(shù)據(jù)非正常溢出檢測功能;