找回密码
 注册

QQ登录

只需一步,快速开始

搜索

STM32 MPU6050驱动程序的详细讲解及DMP库的移植

[复制链接]
路漫漫 发表于 2020-6-4 17:57:28 | 显示全部楼层 |阅读模式
提供给MPU6050驱动的讲解注释(本人亲测),以及DMP库移植的说明,提供一切必须文件,直接移植即可使用输出欧拉角。
完整源码: MPU6050.rar (47.44 KB, 售价: 3 E币)
093223qkjmem3g8xqrzgyf.jpg
提供完整的附加函数,方便移植使用:

093152sehfjhaarjo9toxo.jpg

提供完整的驱动以及移植好的DMP库:
093336vzf0ci02obo300wb.jpg


MPU6050模块:输出原始数据通过内置DMP进行数据处理,获取姿态信息:角度、角速度,多用于PID控制。
IIC接口引脚配置
3.3V供电
SDA:PB11
SCL:PB10
AD0:PB2
//INT:PB5 中断,暂时用不到

通信协议层:mpu_iic.c/mpu_iic.h
软件模拟IIC,是STM32与MPU6050通信的基本框架

驱动层:mpu6050.c/mpu6050.h
建立在IIC通信机制上的,向DMP库提供对MPU6050寄存器的读写操作,以及完成对MPU6050初始化的任务。

应用层:
移植的库:inv_mpu.c/inv_mpu_dmp_motion_driver.c(及所包含的头文件)
移植的DMP库,对原始数据进行处理,
调用时,在inv_mpu.c中添加如下代码即可(实际上是让DMP库和我们写的驱动层建立联系)
#define i2c_write   MPU_Write_Continue
#define i2c_read    MPU_Read_Continue
#define delay_ms    delay_ms
#define get_ms      mget_ms

附加的函数:延时、串口打印,这些到时候可以统一

具体使用例子如下:
  1. #include "stm32f10x.h"   
  2. #include "usart.h"
  3. #include "delay.h"
  4. #include "mpu6050.h"
  5. #include "inv_mpu.h"
  6. #include "inv_mpu_dmp_motion_driver.h"

  7. int main(void)
  8. {
  9.     uint8_t x=0;
  10.     float pitch,roll,yaw;         //欧拉角
  11.     short aacx,aacy,aacz;        //加速度传感器原始数据
  12.     short gyrox,gyroy,gyroz;    //陀螺仪原始数据
  13.     short temp;                    //温度
  14.    
  15.     NVIC_PriorityGroupConfig( 2 );
  16.     delay_init();
  17.     USART1_Init(115200);   
  18.     printf("程序开始\n");
  19.    
  20.     if( MPU_Init()!=0 )
  21.     {
  22.         printf("MPU6050初始化错误!\n");
  23.         return 0;
  24.     }
  25.         
  26.     if( mpu_dmp_init() )
  27.     {
  28.         printf("DMP初始化错误!\n");
  29.         return 0;
  30.     }
  31.     while(1)
  32.     {
  33.         if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0) //获取DMP处理后的姿态信息(欧拉角)
  34.         {
  35.             temp=MPU_Get_Temperature();    //得到温度值
  36.             MPU_Get_Accelerometer(&aacx,&aacy,&aacz);    //获取加速度传感器原始数据
  37.             MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);    //获取陀螺仪原始数据
  38.         }
  39.         delay_ms(100);
  40.         printf("pitch:%02f  roll:%02f  yaw:%02f\n",pitch,roll,yaw);
  41.     }
  42.    
  43.             
  44. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-11-21 20:00

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表