为了便于交流共同学习,博主QQ群242629020(stm32-MCU认认真真交流群) 欢迎批评指导!!!电梯:https://jq.qq.com/?_wv=1027&k=5n1AfYq
/**
********************* 2018年3月22日下午 9:47分 于北京 大兴区兴涛园29号楼 ****************
* 工程文件夹名称:test2_encoder
* 使用的硬件平台:NUCLEO-F407VET6
* keil-MDK版本:5.22
* STM32cubemx:4.24
* CubeMX支持包:STM32Cube FW_F4 V1.19.0
*************************************************************************************
* 工程包含以下功能:
* ① printf映射到USART1
* ② 移植好了MPU9250代码
* ③ 通过USART2与匿名地面站通信
*
*************************************************************************************
*/
/*
使用步骤:
① main.c -> mian()
加入以下代码,初始化MPU9250与DMP库
/* USER CODE BEGIN 2 */
HAL_Delay(30);
uint8_t mpu_status = 1;
while(mpu_status)
{
mpu_status = mpu_dmp_init();
printf("mpu_status:%d\r\n",mpu_status);
HAL_GPIO_TogglePin(GPIOA,LED3_Pin);
HAL_Delay(100);
}
HAL_GPIO_WritePin(GPIOA,LED3_Pin,GPIO_PIN_SET);
/* USER CODE END 2 */
② freertos.c->StartTask02()
在任务开头创建以下变量
/* USER CODE BEGIN StartTask02 */
//pitch:俯仰角 精度:0.1° 范围:-90.0° <---> +90.0°
//roll:横滚角 精度:0.1° 范围:-180.0°<---> +180.0°
//yaw:航向角 精度:0.1° 范围:-180.0°<---> +180.0°
float pitch,roll,yaw;
// short temp;
short aacx,aacy,aacz;
short gyrox,gyroy,gyroz;
//short mx,my,mz;
/* Infinite loop */
获取欧拉角及上传数值到上位机
if(mpu_mpl_get_data(&pitch,&roll,&yaw)==0)
{
// temp=MPU_Get_Temperature();
MPU_Get_Accelerometer(&aacx,&aacy,&aacz);
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);
//MPU_Get_Magnetometer(&mx,&my,&mz); //读取磁力计会报错
mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz,compass_short[0],compass_short[1],compass_short[2]);
// mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);
usart2_report_imu((int)(roll*100),(int)(pitch*100),(int)(yaw*100),0,0);
}
//执行间隔不能大于7MS,大于7msFIFO可能会发生溢出,数据产生错误
osDelay(7);
移植方法:
① 在cubeMX中添加IIC1 设置IIC为快速模式,速率为400K
与上位机通讯的接口是USART2,所以这里需要打开和设置USART2,将USART2的波特率设置为500K(上位机那边也是500K)
② 在freertos设置中将其中一个堆栈从128改为400
③ 在keil的"魔术棒 options for target -> C/C++ -> Define“ 里面填入:
USE_HAL_DRIVER,STM32F407xx,MPL_LOG_NDEBUG=1,EMPL,MPU9250,EMPL_TARGET_STM32F4
勾选上”C99 Mode“ 最后”确定“
④ 将本工程以下目录复制到目标工程:
① .\DMP
② .\Src\MyHARDWARE\MPU9250
③ .\Src\MyHARDWARE\niming
⑤ 在keil中添加所复制目录中的所有C文件,并包含h文件
① 新建group:DMP
② 新建group:NIMING
③ 在DMP组中添加13个C文件以及一个lib文件
④ 在NIMING组中添加niming.c
⑤ 在Application/User组中添加MU9250.c
⑥ 在keil中包含以下头文件路径:(前提是和我的工程目录结构一致)
..\Src\MyHARDWARE\MPU9250
..\DMP\driver\eMPL
..\DMP\driver\include
..\DMP\driver\stm32L
..\DMP\eMPL-hal
..\DMP\mllite
..\DMP\mpl
..\Src\MyHARDWARE\niming
⑦ 在main.c中包含以下头文件:
#include "mpu9250.h"
#include "inv_mpu.h"
在freertos.c中包含以下头文件:
#include "inv_mpu.h"
#include "mpu9250.h"
#include "niming.h"
⑧ 最后就是编译使用了;使用方法见开头;
上位机显示效果:
姿态3D显示;
数据波形显示
注:工程中的很多代码参考 正点原子MPU9250实验中的代码.
附上工程下载链接:https://download.csdn.net/download/mryarnell/10301861
为了便于交流共同学习,博主QQ群242629020(stm32-MCU认认真真交流群) 欢迎批评指导!!!电梯:https://jq.qq.com/?_wv=1027&k=5n1AfYq