移植正点原子mpu6050代码,总是MPU6050初始化失败解决
首先观察正点原子MPU6050代码,发现它在读取MPU6050数据的同时,还将数据通过串口发送给上位机进行调试,而我们移植mpu6050,只是单纯的想读取MUP6050的数据,不需要串口部分,问题就出在串口发送数据这。下面我将详细的讲解:(库函数)
我们在移植代码的时候,只移植MPU6050的代码,这样当然没什么问题,我也是这样移植的,移植之后再修改主函数,将串口及LCD显示的一些函数给删掉,删掉之后的代码我就用我的主函数作为示例,我使用的是oled进行显示,示例如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "oled.h"
char oledBuf[20];
int main(void)
{
float pitch,roll,yaw; //欧拉角
short aacx,aacy,aacz; //加速度传感器原始数据
short gyrox,gyroy,gyroz; //陀螺仪原始数据
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
delay_init(); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化按键
MPU_Init(); //初始化MPU6050
while(mpu_dmp_init())
{
}
OLED_Init(); //初始化OLED
OLED_Clear();
while(1)
{
while(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
{
MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度传感器数据
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据
}
delay_ms(100);
sprintf(oledBuf,"%d",gyrox);
OLED_ShowString(0,4,(u8*)oledBuf,16);
sprintf(oledBuf,"%d",gyroy);
OLED_ShowString(48,4,(u8*)oledBuf,16);
sprintf(oledBuf,"%d",gyroz);//得到陀螺仪数据
OLED_ShowString(96,4,(u8*)oledBuf,16);
sprintf(oledBuf,"%.1lf",pitch);
OLED_ShowString(0,6,(u8*)oledBuf,16);
sprintf(oledBuf,"%.1lf",roll);
OLED_ShowString(48,6,(u8*)oledBuf,16);
sprintf(oledBuf,"%.1lf",yaw);
OLED_ShowString(96,6,(u8*)oledBuf,16);//得到欧拉角数据
}
}
在修改主函数之后,将程序烧录进自己的板子,发现程序不执行,显示屏无显示。
经过筛查之后,发现mpu_dmp_init()这个函数中的mpu_init()这个函数初始化失败。
在mpu_init()这个函数中,将蓝颜色方框的代码屏蔽掉,问题自然就解决了。