【CubeMX配置STM32驱动MPU6050】

CubeMX配置STM32驱动MPU6050(包含DMP)并且在0.96寸OLED上显示

一、使用CubeMX进行相关配置
1、配置OLED的IIC接口

在这里插入图片描述
OLED的具体使用方法我就不细说了,我前面的文章里面有讲OLED的,如果有需要可以去看看。

2、配置MPU6050的接口

我用MPU6050使用的是软件IIC(其实是只找到软件IIC的驱动),所以我们只需要配置两个GPIO口就可以实现对MPU6050的控制了。
在这里插入图片描述

在这里插入图片描述
这里我使用的是PB8、9,这里特别注意的是在User Label那儿需要将两个引脚分别设置为MPU6050_SCLMPU6050_SDA,因为这里涉及到驱动函数里面的宏定义,这样设置之后方便以后驱动函数的移植。
在这里插入图片描述
我使用的是C8T6,时钟树我就是配置的最常见的72MHZ。

二、使用keil 5 进一步开发
1、引入OLED和MPU6050的驱动文件

OLED的文件在我前面的文章里面给出来了,我这儿就只给出MPU6050的文件了:
资源上传了,因为里面是直接包括DMP的直接下载比较方便,原本我打算下面把所有的文件将代码的方式给出来的,但是都要写完了才发现篇幅太长了是发不出来的,而且越写到后面字数多了浏览器就很卡,所以你们还是直接下载吧。
然后将驱动文件加到keil里面,记得添加路径
在这里插入图片描述
具体的函数在OLED和MPU6050的驱动文件里面都有说明。

2、引入头文件、定义变量
/* USER CODE BEGIN Includes */
#include "stdio.h"
//mpu6050文件
#include "IIC.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
//
#include "oled.h"
/* USER CODE END Includes */
/* USER CODE BEGIN 0 */
float pitch,roll,yaw; 		    //欧拉角
short aacx,aacy,aacz;			//加速度传感器原始数据
short gyrox,gyroy,gyroz;		//陀螺仪原始数据
float temp;					    //温度
/* USER CODE END 0 */

示例:

int main(void)
{

  /* USER CODE BEGIN 1 */
	
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	OLED_Init();
	OLED_Clear();
	MPU_Init();
	mpu_dmp_init();
	if(MPU_Init()==0&&mpu_dmp_init()==0)
	{
		printf("mpu6050初始化成功\r\n");//我是串口和OLED都设置了显示的,所以这儿多了
		//                               一个printf,下面那个printf也是
		OLED_ShowString(0,0,"successfully",16);
	}
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
//		OLED_ShowNum(24,2,a,3,16);
//		HAL_Delay(100);
//		a++;
		HAL_Delay(500);
    while(mpu_dmp_get_data(&pitch, &roll, &yaw));	//必须要用while等待,才能读取成功
    MPU_Get_Accelerometer(&aacx,&aacy, &aacz);		//得到加速度传感器数据
    MPU_Get_Gyroscope(&gyrox, &gyroy, &gyroz);		//得到陀螺仪数据
    temp=MPU_Get_Temperature();						//得到温度信息
    printf("X:%.1f  Y:%.1f  Z:%.1f  %.2f℃ \r\n",roll,pitch,yaw,temp/100);//串口1输出采集信息
		
		OLED_ShowString(0,2,"roll:",16);
		OLED_ShowDecimal(40,2,roll,16);
		OLED_ShowString(0,4,"pitch:",16);
		OLED_ShowDecimal(48,4,pitch,16);
		OLED_ShowString(0,6,"yaw:",16);
		OLED_ShowDecimal(32,6,yaw,16);
    /* USER CODE END WHILE */
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

效果图如下:
在这里插入图片描述
对了,上面的显示小数那个函数在我前面的OLED的介绍里面没有,是后面自己加上去的,需要自己重新加一下,不过这个函数还有点问题,就是小数点后面的显示位数那儿,我设置为两位但有时候是现实三位;设置为一位又有时会显示两位。我还没有找到原因,如果有知道的可以联系我帮我讲讲这个。谢谢啦

//显示小数,小数点前三位,小数点后两位
void OLED_ShowDecimal(uint8_t x,uint8_t y,float num,uint8_t size)
{
	float a=0;
	
	if(num>=0)
	{
		a=10*(num-(int)num);
		OLED_ShowNum(x,y,(int)num,3,size);
		OLED_ShowChar(x+24,y,'.',size);
		OLED_ShowNum(x+32,y,(int)a,1,size);
	}
	else
	{
		num=0-num;
		OLED_ShowChar(x,y,'-',size);
		a=10*(num-(int)num);
		OLED_ShowNum(x+8,y,(int)num,3,size);
		OLED_ShowChar(x+32,y,'.',size);
		OLED_ShowNum(x+40,y,(int)a,1,size);
	}
}

如果有什么错误欢迎各位指正哦。

  • 9
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 47
    评论
MPU6050是一种常用的六轴传感器,可以测量加速度和角速度。在CubeMX中使用MPU6050需要进行以下几个步骤: 1. 引入头文件和定义变量:在代码中引入MPU6050的头文件,并定义相关变量,如欧拉角、加速度传感器原始数据、陀螺仪原始数据和温度等。\[2\] 2. 写入MPU6050寄存器数据:使用MPU6050_WriteReg函数可以向MPU6050的寄存器中写入数据。该函数需要传入MPU6050设备结构体指针、要写入的寄存器地址和要写入的数据。函数内部使用HAL库的HAL_I2C_Mem_Write函数进行寄存器写入操作。\[3\] 3. 读取MPU6050寄存器数据:使用MPU6050_ReadReg函数可以从MPU6050的寄存器中读取数据。该函数需要传入MPU6050设备结构体指针、要读取的寄存器地址、存储读取数据的缓冲区指针和要读取的数据长度。函数内部使用HAL库的HAL_I2C_Mem_Read函数进行寄存器读取操作。\[3\] 4. 初始化MPU6050设备:在初始化函数中调用MPU6050_Init函数,传入MPU6050设备结构体指针和I2C句柄,以初始化MPU6050设备。\[3\] 以上是使用MPU6050的一般步骤,具体的代码实现可以参考引用\[2\]和引用\[3\]中的示例代码。 #### 引用[.reference_title] - *1* *3* [STM32CubeMX驱动MPU6050模块](https://blog.csdn.net/qq_52158753/article/details/130390227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【CubeMX配置STM32驱动MPU6050】](https://blog.csdn.net/qq_57709749/article/details/127162278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值