STM32-(19):I2C通信(理论基础)

上一篇:STM32-(18):SPI与数码管(SPI)下一篇:STM32-(20):I2C通信(实验:读写EEPROM)

I2C BUS是Philips公司推出的一种基于两线的芯片间串行传输总线。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。

I2C总线在标准模式下,数据传输率可达100kbps,高速模式下可达400kbps。目前 I2C 总线被广泛应用于消费了电子产品、通信产品、仪器仪表及工业测控系统中。

在I2C总线上只需要串行数据SDA线和串行时钟线SCL线两条线。

每个器件都有一个唯一的地址以供识别,并工作在主模式或者从模式下,而且各器件都可以作为一个发送器或接收器。

微控制器包含的I2C 发送/接收器都可以选择作为主模式( Master )或从模式( Slave )工 作。但任一时刻 I2C 总线上只允许一个微控制器工作在主模式下,作为主控器;而另一个微控制器必须工作在从模式下,作为被控器。
在这里插入图片描述
注:作为主模式,必须内部有时钟,以产生波特率,任何时候只有两个之间进行通信。

I2C总线的特点

1.二线传输
2.无中心主机
3.软件寻址
4.应答式数据传输过程(好处:保证传输过程中数据的稳定和可靠)
5.节点可带电接入或撤出(大概是热插拔的意思)

I2C数据传输

传输的第一个8位数据为寻址字节,包括7位的被控器地址和1位方向位,接着被控器发出A (应答位),紧接着的是主控器与被控器之间数据传输和应答。在数据传输完成后,主控器要发出停止信号。

数据传输格式如图:
在这里插入图片描述

分析:在总线上,SCL和SDA是开漏输出,会接上拉电阻,所以空闲的时候是高电平(即开始信号之前),在SCL处于高电平器件,发现SDA的电平由高到低跳变,即产生开始信号;在SCL处于高电平器件,发现SDA的电平由低到高跳变,即产生停止信号;这中间,SCL电平会变化,一般来说,SCL产生上升沿,发送方发送数据,接收方接收数据,SCL产生下降沿时,发送方开始修改SDA上的数据。第9位为应答位,发送方会将SDA总线线释放,由接收方产生应答,SDA总线默认是高电平,若接收方有应答,会强制拉低电平,表示有应答,即应答位低电平有效。

STM32的I2C模块

介绍:
I2C总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式,同时与SMBUS2.0兼容。

I2C总线有多种用途,包括CRC码的生成和校验、MBus(System Management Bus)、PMBus(Power Management Bus)。

根据特定设备的需要,可以使用DMA以减轻CPU的负担。

特点:
1、 I2C主设备功能
一产生时钟
一产生起始和停止信号
2、 I2C从设备功能
一可编程的丨2C地址检测
一可响应2个从地址的双地址能力
一停止位检测
3、 状态标志:
一发送器/接收器模式标志
一字节发送结束标志
一 I2C总线忙标志
4、 错误标志
一主模式时的仲裁丢失
一地址/数据传输后的应答(ACK)错误
—检测到起始和停止错位
一禁止拉长时钟功能后的上溢或下溢

I2C接口可以下述4种模式中的一种运行

  • 从发送器模式
  • 从接收器模式
  • 主发送器模式
  • 主接收器模式

默认模式为从模式。接口在生成起始条件后自动从从模式切换到主模式;当仲裁丢失或产生停止信号,则从主模式切换到从模式。
在这里插入图片描述
在这里插入图片描述
分析:数据往DR寄存器内丢,也可以从DR寄存器读取,当发生一些错误的时候,访问状态寄存器,根据不同的状态在软件中进行不同的操作。
注:DR寄存器实际上有两个,一个用于发送,一个用于接收,物理上是分开的,不会互相干扰。

比较重要的寄存器简介:

I2C_SR1

在这里插入图片描述
在这里插入图片描述
位7:判断寄存器是否为空,当寄存器为空时,才能继续发送。若不为空,说明DR寄存器内数据还没发完,需要继续等待。
在这里插入图片描述
在这里插入图片描述

主模式下的发送流程:

在这里插入图片描述
在这里插入图片描述

分析:
①首先发送一个S位,起始条件。然后会出现一个事件EV5,若发送成功,SB位置1,然后读SR1寄存器的这个位,当这个SB位为1时再将SR1寄存器的地址写入DR寄存器就会清除因该位置1而产生的事件。
②发送一个8位的地址。一个总线上可能有多个器件,首先你得确认你要跟那个器件进行通信,若有应答,就会产生EV6事件,ADDR置1,表示地址发送成功,EV8_1事件,TxE置1,将发送寄存器清空
③发送数据Data。当获得应答A,既然获得应答,肯定发送成功,会产生EV8,TxE置1,清除该事件,以便发送后面新的数据。
④发送停止信号P停止位
注:各种事件的产生改变了 SR 状态寄存器相应的位

主模式下的接收流程:

在这里插入图片描述

I2C库函数

在这里插入图片描述
在这里插入图片描述

上一篇:STM32-(18):SPI与数码管(SPI)下一篇:STM32-(20):I2C通信(实验:读写EEPROM)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值