STM32硬件IIC 9轴MPU9250传感器DMP库在FreeRTOS上的移植,输出欧拉角

为了便于交流共同学习,博主QQ群242629020stm32-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群242629020stm32-MCU认认真真交流群) 欢迎批评指导!!!电梯:https://jq.qq.com/?_wv=1027&k=5n1AfYq

猜你喜欢

转载自blog.csdn.net/MrYarnell/article/details/79651903