更改MPU6050的IIC端口

開門見山,我所用的例程是正點原子F103的mpu6050教程代碼。
它所讀取的mpu6050的方式是軟件模擬IIC通信,可以配置任意的io口進行讀取陀螺儀數據。

更改IIC的IO口需要改兩個地方:
1.是在mpuiic.c裏面的MPU_IIC_Init()函數裏面
在這裏插入圖片描述
在這裏修改SCL與SDA的IO口即可。

2.在mpuiic.h裏面修改IO口方向設置與IO口操作函數
在這裏插入圖片描述
先說IO口操作函數的修改,這裏沒什麼太多注意的地方,它主要是用了位帶操作IO口的方式,在PBout()…等裏面更改IO口號。

值得我們關注的是IO口的方向設置,先看到這個宏定義:

#define MPU_SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;}

從上面可以看到,我在這段程序中配置的SDA引腳是PB7,先把這個放在這裏,引起注意。下面開始解釋。
以stm32f103精英版爲例:
它共有 GPIOA~GPIOG 7組IO
每一組IO口有0~15一共16個端口
端口0~端口7就爲寄存器CRL(端口配置低寄存器)控制
端口8~端口15就爲寄存器CRH(端口配置高寄存器)控制
而每個端口又是4位,由CNF,MODE寄存器共同配置

見下表,以CRL寄存器解釋:
在這裏插入圖片描述
在上面我們說到SDA我是配置的PB7

#define MPU_SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;}
GPIOB->CRL&=0X0FFFFFFF;
上面講到CRL有8個端口(0-7),一個端口是4位,CRL共32位
CRL跟0X0FFFFFFF進行一個位與運算,把PB7的端口配置清零

GPIOB->CRL|=8<<28;
這裏的8是指PB7這個端口的配置,2828/4=7,左移7位送到PB7
完成配置

寫的不好的地方希望大家斧正,感激不盡。

感悟就是還是要多看寄存器配置,不能因爲只用庫函數而忽略了寄存器的配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章