各位朋友们大家好~今儿我们来了解一下STM32G070的IIC。
首先,对于以前学过单片机或者接触过STM32F1的小伙伴们来说,IIC其实并不陌生。IIC最标准的写法应该是写作“IIC”,但通常我们也可以见到在某些材料中也写作I2C,或者I2C,这不重要,谁还没几个外号呢。当这些名称出现的时候,我们知道他指的是什么就OKK了。下面简单的回顾一下。
IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,它引脚少,硬件实现简单,可扩展性强,不需要 USART、 CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
接下来,我们简单看一下IIC总线上主从设备之间的连线图,如下图1所示。
图1 IIC总线主从设备之间的连线图
由图可以看出,首先IIC总线有两条线,一条SCL用来同步收发双方的时钟,一条SDA用来传输数据。时钟线SCL和数据线SDA之间按照一定的时序相互配合,就可以完成数据的传输工作。
其次,IIC总线上,可以有N个主机,以及N个从机(此图中只画了一个主机,实际上是可以多主机的),多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线 。同时我们可以看到,这两根线均通过了一个上拉电阻接到了VCC,这保证了在没有通信请求的时候,也就是IIC设备空闲的时候,对外呈现高阻态,当总线上所有的设备都空闲的时候,则上拉电阻会将空闲的总线拉成高电平。当有设备需要请求通信时就会将SDA总线由高拉低,打破当前高电平的平衡,造一个起始信号表明我要开始通信啦~具体起始信号的时序,我们下文中会详细讲解。
同时,我们可以从图中看到,这两根线上挂的设备不止一个,每个连接到总线的设备,都有一个独立的地址,主机就可以利用这些地址,去寻找不同的设备,完成对他们的通信了。总线上最多能挂多少个设备呢?一般来说,从机地址可以是7位或10位来表示,如果按照7位来算,总线上最多可以挂载128个设备,如果用10位来算,那么总线上则理论上能挂载1024个设备了。不过通常由于硬件上的局限性,比如总线所能承受的最大电容400pF这一限制条件,因此总线上最多能挂载的设备数量一般来说是远小于理论值的。具体还需要看设备自身的等效电容值来计算。
另外,由总线的结构我们也可以看出,真正传输数据的只有一根线SDA,因此IIC的通信方式属于半双工,也就是说同一个时间只能向一个方向进行通信。
对于传输的速度,有三种:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式。