STM32HAL库驱动MPU6050

news/2024/11/24 13:56:45/

STM32HAL库驱动MPU6050

STM32CubeMX配置

System Core->RCC->HSE->Crystal/Ceramic Resonator

System Core->SYS->Debug->Serial Wire

Connectivity->I2C1->I2C->I2C

image-20230404212050219

这里使用PB6/PB7分别作为IIC1的SCL时钟线/SDA数据线,可以分别设置Label SCL和SDA

Connectivity->USB->Device(FS)

Middleware->USB_DEVICE->Class For FS IP->Communic ation Device Class (Virtual Port Com)

Clock Configuration->To USB 48MHz

image-20230404212427285

GENERATE CODE

CLion移植

本次编译器使用CLion,若为Keil5/STM32CubeIDE等同理

下载文件移植MPU6050的文件夹

Inc-dmpKey.h-dmpmap.h-inv_mpu.h-inv_mpu_dmp_motion_driver.h-mpu6050.h
Src-inv_mpu.c-inv_mpu_dmp_motion_driver.c-mpu6050.c

image-20230404213508231

然后重新加载CMake项目

修改主要将i2c.c的宏定义 hi2c1更改到mpu6050.c;

//-----i2c.c--------
I2C_HandleTypeDef hi2c1;
//-----mpu6050.c----
uint8_t MPU_Init(void)
{ uint8_t res;extern I2C_HandleTypeDef hi2c1;HAL_I2C_Init(&hi2c1);MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);  MPU_Set_Gyro_Fsr(3);            MPU_Set_Accel_Fsr(0);            MPU_Set_Rate(50);                  MPU_Write_Byte(MPU_INT_EN_REG,0X00); MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);  MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);    MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80); res=MPU_Read_Byte(MPU_DEVICE_ID_REG);if(res==MPU_ADDR){MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01);    MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00);    MPU_Set_Rate(50);                 }else return 1;return 0;
}

编译如果没有找到有关mpu6050的文件,则修改CMakeLists.txt中包含MPU6050的头文件

image-20230404213934080

main.c

int main(void)
{/* USER CODE BEGIN 1 */float pitch,roll,yaw;         //欧拉角short aacx,aacy,aacz;        //加速度传感器原始数据short gyrox,gyroy,gyroz;      //陀螺仪原始数据float temp;                    //温度HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_I2C1_Init();MX_USB_DEVICE_Init();/* USER CODE BEGIN 2 */MPU_Init();mpu_dmp_init();while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */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();                                  //得到温度信息usb_printf("roll:%.2f  pitch:%.2f  yaw:%.2f\r\n", roll, pitch, yaw);//串口1输出采集信息}/* USER CODE END 3 */
}

串口显示

由于本次软件环境为Ubuntu下,所以使用串口软件CuteCom

Windows下可以使用XCOM

下载CuteCom

sudo apt-get install cutecom

输入命令打开

cutecom

查看串口

ls /dev/tty*

找到串口号,这里虚拟串口为/dev/ttyACM0

image-20230404214640314

添加权限

sudo chmod 777 /dev/ttyACM0

CuteCom显示MPU6050消息,翻滚角/俯仰角/偏航角

image-20230404214905151


http://www.ppmy.cn/news/527517.html

相关文章

异核通信框架(1)——SMP和AMP架构

0.前言 我是菜鸡,很久没有发表文章了。老样子,今天推荐一本书《局外人》。别像主人公似的认为任何事情都没有意义。 目录 1. SMP和 AMP架构 1.1 同构和异构 1.1.1 同构 1.1.2 异构 1.2 SMP和AMP 1.2.1 对称多处理结构(SMP) 1.2.2 非对称多处理…

OPC DA的DCom配置

目录 一、OPC DA的Dcom配置文档 1.1、OPCDA的DCOM配置PDF文档下载 1.2、DCOM在线参考配置(英文版) 二、配置OPC DA准备内容 2.1、说明 2.2、OPC运行库 三、配置OPC DA操作流程 3.1、创建用户并赋予访问权限 3.2、修改操作系统 Firewall&#xf…

STM32 HAL库编写MPU6050输出六轴原始数据, 移植DMP输出自身姿态角,欧拉角

--------------------------------------------------------- 记录自学过程 ------------------------------------------------------------- 可能有些说明不对的地方,请大家提出来,共同解决 .共同学习 .共同进步. | 程序链接(主函数读取版) | 程序链接…

六轴加速陀螺仪MPU6500/MPU6050使用及DMP库移植,含记步器功能

本篇博客为博主学习使用MPU6500完成后的学习记录,故在这只做主要讲解,如有博友看完后仍不知如何使用,可在下方留言问我,或发邮件问我(dayou1024qq.com),因邮件有QQ和微信提示,故我能…

hdl_graph_slam三维激光雷达+GPS+IMU+ODOM

系统ubuntu16.04 源代码位置参考:https://github.com/koide3/hdl_graph_slam 知乎里的算法解析说的很详细:https://zhuanlan.zhihu.com/p/89014435 hdl_graph_slam是由日本风桥科技大学的Kenji Koide在github上开源的六自由度三维激光SLAM算法。主要由…

OMAPL138EZCED4E

OMAPL138EZCED4E 规格 产品属性 制造商:Texas Instruments 产品种类:数字信号处理器和控制器 - DSP, DSC RoHS: 详细信息 产品:DSPs 系列:OMAP-L138 商标名:OMAP 安装风格:SMD/SMT 封装 / 箱体:PBGA-361 核心:ARM926EJ-S, C674x 内核数量:2 Core 比较大时钟频率:456 MHz, 456 M…

ov5640摄像头驱动的开发过程

对于在Linux下OV5640摄像头驱动开发的过程。 硬件连接电路设计 (1)OMAP4 通过 CSI2 接口连接 OV5640 传感器(MIPI 标准),使用三组差分信 号,其中一组差分传送时钟,另两组差分传送数据信号。一…

ap module omap4460

http://gitorious.org/ap-module-omap4460 DashboardRegisterLoginActivitiesProjectsTeams</