目录
开发环境:
wins 10家庭版;
keil 5 编辑器;
开发板与其它资源:
51/52系列单片机板;->>模拟I/O高低电平,进行软件模拟IIC协议
STM32F4系列板;-->使用内置的IIC控制器,直接读取硬件传输的高低电平,硬件模拟IIC协议
AT24C02芯片;
为了验证代码可行性,建议使用串口(串口助手打印数据也很容易)或者显示屏(LCD1602比较容易)进行显示数据;
IIC数据手册;-->链接放在我上传的资源(需要进我的主页找),需要使用可以下载(几个积分);
注意点:
STM32代码部分,适用于STM32F4系列板,其它板能不能用不知道,没有进行测试,但代码思路的没有问题的;
51/52代码部分,适用于C51/52,S51/52板,其它系列板能不能用不知道,没测试;
一、什么是IIC-->从硬件方面理解
Inter IC BUS,简称(又称I2C总线)IIC;
I2C总线的意思是“完成集成电路或功能单元之间信息交换的规范或协议”。Philips公司推出的I2C总线采用一条数据线(SDA),加一条时钟线(SCL)来完成数据的传输及外围器件的扩展;对各个节点的寻址是软寻址方式,节省了片选线,标准的寻址字节SLAM为7位,可以寻址127个单元。------>在同一个数据线(SDA)传输数据,故为半双工通信。
I2C总线有三种数据传输速度:标准,快速模式和高速模式。标准的是100Kbps,快速模式为400Kbps,高速模式支持快至3.4Mbps的速度。所有的与次之传输速度的模式都是兼容的。I2C总线支持7位和10位地址空间设备和在不同电压下运行的设备。
硬件电路总线图:

主机与从机连接在SDA与SCL线上,当需要进行通信时,一个设备发送寻址到总线,每一个设备都会收到该地址,符合该地址的设备返回应答,返回应答的设备在本次通信的过程是从机,发送寻址到总线在本次通信过程是主机;
进行发送寻址的设备是主机,寻址位有7位,故理论上最多可以存在2^7个从机;
二、解析时序图->完成代码逻辑(软件方面理解)
2.1、完整的发送数据过程

技术文档:
Every byte put on the SDA line must be eight bits long. The number of bytes that can betransmitted per transfer is unrestricted. Each byte must be followed by an Acknowledgebit. Data is transferred with the Most Significant Bit (MSB) first . If a slave cannot receive or transmit another complete byte of data until it has performed some other function, for example servicing an internal interrupt, it can hold the clock line SCL LOW to force the master into a wait state. Data transfer then continues when the slave is ready for another byte of data and releases clock line SCL.
理解:
放在SDA线上的每个字节必须是8位长,每次传输字节大小不受限制,每次传输1个字节必须有一个应答,数据传输先从最高有效位(MSB)开始,当从机接收不到完整数据时(1个字节),可以强制主机进行等待,当主机能继续传输时(且从机准备就绪),数据继续传输,传输结束释放总线SCL;
2.2、开始条件
时序图如下图2:

图2
技术文档:A HIGH to LOW transition on the SDA line while SCL is HIGH defines a START condition.
理解:在SCL线维持高电平时,SDA线从高电平跳变到低电平
51/52单片机代码逻辑:
给SCL,I/O口;
给SDA,I/O口;
开始函数(void)
{
SDA高电平;
SCL维持在高电平;
SDA跳变到低电平;
释放SCL(为下一阶段做准备);
}
STM32代码逻辑:

本文围绕IIC协议展开,介绍了开发环境和资源,从硬件方面解释IIC概念,从软件方面解析时序图完成代码逻辑,包括发送数据过程、开始与终止条件等。还阐述了通讯步骤,并给出51/52和STM32F4系列开发板的IIC代码及使用示例。
1817

被折叠的 条评论
为什么被折叠?



