• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

23.2.1-编写MPU6050初始化 FreeRTOS 项目 FreeRTOS学习笔记

02/17 08:54
751
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

联系方式.txt

共1个文件

[相关器件] RZ/G2L

64-bit 1.2GHz Arm® Cortex-A55 Dual Core MPU with 3D Graphics and Video Codec Engine LFBGA-551pin

这个是全网最详细的STM32项目教学视频。
第一篇CSDN文章在这里在这里:
75


STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随

V3:HAL库开发、手把手教学下面功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、openmv视觉控制、电磁循迹、FreeRTOS、K210视觉智能车(更新中)、K230视觉智能车(更新中)、MSPM0G3507视觉智能车(更新中)

在这里插入图片描述

23.2.1-编写MPU6050初始化

前面代码我们都把6050代码注释掉了,是因为MPU605代码有循环容易卡死。我们增加多次循环后就退出,这样就不会卡死了。

复制23-1_LED_FreeRTOS的代码,然后命名23-2_LED_FreeRTOS

我们把之前注释掉的MPU6050初始化代码修改成最多初始化3次,3次都不能初始化成功就退出并且串口一和蓝牙打印。初始化函数返回值。

这个初始化在main.c里面

在这里插入图片描述

//  while(MPU_Init()!=0);//初始化MPU6050模块的MPU 注意初始化阶段不要移动小车
  for(uint8_t i = 0; i < 3 ; i++)
	{
		uint8_t mpu_init_result = MPU_Init(); // 保存函数返回值
		if(mpu_init_result == 0)//初始化成功
		{
			printf("In main.c:MPU_Init() was initialized successfullyn");//串口1 输出初始化成功 注意! 这个要写再串口1初始化之后	
			sprintf((char*)Usart3String, "In main.c:MPU_Init() was initialized successfullyrn");//蓝牙输出 初始化成功
		  HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const  char  *)Usart3String),50);//阻塞式发送通过串口三输出字符 strlen:计算字符串大小	
			break;
		}
		if(i == 3-1 )//说明初始化失败
		{
			printf("In main.c:MPU_Init() failed to initialize last return value: %dn", mpu_init_result);//串口1 输出初始化失败 注意! 这个要写再串口1初始化之后 初始化失败及最后一次返回值
			sprintf((char*)Usart3String, "In main.c:MPU_Init() failed to initialize last return value: %dn", mpu_init_result);//蓝牙输出 初始化失败
		  HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const  char  *)Usart3String),50);//阻塞式发送通过串口三输出字符 strlen:计算字符串大小
		}
	}
//  while(mpu_dmp_init()!=0);//mpu6050,dmp初始化
  for(uint8_t i = 0; i < 3 ; i++)
	{
		uint8_t mpu_dmp_init_result = mpu_dmp_init();
		
		if(mpu_dmp_init_result == 0)//初始化成功
		{
			printf("In main.c:mpu_dmp_init() was initialized successfullyn");//串口1 输出初始化成功 注意! 这个要写再串口1初始化之后	
			sprintf((char*)Usart3String, "In main.c:mpu_dmp_init() was initialized successfullyrn");//蓝牙输出 初始化成功
		  HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const  char  *)Usart3String),50);//阻塞式发送通过串口三输出字符 strlen:计算字符串大小
			break;
		}
		if(i == 3-1 )//说明初始化失败
		{
			printf("In main.c: mpu_dmp_init() failed to initialize, last return value: %dn", mpu_dmp_init_result);//串口1 输出初始化失败 注意! 这个要写再串口1初始化之后
			sprintf((char*)Usart3String, "In main.c: mpu_dmp_init() failed to initialize, last return value: %dn", mpu_dmp_init_result);//蓝牙输出 初始化成功
		  HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const  char  *)Usart3String),50);//阻塞式发送通过串口三输出字符 strlen:计算字符串大小
		}
	}

然后我们修改一下OLED显示任务的内容,循环读取20次数据如果都失败就退出循环

注意这里设置读取次数不能太少,测试发现小于5次会经常读取失败

OLED显示的任务需要读取MPU605数据
在这里插入图片描述

		for(uint8_t i = 0; i < 20 ; i++)
		{
			if(mpu_dmp_get_data(&pitch,&roll,&yaw) == 0)//获得MPU6050数据成功
			{
				printf("mpu_dmp_get_data() Data for successn");//串口1 输出数据获取成功 注意! 这个要写再串口1初始化之后		
			  break;
			}
						
			if(i == 20-1 )//i已经等于(20-1)次 还没有退出循环说明 说明输出读取失败
			{
				printf("mpu_dmp_get_data()  Data acquisition failuren");//串口1 输出数据获取失败 注意! 这个要写再串口1初始化之后	
			}
		}

再修改一下模式5 里面获得MPU6050数据的部分
在这里插入图片描述

					//获得6050数据
			//如果6050无法获得正确数据,可以连接串口1 查看相关输出
			//这里的总体
			for(uint8_t i = 0; i < 20 ; i++)
			{
				if(mpu_dmp_get_data(&pitch,&roll,&yaw) == 0)//获得MPU6050数据成功
				{
					printf("mpu_dmp_get_data() Data for successn");//串口1 输出数据获取成功 注意! 这个要写再串口1初始化之后		
					break;
				}
							
				if(i == 20-1 )//i已经等于(20-1)次 还没有退出循环说明 说明输出读取失败
				{
					printf("mpu_dmp_get_data()  Data acquisition failuren");//串口1 输出数据获取失败 注意! 这个要写再串口1初始化之后	
				}
			}

23.2.2-测试MPU6050和角度控制

具体演示测试见视频

 

  • 联系方式.txt
    下载
点赞
收藏
评论
分享
加入交流群
举报

相关推荐