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配置可以参考我之前的两篇博客
这两步配置很简单,只需要安装我教程里面的配置就行,只需要配置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库读取三轴角度,加速度