2. MPU6050模块 您所在的位置:网站首页 stm32i2c接口的作用 2. MPU6050模块

2. MPU6050模块

2024-04-23 13:35| 来源: 网络整理| 查看: 265

2.5.2. 硬件STM32-MPU6050例程介绍¶

初始化硬件I2C

本实验中的I2C驱动与MPU6050驱动分开主要是考虑到扩展其它传感器时的通用性,如使用磁场传感器、气压传感器都可以使用同样一个I2C驱动, 这个驱动只要给出针对不同传感器时的不同读写接口即可。关于STM32的I2C驱动原理请参考野火STM32教程《零死角玩转STM32》中读写EEPROM的章节, 本章讲解的I2C驱动主要针对接口封装讲解,细节不再赘述。本实验中的I2C硬件定义在 bsp_i2c.h 中,具体如下,这些宏根据传感器使用的I2C硬件封装起来了。

bsp_i2c.h(霸道开发板例程)¶ 1 2 3 4 5 6 7 8 9 10 /**************************I2C参数定义,I2C1或I2C2********************************/ #define SENSORS_I2Cx I2C1 #define SENSORS_I2C_APBxClock_FUN RCC_APB1PeriphClockCmd #define SENSORS_I2C_CLK RCC_APB1Periph_I2C1 #define SENSORS_I2C_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd #define SENSORS_I2C_GPIO_CLK RCC_APB2Periph_GPIOB #define SENSORS_I2C_SCL_PORT GPIOB #define SENSORS_I2C_SCL_PIN GPIO_Pin_6 #define SENSORS_I2C_SDA_PORT GPIOB #define SENSORS_I2C_SDA_PIN GPIO_Pin_7

接下来利用这些宏对I2C进行初始化,初始化过程与I2C读写EEPROM中的无异,见如下,

bsp_i2c.c¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 static void I2C_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 使能与 I2C1 有关的时钟 */ SENSORS_I2C_APBxClock_FUN ( SENSORS_I2C_CLK, ENABLE ); SENSORS_I2C_GPIO_APBxClock_FUN ( SENSORS_I2C_GPIO_CLK, ENABLE ); /* PB6-I2C1_SCL、PB7-I2C1_SDA*/ GPIO_InitStructure.GPIO_Pin = SENSORS_I2C_SCL_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; // 开漏输出 GPIO_Init(SENSORS_I2C_SCL_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SENSORS_I2C_SDA_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; // 开漏输出 GPIO_Init(SENSORS_I2C_SDA_PORT, &GPIO_InitStructure); } /** * @brief I2C 工作模式配置 * @param 无 * @retval 无 */ static void I2C_Mode_Configu(void) { I2C_InitTypeDef I2C_InitStructure; /* I2C 配置 */ I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; /* 高电平数据稳定,低电平数据变化 SCL 时钟线的占空比 */ I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 =I2Cx_OWN_ADDRESS7; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable ; /* I2C的寻址模式 */ I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; /* 通信速率 */ I2C_InitStructure.I2C_ClockSpeed = I2C_Speed; /* I2C1 初始化 */ I2C_Init(SENSORS_I2Cx, &I2C_InitStructure); /* 使能 I2C1 */ I2C_Cmd(SENSORS_I2Cx, ENABLE); }

MPU6050的寄存器定义

MPU6050有各种各样的寄存器用于控制工作模式,我们把这些寄存器的地址、寄存器位使用宏定义到了 mpu6050.h 文件中了,代码如下。

mpu6050.h¶ 1 2 3 4 5 6 7 8 9 10 11 //模块的A0引脚接GND,IIC的7位地址为0x68,若接到VCC,需要改为0x69 #define MPU6050_SLAVE_ADDRESS (0x68


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有