历史上的今天
今天是:2025年12月14日(星期日)
2022年12月14日 | STM32 IIC实验讲解,从入门到放弃。
2022-12-14 来源:zhihu
一、IIC
IIC是什么?
IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、 IC 与 IC 之间进行双向传送, 高速 IIC 总线一般可达 400kbps 以上。这种总线类型是由飞利浦半导体公司(后被NXP收购)在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。多主多从的通讯协议。所以 它是半双工通信方式。 关于通信方式,可以查阅我的另一篇博文:STM32串口实验,从入门到放弃。
优点一:简单性和有效性。

优点二:多主控

IIC串行总线有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址(这个在后面有用)。
一般情况下,数据线SDA和时钟线SCL都是处于上拉电阻状态(在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平)。
IIC协议
开始之前,我们先了解一下下面的部分:
①空闲状态
②开始信号
③停止信号
④应答信号
⑤数据有效性
⑥数据的传输
空闲状态
总线的空闲状态规定为:IIC总线的SDA和SCL两条信号线同时为高电平。此时的各个期间的输出及场效应均处于截至状态,即释放总线,由两条信号线各自将上拉电阻把电平拉高。
开始信号和停止信号
开始信号:当SCL线是高电平时,SDA线从高电平向低电平跳变,开始传送数据。(注意:启动信号是一种电平跳变时序信号,而不是一个电平信号。)

停止信号:当SCL线是高电平时, SDA 由低电平向高电平跳变,结束传送数据。(注意:停止信号也是一种电平跳变时序信号,而不是一个电平信号。)


应答信号(ACK)
发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。

数据有效性
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
即:数据在SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。

数据传输
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。

IIC总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(地址通过物理接地或者拉高),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。
也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。

拿24C02举例

A0,A1,A2为器件地址线,WP为写保护引脚,SCL,SDA为二线串行接口,符合I2C总线协议。


写字节的时序:

读字节的时序:

关于延时时间

史海拾趣
|
这是一本难得的中文教程,详细介绍了该软件的使用方法和过程,是学习Power-PCB软件的好教材。 下载地址:https://bbs.eeworld.com.cn/thread-68637-1-1.html… 查看全部问答> |
|
BOOL IncomingBarPWndProc (HWND hwnd, UINT uimessage, WPARAM wParam, LPARAM lParam) { BOOL bResult = FALSE; LPCTSTR ...… 查看全部问答> |
|
不知道为什么我刚买的清华紫光的U盘插到电脑上就自动运行并且打开了U盘 但是在我同学电脑上不出现这个问题,而其他人的U盘在我的电脑也不出现问题! 请问这个问题是怎么造成的?? 怎解决呢?? 谢谢!!~… 查看全部问答> |
|
我做1V电压的交流采样,并进行ADC变换。最低电压约为-1.414.我叠加了1.65的直流,现在最低电压就差不多0.235左右。最高电压约3.064左右。参考电压是3.3的,但是转换结果怎么会有0000和FFF?不能解释啊。。。。请高手指导… 查看全部问答> |
|
谈谈430中ADC10四种通道采样的问题,希望能对大家有所帮助 起始对于ADC10四种通道采样的问题,如何操作ADC10,我想大家应该都知道,不知道的就去看手册吧。对于大多数人来说,就像我自己,最大的困难就是如何取值,ADC10中自带一个DTC可以不借助CPU而自动传值,但是传到RAM里的值如何读出来输入到引脚上,这 ...… 查看全部问答> |




