STM32CubeMX移植MPU6050的DMP库读取角度信息

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)

该教程基于正点原子修改的dmp库,进一步修改,可以通过STM32CubeMX进行快速移植开发,手速快一点5分钟绝对能移植成功!!!

一、准备工作

1.硬件平台

使用正点原子STM32F4探索者

f4img

2.软件平台

STM32CubeMX软件平台 V6.2.1

Keil5软件平台 V5.32

STM32CubeProgrammer下载平台

GIT分布式版本控制系统(非必须)

20210207234636

3.MPU6050原理图

F4芯片IIC引脚为PB8、PB9:

20210606160826

MPU6050原理图如下:

20210606160752

二、操作步骤

1.CubeMX配置硬件IIC、串口(用于调试)生成代码

串口配置和硬件IIC配置可以参考我之前的两篇博客

STM32CubeMX-串口中断实验

STM32CubeMX-硬件IIC读取AT24C02

这两步配置很简单,只需要安装我教程里面的配置就行,只需要配置Cube,生成代码后不要急着写代码,下一步导入DMP库

2.导入DMP库

进入CubeMX生成的代码工程,在工程文件夹下新建一个Hardware文件夹

20210606162856

进入Hardware文件夹,如果有Git软件的同学,右击进入GitBush,粘贴如下代码,按下Enter键

git init
git config core.sparsecheckout true 
echo '/MPU6050/*' >> .git/info/sparse-checkout #改变添加文件夹
git remote add github https://github.com/Ajie16/Useful_Code_of_JeckXu.git #改变仓库链接
git pull github master #作者jeckxu

代码开始执行,将会把我修改的6050接口代码拉下来

20210606163148

拉下来后的文件夹

20210606163256

没有Git分布式管理工具的同学,进入CSDN下载链接下载MPU6050代码,然后手动解压到如图位置就行!

下载链接:MPU6050的DMP驱动代码

代码放好后我们进入MDK工程,添加代码

MDK工程新建Hardware文件夹,将MPU6050下所有.c文件添加(3个)

20210606163529

文件添加后,按下图点击位置添加编译路径定位到MPU6050

20210606163927

在usart.c文件的用户代码0段添加重定向代码,便于使用printf进行调试,代码如下

/* USER CODE BEGIN 0 */
#define USE_PRINT
#ifdef USE_PRINT
//编译器不使用MicroLib库
#pragma import(__use_no_semihosting)
//定义 _sys_exit() 避免使用半主机
void _sys_exit(int x)
{
    x = x;
}
struct __FILE
{
    int handle;
};
FILE __stdout;
//重映射fputc
int fputc(int ch, FILE *stream)
{
    //判断串口是否发送完成 
	  //不同芯片的串口标志位不一定相同,具体查手册
    while((USART1->SR & 0X40) == 0);
    //如果串口已经发送完成,发送下一个字符
    USART1->DR = (uint8_t) ch;
    return ch;
}
#endif
/* USER CODE END 0 */

插入位置

20210606164526

然后在usart.h加入printf的库

#include <stdio.h>

20210811222834

准备工作到此结束了,下面就是修改main.c文件的代码,调用API了

3.调用API

在main.c的用户环境包含内添加使用到的头文件

#include <stdio.h>
#include "../../../Hardware/MPU6050/mpu6050.h"
#include "../../../Hardware/MPU6050/delay.h"
#include "../../../Hardware/MPU6050/eMPL/inv_mpu.h"
#include "../../../Hardware/MPU6050/eMPL/inv_mpu_dmp_motion_driver.h" 

插入位置
20210606165027

在用户变量代码段添加如下变量,用于存放MPU6050的各项数据;

float pitch,roll,yaw; 		//欧拉角
short aacx,aacy,aacz;		//加速度传感器原始数据
short gyrox,gyroy,gyroz;	//陀螺仪原始数据
short temp;					//温度

插入位置
20210606165159

用户初始代码段2插入6050和dmp初始化代码

	while(MPU_Init());					//初始化MPU6050
	printf("%s\r\n","jeck666");
	while(mpu_dmp_init())
	{
		delay_ms(200);
		printf("%s\r\n","Mpu6050 Init Wrong!");
	}
	printf("%s\r\n","Mpu6050 Init OK!");

插入位置
20210606165343

代码主循环插入如下代码,用于将获取的数据通过串口上传给上位机

		if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
		{
			temp=MPU_Get_Temperature();								//得到温度值
			MPU_Get_Accelerometer(&aacx,&aacy,&aacz);	//得到加速度传感器数据
			MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);	//得到陀螺仪数据
			printf("三轴角度:%f-%f-%f\r\n",pitch,roll,yaw);
			printf("三轴加速度:%d-%d-%d\r\n",aacx,aacy,aacz);
			printf("三轴角角度:%d-%d-%d\r\n",gyrox,gyroy,gyroz);
		}
		delay_ms(100);

插入位置
20210606170314

编译程序,无报错

20210606170342

4.程序下载,观察现象(通用步骤)

程序下载我一般用两种方式:

第一种是使用MDK自带的下载环境下载程序,我们给单片机连接ST-Link后配置下载,点击魔术棒,选择debug

20210208181431

选择ST-link后,点击setting

20210208181619

添加对应F4的Flash

20210208181825

keil界面点击下载

20210208182113

第二种是使用Stm32Programmer下载软件,该下载软件下载方式多,下载快,下面我使用st-link下载

打开软件,点击connect左边选择stlink后再点击connect连接下载器

20210208182703

点击open file,找到工程路径下MDK文件夹下工程生成的hex文件

20210208182650

之后点击downlod下载,下载结果如下

20210208182721

5.实验现象

通过串口助手进行调试,上电复位后串口接受陀螺仪的值,移植到此完成!!!

mpu6050

posted @ 2021-06-06 17:23  JeckXu666  阅读(1104)  评论(0编辑  收藏  举报