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

文章目录

  • 5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)
    • 一、准备工作
      • 1.硬件平台
      • 2.软件平台
      • 3.MPU6050原理图
    • 二、操作步骤
      • 1.CubeMX配置硬件IIC、串口(用于调试)生成代码
      • 2.导入DMP库
      • 3.调用API
      • 4.程序下载,观察现象(通用步骤)
      • 5.实验现象

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

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

一、准备工作

1.硬件平台

使用正点原子STM32F4探索者

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第1张图片

2.软件平台

STM32CubeMX软件平台 V6.2.1

Keil5软件平台 V5.32

STM32CubeProgrammer下载平台

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

20210207234636

3.MPU6050原理图

F4芯片IIC引脚为PB8、PB9:

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第2张图片

MPU6050原理图如下:

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第3张图片

二、操作步骤

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

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

STM32CubeMX-串口中断实验

STM32CubeMX-硬件IIC读取AT24C02

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

2.导入DMP库

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

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第4张图片

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

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

拉下来后的文件夹

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第6张图片

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

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

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

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

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第7张图片

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

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第8张图片

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

//printf重定向代码,修改其底层fputc
#if 1
#include 

/* 告知连接器不从C库链接使用半主机的函数 */
#pragma import(__use_no_semihosting)

/* 定义 _sys_exit() 以避免使用半主机模式 */
void _sys_exit(int x)
{
     
    x = x;
}

/* 标准库需要的支持类型 */
struct __FILE
{
     
    int handle;
};

FILE __stdout;

/*  */
int fputc(int ch, FILE *stream)
{
     
    /* 堵塞判断串口是否发送完成 */
	/* 不同芯片的串口标志位不一定相同! */
    while((USART1->SR & 0X40) == 0);

    /* 串口发送完成,将该字符发送 */
    USART1->DR = (uint8_t) ch;

    return ch;
}

#endif

插入位置

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第9张图片

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

3.调用API

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

#include 
#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" 

插入位置
5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第10张图片

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

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

插入位置
5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第11张图片

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

插入位置
5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第12张图片

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

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

插入位置
5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第13张图片

编译程序,无报错

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第14张图片

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.实验现象

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

5分钟使用CubeMX移植MPU6050的DMP库读取角度信息(超简单)_第15张图片

你可能感兴趣的:(#,STM32,dmp,mpu6050,陀螺仪,stm32,新星计划)