您的位置:首页 > 其它

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

2018-03-22 12:51 393 查看
/**
********************* 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交流:1365466439 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息