STM32---IIC通信协议(含源码,小白进)

本文介绍了STM32的IIC通信协议,包括其基础概念、协议信号、时序及相关驱动代码。还介绍了AT24C02存储器,包括其基础信息、读写时序和驱动步骤。最后进行程序设计,通过按键控制AT24C02读写数据,并在LCD显示信息,强调要熟悉IIC时序并动手操作代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:在前面的学习过程中,我们学习了串口通信的USART(通用同步异步收发器),本节我们将继续学习一种串行通信协议——IIC通信协议。之前我使用51单片机也分享过相关的IIC通信的知识,其实本质的知识是相通的,本节我们继续探讨STM32关于IIC的基础知识。

一、IIC总线协议介绍

1.1基础介绍

常见的通信协议有:串口、SPI、IIC、CAN以及USB

IIC:集成电路总线,是一种同步、串行、半双工通信总线;

同步:含有时钟线SCL;串行:数据的传输是一位一位传送的;半双工:单方向发、单方向收;

什么是总线?什么又是协议呢?

        这其实是一种说法,总线就是从硬件层面看,是传输数据的通道,协议是从软件层面看,是传输数据的规则。总线就好比是一条道路,而协议是通过这条道路的交规。

IIC总线的特点:

1、总线由数据线 SDA 和时钟线 SCL 构成的串行总线,数据线用来传输数据,时钟线用来
同步数据收发。并且都接有上拉电阻,保证总线在空闲状态为高电平。

2、总线支持多设备连接,允许多主机并存,每个设备都有属于自己的设备地址,所以我们只需要知道器件的地址,根据时序就可以实现微控制器与器件之间的通信。

3、连接到总线上的数目受总线的最大电容400pf限制,(寄生电容)每个设备都有电容;

4、数据的传输速率:

标准模式:100kbit/s;快速模式:400kbit/s;高速模式:3.4Mbit/s;

IIC协议:

三个信号:起始信号、停止信号与应答信号;

两个注意:数据的有效性;数据的传输顺序;

一个状态:空闲状态;

         I2C两设备进行通信的流程为:首先主机控制总线,通过总线时序找到想要通信的从设备(每个从设备都有固定地址),被选中的从机准备发送/接收收据,未被选中的从机打开上述开关,断绝同总线的联系。主机与从机传递数据,如果传递1直接打开开关通过上拉电阻实现总线高电平,如果传递0关闭开关,使总线达到低电平主从机设备传递信息严格遵循相应的时序。

1.2 IIC协议

下图为:IIC协议的时序图:

其中主要为 1、起始信号;2、终止信号;3、应答信号;4、数据有效性;5、

数据传输;6、空闲状态;

1、起始信号与终止信号

 

起始条件:SCL高电平期间,SDA从高电平切换到低电平;

结束条件:SCL高电平期间,SDA从低电平切换到高电平;

2、应答信号

应答条件:在上拉电阻的影响下,SDA默认为高电平,而从机拉低SDA表示收到信号即(ACK),若没有收到则不用拉低(NACK);发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,应该释放SDA);

3、数据收发

        数据在低电平期间准备好,高电平期间数据发送(高电平期间保持有效),数据先发送高8、位,数据以8位(1bit)为一个单位进行发送。数据在SCL高电平期间,保持稳定,主句发送完数据释放数据线,不影响从机的应答;

1.3相关驱动代码:

起始信号
void iic_start(void)

{

        IIC_SDA(1);

        IIC_SCL(1);

        iic_delay();

        IIC_SDA(0);

        iic_delay();

        IIC_SCL(0);

        iic_delay()

}

 停止信号

void iic_stop(void)

{

        IIC_SDA(0);

        iic_delay();

        IIC_SCL(1);

        iic_delay();

        IIC_SDA(1);

        iic_delay();

}

发送应答信号

void iic_ack(void)

{

        IIC_SCL(0);

        iic_delay();

        IIC_SDA(0);

        iic_delay();

        IIC_SCL(1);

        iic_delay();

}

发送非应答信号

void iic_nack(void)

{

          IIC_SCL(0);

          iic_delay();

          IIC_SDA(0);

          iic_delay();

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值