1,介绍协议规则,用软件模拟的形式来实现协议。
2,介绍外设,用硬件来实现协议。
I²C通信协议
基本目的:通过通信线,实现单片机读写外挂模块寄存器的功能。(在指定位置写寄存器和在指定位置读寄存器)
SCL:时钟线(随时暂停传输,去处理其他事)即使没有硬件电路的支持,也可以很方便的用软件手动反转电平来实现通信。
本课程只用:一主多从。
I²C硬件电路 
所有I²C设备的SCL连接一起,SDA连在一起。
设备的SCL和SDA均要配置成开漏输出模式(这个模式有一个线与的现象,只要有一个设备输出低电平,总线就处于低电平)
I²C时序基本单元(虚线表示是从线控制,实线表示是主机控制)
起始:SCL不动,主机让SDA产生一个下降沿,然后主机让SCL下降 ( 之后保证除了起始和终止条件,每个时序单元都以低电平开始 低电平结束 )(当从机捕获到这个状态时:从机复位,等待召唤) 终止:略
发送一个字节:在SCL高电平,期间读取SDA的电平(很快一般在上升沿就读完了)(SCL和SDA全程被主机掌控 , 从机只能被动读取)
高位先行:B7B6B5B4B3B2B1B0 (串口时序是低位先行)
如果进入中断:因为有时钟线(同步时序)SCL和SDA被无线拉长等回来时继续,传输不会有问题
接收一个字节:释放SDA让从机写入.
发送接收应答:略。
I²C完整时序
从机地址
MPU6050的器件地址位1101 000(一般地位可以改变)板子上的AD0引脚可以改变地址的最后一位。
指定地址写 
应答位:主机释放SDA(只看主机SDA为高),从机拽住SDA(从机收到拉低SDA) 低电平表示
收到了
当前地址读
当前地址指针:写入一个数据后,当前地址指针会自动加一。
指定地址读
读的时候:结束时要吧SA置1,表示主机不想玩了,从机放出SDA线的控制权给主机。
将 指定地址写 的前面设置指定地址 和 当前地址读 结合起来。
外挂模块MPU6050
MPU6050简介
MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景
3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度
3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度
MPU6050参数
16位ADC采集传感器的模拟信号,量化范围:-32768~32767
加速度计满量程选择:±2、±4、±8、±16(g)
陀螺仪满量程选择: ±250、±500、±1000、±2000(°/sec)
可配置的数字低通滤波器
可配置的时钟源
可配置的采样分频
I2C从机地址:
1101000(AD0=0)
1101001(AD0=1)
两种选择从机地址:一 0110 1000 = 0x68 二 110 1000 + 读写位 = 0xD0(写地址)or 0xD1(读地址)
MPU6050硬件电路
XCL,XDA:扩展。
MPU6050框图
手册25页有详细说明。
看寄存器和产品手册。
寄存器了解
软件I²C实例
略
硬件I²C
• STM32 内部集成了硬件 I2C 收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻 CPU 的负担• 支持多主机模型• 支持 7 位 /10 位地址模式• 支持不同的通讯速度,标准速度 ( 高达 100 kHz) ,快速 ( 高达 400 kHz)• 支持 DMA• 兼容 SMBus 协议•• STM32F103C8T6 硬件 I2C 资源: I2C1 、 I2C2
发送
接收
I2C寄存器描述 看参考手册 24 章 I2C接口 的 24.6