STM32F4/STM32F1手把手移植MPU6050欧拉角(HAL库,带源码)

该文档详细介绍了如何使用CubeMAX软件设置STM32工程,包括新建工程、设置时钟、调试、配置串口和IIC。接着,它提供了DMP文件的移植步骤,涉及源码、欧拉角配置,并给出了STM32F1和STM32F4的源码链接,以及如何将MPU6050集成到工程中的具体代码示例。
摘要由CSDN通过智能技术生成

目录

一、CubeMAX软件设置

1.打开CubeMAX,新建工程

 2.设置时钟,DEBUG调试

3.配置只发送串口

 4.配置时钟

 5.设置文件名,编译器,生成独立文件,生成

 二、移植DMP文件

1.视频

2.源码

2.代码部分


一、CubeMAX软件设置
1.打开CubeMAX,新建工程

 2.设置时钟,DEBUG调试

 3.设置硬件IIC

3.配置只发送串口

 4.配置时钟

 5.设置文件名,编译器,生成独立文件,生成

 

 二、移植DMP文件
1.视频

欧拉角配置

2.源码

STM32F1源码  提取码:impu

 STM32F4源码 提取码:impu

2.代码部分
#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"
/*说明
	1.将这个MPU6050的文件夹复制到刚才创建的工程里
	2.添加路径和文件夹,选择下载器,将.C文件添加到工程里
	3.添加头文件,就是刚在添加的那几个文件
	4.一直复制即可,后续将main函数放入csnd中
	5.串口重定向,添加stdio.h再将下面代码复制到usart.c的最下面即可
		int fputc(int ch, FILE *f)
		{
			HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
			return ch;
		}
		 
		int fgetc(FILE *f)
		{
			uint8_t ch = 0;
			HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
			return ch;
		}
	6.这里就ok了

*/
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
float pitch, roll, yaw;
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
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 */
	/*测试一下串口,这里我们用的是硬件IIC软甲IIC没有用到,就不需要添加软件IIC的代码了,还得设置这里*/
	/*语句放在串口初始化下面*/
	/*这里需要将串口重定向一下*/
	printf("-- Mpu6050 Project Start -- \r\n");
	HAL_Delay(1000);
	/*
   *DMP初始化,
   */
	while (mpu_dmp_init())
  {
    HAL_Delay(200);
  }
	printf("Successfully initialized!\r\n");
	/*
   *iic读取器件ID ,测试IIC能否使用,测试一下
   */
	printf ("Ready to read the ID\r\n");
  uint8_t recv = 0x00;
  HAL_I2C_Mem_Read(&hi2c1, (0x68 << 1), 0x75, I2C_MEMADD_SIZE_8BIT, &recv, 1, 0xfff);
  if (recv == 0x68)
  {
    printf("mpu6050 ID Read: OK at 0x68\r\n");  //成功
  }
  else
  {
    printf("Err mpu id:0x%x\r\n", recv);   //失败
  }
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		while(mpu_dmp_get_data(&pitch, &roll, &yaw) != 0);  //获取欧拉角的参数
		printf("%f,%f,%f\r\n", pitch, roll, yaw); 					//打印到串口上
		
		HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

  • 16
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值