第五章 stm32 cubemx 软件I2C实验以及EEPROM的使用理论及实验过程
目录
前言
本章将讲解stm32通讯协议中的IIC协议,利用cubeMX完成软件和硬件IIC的实现,并结合实验数据,给人更为深刻的体验。
我们结合IIC的具体协议和逻辑分析仪得到的具体实验数据理解IIC协议。
IIC概述
I2C通讯协议是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
llC: Inter Integrated Circuit,集成电路总线,是一种同步串行半双工通信总线。其中同步说明这种通信方式需要时钟线;串行说明数据一位一位(一个字节8位即0000 0000)在一个数据线上朝一个方向发送;半双工说明一个时间只能进行接收或者发送;总线就是传输数据的通道,如果有多个设备想使用总线进行传输数据多个都需要挂载在总线上,注意在总线上可以有多个主机,多个从机;协议则是传输数据的规则,首先我们讲解该协议。
IIC物理层
如图所示,即位IIC的物理层,由图可明显看到所有的设备挂载在,两条l2C总线下,一条双向串行数据线(SDA)用来传递数据,一条串行时钟线(SCL)用于数据收发同步。总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
要点
- IIC总线协议是一个支持多设备的总线。在一个l2C通讯总线中,如图,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。
- 多个设备并不是指无限多个,连接到相同总线的IC数量要受到总线的最大电容400pF限制。
- 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的通信。
- 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
- 具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为400kbit/s,高速模式3.4Mbit/s,但目前大多/2C设备尚不支持高速模式。
IIC协议层
I2C协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。接下来我们将逐个进行实验。
IIC读写概述
主机写入到从机的基本过程,如图所示。由主机发出起始信号表示开始通信,然后发送从机地址及数据传输方向,然后释放总线(总线上有上拉电阻,总线拉高即为释放总线)交给从机,得到从机应答ACK或非应答NACK,紧接着进行数据的接收或者数据传输的终止。
实验结果
结果如图所示。
接下来进行具体讲解,各个信号如何产生、代码实现、实验反馈。
起始、停止信号及代码
理论说明
如图所示
-
起始:当SCL线是高电平时,SDA线从高电平向低电平切换。
-
停止:当SCL是高电平时,SDA线由低电平向高电平切换。
代码实现
代码如下(示例):
void I2C_SCL_1()//SCL电平拉高
{
HAL_GPIO_WritePin(GPIO_PORT_I2C, I2C_SCL_PIN, GPIO_PIN_SET);
}
void I2C_SCL_0()
{
HAL_GPIO_WritePin(GPIO_PORT_I2C, I2C_SCL_PIN, GPIO_PIN_RESET);
}
void I2C_SDA_1()
{
HAL_GPIO_WritePin(GPIO_PORT_I2C, I2C_SDA_PIN, GPIO_PIN_SET);
}
void I2C_SDA_0()
{
HAL_GPIO_WritePin(GPIO_PORT_I2C, I2C_SDA_PIN