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

Posted Top嵌入式

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32CubeMX移植MPU6050的DMP库读取角度信息相关的知识,希望对你有一定的参考价值。

文章目录

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

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

一、准备工作

1.硬件平台

使用正点原子STM32F4探索者

2.软件平台

STM32CubeMX软件平台 V6.2.1

Keil5软件平台 V5.32

STM32CubeProgrammer下载平台

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

3.MPU6050原理图

F4芯片IIC引脚为PB8、PB9:

MPU6050原理图如下:

二、操作步骤

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

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

STM32CubeMX-串口中断实验

STM32CubeMX-硬件IIC读取AT24C02

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

2.导入DMP库

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

进入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接口代码拉下来

拉下来后的文件夹

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

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

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

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

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

在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 */

插入位置

然后在usart.h加入printf的库

#include <stdio.h>

准备工作到此结束了,下面就是修改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" 

插入位置

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

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

插入位置

用户初始代码段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!");

插入位置

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

		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);

插入位置

编译程序,无报错

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

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

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

选择ST-link后,点击setting

添加对应F4的Flash

keil界面点击下载

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

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

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

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

5.实验现象

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

以上是关于STM32CubeMX移植MPU6050的DMP库读取角度信息的主要内容,如果未能解决你的问题,请参考以下文章

STM32CubeMX(05) 移植陀螺仪MPU6050的DMP库读取三轴角度,加速度

STM32CubeMX配置工程移植dmp库配合匿名四轴上位机三维动态显示测试

HAL库硬件IIC_MPU6050_DMP移植

STM32--MPU6050 DMP读角度总结

STM32 姿态传感器mpu6050的使用

MPU9250的MPL移植_HAL库(以STM32F103为主控)