更改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
完成配置

写的不好的地方希望大家斧正,感激不尽。

感悟就是还是要多看寄存器配置,不能因为只用库函数而忽略了寄存器的配置。

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