探索者STM32F407开发板与独立惯导MPU6050配置

项目场景:

探索者STM32F407开发板与独立惯导MPU6050配置,采用正点原子例程


问题描述:

正点原子例程中采用的是内置惯导,引脚分别为 PB8 与 PB9

在实验过程中,遇到了如下问题:

(1)直接使用 PB8 与 PB9 与惯导的 SCL 与 SDA 相连:

问题:无法识别到独立惯导,数据显示为内置惯导

由于源程序在开发板上直接运行是没有问题的,因此应该是开发板内部连接问题,使得 PB8 与 PB9 不能继续使用。

(2) 改写程序中的 IIC 部分,采用其他引脚(PB6 和 PB7):

改写的内容主要包括  IIC.h 和 IIC.c 两个文件,对照 stm32f4 官方手册:

//myiic.c
void IIC_Init(void)
{			
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//修改GPIOB

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;//修改引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);//修改GPIOB
	IIC_SCL=1;
	IIC_SDA=1;
}
//myiic.h
#define SDA_IN()  {GPIOC->MODER&=~(3<<(9*2));GPIOC->MODER|=0<<9*2;}	//修改
#define SDA_OUT() {GPIOC->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} 

#define IIC_SCL    PBout(8) //SCL 修改
#define IIC_SDA    PBout(9) //SDA 修改 
#define READ_SDA   PBin(9)  //修改
@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget(); } 

 结果开发板显示为无数据,查看源码发现这种情况是 MPU 已经正常初始化了,但没有得到数据,原因是函数mpu_dmp_get_data(&pitch,&roll,&yaw)返回值不为0,因此通过串口打印查看了函数的返回值,发现为1,继续深入查找,也在网上看了很多类似的情况,主要有以下几类:

  • FIFO 没有使能:原子例程中指明不需要使能
  • MPU 供电电压选错:选成 5V 模块不早就烧坏了吗?感觉这个也不对
  • IIC 读取速度太慢

总之,上面的各种情况我都一一查看了,都不是造成我的这种情况的原因。

(3)考虑开发板内部接线复杂,选择了较为稳妥的串口2的引脚( PA2 和 PA3)

结果:数据正常显示


原因分析:

开发板内部接线使得某些引脚不可用


解决方案:

使用串口 2

vcc-3.3v

gnd-gnd

scl-pa2

sda-pa3

ad0-gnd

int-pc0

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值