关于MPU6050模块的食用>_<(本人比较菜,写的不好或有错误的地方欢迎大佬指出)

最近学校冬令营发了个MPU6050模块,第一次弄也花了我花了不少时间,于是就把其中一些步骤以及要点简单说下。

至于MPU6050的介绍啥的,我也不细说了,很多地方都有,我就说下怎么移植现成的代码。(用的核心板是F401CCU6)

把代码下载一下,芝士地址 (提取码:1145) (里面有些头文件如果报错的话删掉就行了)

代码分成两部分,一个是对mpu6050寄存器的读取,另一个是dmp库,也就是把读取的原始信息进行一系列操作得到的三轴角速度以及欧拉角等信息。

然后就是CubeMX里的配置

1、尝龟配置,开烧录口,以及时钟配置

2、与MPU6050建立IIC通信:

找两个IO口,我选择的是A0与A1,都设置为开漏输出,上拉,其他不变(如图)

3、开启串口用于调试

这里我选择的是UART1,要是选别的串口的话后面printf重定向代码记得改一下

4、project manager里正常配置即可

接线:只用MPU6050的SDA,SCL,GND,VCC四个引脚即可,其他的话目前不需要,引脚对着图接即可

      我用的是DAPLINK,就用DAPLINK上的TX接单片机的RX,RX对TX即可

之后就是keil里的部分

先把移植文件都导入进去,根据引脚配置改一下mpuiic.h里的宏定义,然后定义一下三个欧拉角变量(pitch,roll,yaw)

再写一下printf重定向,把下面代码加在usart.c即可

/* USER CODE BEGIN 0 */
typedef struct __FILE FILE;
struct __FILE
{
int handle;
};
FILE __stdout;
/* USER CODE END 0 */ /* USER CODE BEGIN 1 */
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0); //这里是usart1,用别的串口记得改
USART1->DR = (uint8_t) ch;
return ch;
}
/* USER CODE END 1 */

然后是main函数里的代码

  /* USER CODE BEGIN 2 */
MPU_Init();
printf("print ok\n");
while(mpu_dmp_init())
{
HAL_Delay(20);
printf("no_dmp\n");
}
printf("ok_dmp\n");
/* USER CODE END 2 */ /* USER CODE BEGIN 3 */
while(mpu_dmp_get_data(&pitch,&roll,&yaw)){}
printf(" pitch:%f\n roll:%f\n yaw:%f\n",pitch,roll,yaw);
HAL_Delay(1000);
/* USER CODE END 3 */

然后打开串口助手,就可以收到MPU6050发送的三个欧拉角信息啦

值得注意的一些地方:

1、两个GPIO口的配置均为开漏输出,如果是推挽输出的话会导致dmp初始化不成功(返回值为4)

2、烧录的时候MPU6050记得放平,不然容易出现误差

3、因为没加地磁计,所以yaw的零点漂移会比较严重

4、其他问题可以参考这篇博客里最后的问题汇总

第一次写博客,还请多多指教>_<

后面有空可能会写pid的东西()

【STM32F4 HAL】MPU6050食用的更多相关文章

  1. STM32F4 HAL Composite USB Device Example : CDC + MSC

    STM32F4 USB Composite CDC + MSC I'm in the process of building a USB composite CDC + MSC device on t ...

  2. 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载加速度 ...

  3. STM32F4 HAL库中是如何实现UART IO配置的?

    1.配置串口IO.中断等底层的东西需要在用户文件中重写HAL_UART_MspInit函数2.hal库是在stm32f4xx_hal_msp.c文件中重写的HAL_UART_MspInit函数,分析如 ...

  4. STM32 HAL SPI读取MPU6500的设备ID异常

    1.问题背景 近前,使用STM32F4 HAL库的SPI读取MPU6500出现异常. 现象:读取ID失败,返回0,以为硬件焊接问题,各种排查,最后为了示波器测试方便,把读取ID的函数放到While(1 ...

  5. STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率

    前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时 ...

  6. STM32 之 HAL库(固件库) _

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  7. STM32 之 HAL库(固件库)

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  8. STM32学习及应用笔记一:SysTick定时器学习及应用

    这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick究竟是 ...

  9. 【原创】STM32低功耗模式及中断唤醒(基于BMI160及RTC)的研究

    预研目标 六轴静止时,终端进入低功耗模式:六轴震动时,终端正常工作模式,从而极大减少非工作时的电流消耗. 解决方案 机器静止时,依据六轴算法,CPU进入休眠(停止)模式:机器工作时,触发六轴中断唤醒C ...

  10. stm32F4中断分析-HAL库

    详细可以参考: STM32使用HAL库操作外部中断——实战操作 https://www.cnblogs.com/wt88/p/9624103.html /** ******************** ...

随机推荐

  1. Linux进程通信 | 管道与FIFO

    Linux进程间通信通常使用的方式有很多种,其中比较常用的包括管道(pipe)和 FIFO(命名管道).本文将介绍这两种通信方式的基本概念,并用C语言编写示例代码,来说明如何在两个进程之间使用这些IP ...

  2. js与java使用AES加密算法实现前后端加密解密

    AES加密算法入门:https://blog.csdn.net/IndexMan/article/details/87284833 第三方crypto.js下载地址:https://download. ...

  3. java处理json类型数据--阿里巴巴fastjson api常用方法实战

    fastjson介绍 最近工作上经常需要解析json类型数据以及java对象到json类型的互转,特地研究了下阿里巴巴的fastjson,这个是国内用的 比较多的json转换api,还有其他的入jac ...

  4. junit多个测试方法共享变量

    本文介绍利用类的静态属性实现junit多个测试方法间共享同一变量值. package com.laoxu.gamedog; import org.junit.Test; /** * @author x ...

  5. 【Android逆向】破解看雪9月算法破解第二题

    1. apk安装到手机,一样的界面,随便输入一样的报错 2. apk拖入到jadx重看看 public native String sha1(String str); static { System. ...

  6. 常见的问题系列--- Swagger @ApiOperationSupport忽略失效的问题

    https://www.cnblogs.com/hujunwei/p/15853307.html

  7. 硬件开发笔记(九): 硬件开发基本流程,制作一个USB转RS232的模块(八):创建asm1117-3.3V封装库并关联原理图元器件

    前言   有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了一个创建asm1117-3.3V封 ...

  8. typing模块中Protocol协议的使用

    说明 在 Python 的 typing 模块中,Protocol 是一个用于定义协议(Protocol)的类. 协议是一种形式化的接口,定义了一组方法或属性的规范,而不关心具体的实现.Protoco ...

  9. 【Filament】Filament环境搭建

    1 前言 ​ Filament 是一个实时物理渲染引擎,用于 Android.iOS.Linux.macOS.Windows 和 WebGL 平台.该引擎旨在提供高效.实时的图形渲染,并被设计为在 A ...

  10. 使用ConfuserEx代码混淆工具保护你的.NET应用程序

    前言 .NET应用如何防止被反编译?这个对于我们.NET开发而言是一个值得关注和重视的问题,防止应用程序被反编译的手段有很多本文我们主要讲讲如何使用ConfuserEx .NET开源免费的代码混淆工具 ...