如何将STM32软件I2C读写MPU6050教程(15)完整掌握?

摘要:STM32入门——软件I2C读写MPU6050(15) #include "stm32f10x.h"Device header #include "Del
STM32入门——软件I2C读写MPU6050(15) #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "MPU6050.h" uint8_t ID; // 定义用于存放ID号的变量 int16_t AX, AY, AZ, GX, GY, GZ; // 定义用于存放各个数据的变量 int main(void) { /*模块初始化*/ OLED_Init(); // OLED初始化 MPU6050_Init(); // MPU6050初始化 /*显示ID号*/ OLED_ShowString(1, 1, "ID:"); // 显示静态字符串 ID = MPU6050_GetID(); // 获取MPU6050的ID号 OLED_ShowHexNum(1, 4, ID, 2); // OLED显示ID号 while (1) { MPU6050_GetData(&AX, &AY, &AZ, &GX, &GY, &GZ); // 获取MPU6050的数据 OLED_ShowSignedNum(2, 1, AX, 5); // OLED显示数据 OLED_ShowSignedNum(3, 1, AY, 5); OLED_ShowSignedNum(4, 1, AZ, 5); OLED_ShowSignedNum(2, 8, GX, 5); OLED_ShowSignedNum(3, 8, GY, 5); OLED_ShowSignedNum(4, 8, GZ, 5); } } #include "stm32f10x.h" // Device header #include "Delay.h" /* 引脚配置层 */ /** * 函 数:I2C写SCL引脚电平 * 参 数:BitValue 协议层传入的当前需要写入SCL的电平,范围0~1 * 返 回 值:无 * 注意事项:此函数需要用户实现内容,当BitValue为0时,需要置SCL为低电平,当BitValue为1时,需要置SCL为高电平 */ void MyI2C_W_SCL(uint8_t BitValue) { GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue); // 根据BitValue,设置SCL引脚的电平 Delay_us(10); } /** * 函 数:I2C写SDA引脚电平 * 参 数:BitValue 协议层传入的当前需要写入SDA的电平,范围0~1 * 返 回 值:无 * 注意事项:此函数需要用户实现内容,当BitValue为0时,需要置SDA为低电平,当BitValue为1时,需要置SDA为高电平 */ void MyI2C_W_SDA(uint8_t BitValue) { GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValue); // 根据BitValue,设置SDA引脚的电平,BitValue要实现非0即1的特性 Delay_us(10); } /** * 函 数:I2C读SDA引脚电平 * 参 数:无 * 返 回 值:协议层需要得到的当前SDA的电平,范围0~1 * 注意事项:此函数需要用户实现内容,当前SDA为低电平时,返回0,当前SDA为高电平时,返回1 */ uint8_t MyI2C_R_SDA(void) { uint8_t BitValue; BitValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11); // 读取SDA电平 Delay_us(10); // 延时10us,防止时序频率超过要求 return BitValue; // 返回SDA电平 } /** * 函 数:I2C初始化 * 参 数:无 * 返 回 值:无 * 注意事项:此函数需要用户实现内容,实现SCL和SDA引脚的初始化 */ void MyI2C_Init(void) { /*开启时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 开启GPIOB的时钟 /*GPIO初始化*/ GPIO_InitTypeDef GPIO_Init
阅读全文