【CubeMX配置STM32驱动MPU6050】

这篇具有很好参考价值的文章主要介绍了【CubeMX配置STM32驱动MPU6050】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

cube mpu6050,stm32,单片机,arm
OLED的具体使用方法我就不细说了,我前面的文章里面有讲OLED的,如果有需要可以去看看。

2、配置MPU6050的接口

我用MPU6050使用的是软件IIC(其实是只找到软件IIC的驱动),所以我们只需要配置两个GPIO口就可以实现对MPU6050的控制了。
cube mpu6050,stm32,单片机,arm

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

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

OLED的文件在我前面的文章里面给出来了,我这儿就只给出MPU6050的文件了:
资源上传了,因为里面是直接包括DMP的直接下载比较方便,原本我打算下面把所有的文件将代码的方式给出来的,但是都要写完了才发现篇幅太长了是发不出来的,而且越写到后面字数多了浏览器就很卡,所以你们还是直接下载吧。
然后将驱动文件加到keil里面,记得添加路径
cube mpu6050,stm32,单片机,arm
具体的函数在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 */
}

效果图如下:
cube mpu6050,stm32,单片机,arm
对了,上面的显示小数那个函数在我前面的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);
	}
}

如果有什么错误欢迎各位指正哦。文章来源地址https://www.toymoban.com/news/detail-650700.html

到了这里,关于【CubeMX配置STM32驱动MPU6050】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32软件I2C驱动MPU6050

    这里没有什么复杂的地方,采用MPU6050的现成模块.模块的SCL接B10,SDA接B11,这里连接了一个OLED显示屏,用于显示获取到的数据. 注意:这里使用的模块自带上拉电阻 首先在工程目录里创建: \\\"MyI2C.h\\\"和\\\"MyI2C.c\\\"文件,用于软件驱动I2C. \\\"MPU6050.h\\\",\\\"MPU6050.c\\\"和\\\"MPU6050Reg.h\\\"文件,用于MPU6050的驱动. 在

    2024年02月15日
    浏览(55)
  • STM32 软件IIC配置(MPU6050演示)

    IIC说明: IIC是一种通信协议,IIC 总线是一种用于IC器件之间连接的二线制总线,有主机和从机,二者可以互相通信,可以一主多从也可以多主多从,有时钟线(SCL)和数据线(SDA),SDA线既可以被主机控制也可以被从机控制,但SCL线只能由主机控制。 软件IIC配置: 总体操作

    2024年02月07日
    浏览(49)
  • 【STM32+cubemx】0027 HAL库开发:MPU6050陀螺仪和加速度计数据的获取和校准

    在制作平衡车或者飞行器时,不可避免地需要知道设备本身的姿态,一般我们使用陀螺仪和加速度计来获取这些信息。 陀螺仪用来测量物体的角度。传统的机械式陀螺的原理,和我们小时候玩的陀螺一样,是利用了高速旋转的物体能保持轴线稳定的特性;机械式陀螺需要的加

    2023年04月08日
    浏览(50)
  • STM32F103C8驱动MPU6050姿态与tofsense报警 (一)

    本工程是实现STM32F103C8获取 mpu6050欧拉角(pitch ,roll,yow) mpu6050自带的dmp  第一步:设置串口 #if EN_USART1_RX   //如果使能了接收 //串口1中断服务程序 //注意,读取USARTx-SR能避免莫名其妙的错误        u8 USART_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节. //接收状态 //bit15,

    2024年01月17日
    浏览(45)
  • STM32F103C8驱动MPU6050姿态与tofsense报警 (六)

    主函数 int main(void)  {         //RCC_Configuration(); //时钟设置          //BUZZER_BEEP1();//蜂鸣器音1         //BUZZER_BEEP1();//蜂鸣器音1     //delay_ms(50);     SYS_Init();//系统初始化总函数     while(1)   //主循环     {      // BUZZER_BEEP1();//蜂鸣器音1         MPU_Read();    //MP

    2024年01月17日
    浏览(79)
  • STM32----MPU6050

    前言:最近几个月没有写文章了,因为这学期的事情真的有点多,但是想了想,文章还是要更新,总结自己学习的知识,真的很重要!!! MPU6050 是 InvenSense 公司推出的全球首款整合性 6 轴运动处理组件 ,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减

    2024年02月15日
    浏览(40)
  • 学习记录之STM32F103C8T6最小系统板驱动MPU6050串口打印数据

    1.使用到的工具介绍 2.MPU6050和整体和简单介绍 3.程序的介绍 1.使用到的工具介绍 硬件方面:STM32F103C8T6最小系统板核心板,MPU6050模块三维角度传感器,经典的CH340烧写和串口作用,和若干个杜邦线。 软件方面:keil5编写程序软件,烧写软件FlyMcu.exe烧写工具,sscom.exe串口调试工

    2023年04月09日
    浏览(61)
  • 【STM32】STM32学习笔记-MPU6050简介(32)

    •MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景 •3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度 •3轴陀螺仪传感器(Gyroscope):测量X、Y、

    2024年01月19日
    浏览(55)
  • STM32之MPU6050获取欧拉角

    mpu6050 集成了三轴 MEMS 陀螺仪,三轴 MEMS 加速度计,以及一个可扩展的数字运动处理器 DMP(Digital Motion Processor)。辅助I2C接口可以连接一个第三方的数字传感器,比如磁力计。扩展了磁力计之后就可以通过其主要I2C接口输出一个 9 轴的信号(否则只能输出一个6轴的信号)。

    2023年04月20日
    浏览(79)
  • STM32外设系列—MPU6050角度传感器

    🎀 文章作者:二土电子 🌸 关注公众号获取更多资料! 🐸 期待大家一起学习交流!   MPU6050是由InvenSense公司生产的全球首款整合性六轴运动处理模块,它可以实时获取运动物体的在三维坐标系内的偏转角度,如图所示。   其中roll为绕X轴偏转的角度,pitch为绕Y轴偏转

    2024年02月03日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包