CubeMX筆記 用I2C讀取MPU9250資料

2021-10-03 03:26:45 字數 3526 閱讀 1717

這幾天都在研究cubemx,一些比較簡單的記在有道雲筆記了,網上資料比較多我就沒必要寫出來了。

cubemx關於i2c的討論少了一些,有些人表示stm32的軟體i2c比硬體i2c穩定,具體我沒深入研究,我做測試的過程還沒出現過不穩定,所以就用硬體i2c了,發這篇部落格整理一下。

我用的是gy91模組,mpu9250+bmp280,而mpu9250和mpu6050的暫存器基本通用,都可以用類似方法。

這篇主要是參考了正點原子的mpu6050實驗

本人已經做好移植可以直接在cubemx例程上使用,鏈結在這裡。

1.在cubemx裡面配置的時候記得將引數選為下圖所示,其他模組可以檢視說明文件

2.介紹一下cubemx關於i2c的函式

/* 

第1個引數為i2c操作控制代碼

第2個引數為從機裝置位址

第3個引數為從機暫存器位址

第4個引數為從機暫存器位址長度

第5個引數為收發的資料的起始位址

第6個引數為傳輸資料的大小

第7個引數為操作超時時間

*/hal_statustypedef hal_i2c_mem_write

(i2c_handletypedef *hi2c, uint16_t devaddress, uint16_t memaddress, uint16_t memaddsize, uint8_t *pdata, uint16_t size, uint32_t timeout)

;hal_statustypedef hal_i2c_mem_read

(i2c_handletypedef *hi2c, uint16_t devaddress, uint16_t memaddress, uint16_t memaddsize, uint8_t *pdata, uint16_t size, uint32_t timeout)

typedef

enum

//返回的結構體定義

hal_statustypedef;

其中我們需要用到的是從機裝置位址,從機暫存器位址,收發資料大小,9050的裝置位址是0x68(ad0下拉),且使用上面兩個函式是需要將裝置位址左移一位,所以是0x68<<1,而暫存器位址下面列舉幾個本例子所需的:

#define mpu_pwr_mgmt1_reg		0x6b	

//電源管理暫存器1

#define mpu_pwr_mgmt2_reg 0x6c

//電源管理暫存器2

#define mpu_int_en_reg 0x38

//中斷使能暫存器

#define mpu_user_ctrl_reg 0x6a

//使用者控制暫存器

#define mpu_fifo_en_reg 0x23

//fifo使能暫存器

#define mpu_intbp_cfg_reg 0x37

//中斷/旁路設定暫存器

#define mpu_device_id_reg 0x75

//器件id暫存器

#define mpu_accel_xouth_reg 0x3b

//加速度值,x軸高8位暫存器

那麼就可以寫出初始化過程,過程為參考正點原子的初始化。下面函式執**況可用乙個hal_statustypedef變數去接收再列印出來,方便分析。

//下面主機和暫存器位址實際應用中建議換成巨集定義

uint8_t value =

0x00

;hal_i2c_mem_write

(&hi2c1,

0x68

<<1,

0x6b

, i2c_memadd_size_8bit,

&value,2,

100)

;osdelay

(100);

//解除休眠後要加至少100ms延時,以保證mpu初始化完畢

這樣就可以啦。

i2c學習筆記

1.1 i2c匯流排知識 1.1.1 i2c匯流排物理拓撲結構 i2c 匯流排在物理連線上非常簡單,分別由sda 序列資料線 和scl 序列時鐘線 及上拉電阻組成。通訊原理是通過對scl和sda線高低電平時序的控制,來產生i2c匯流排協議所需要的訊號進行資料的傳遞。在匯流排空閒狀態時,這兩根線一般被...

I2C學習筆記

i2c簡介 i2c inter integrated circuit 匯流排是由philips公司開發的兩線式序列匯流排,用於連線微控制器及其外圍裝置。是微電子通訊控制領域廣泛採用的一種匯流排標準。它是同步通訊的一種特殊形式,具有介面線少,控制方式簡單,器件封裝形式小,通訊速率較高等優點。i2c匯流...

I2C通訊 初學筆記

i2c匯流排是由 philips 公司開發的一種簡單 雙向二線制同步序列匯流排。它只需要兩根線即可在連線於匯流排上的器件之間傳送資訊。一般是用於連線微控制器及其外圍裝置,由兩根線組成,分別是 時鐘線sda和資料線scl 在cpu和被控ic或是ic與ic之間雙向傳遞,高速的ic匯流排一般可以達到400...