IIC代码波形对照详解

这篇具有很好参考价值的文章主要介绍了IIC代码波形对照详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

IIC简介

IIC(Inter-Integrated Circuit)是一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线,属于半双工同步传输类型总线。IIC总线是非常常见的数据总线,仅仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。

(随便百度了一下,相关介绍资料较多,就不赘述了。)

推荐看这一篇 “ IIC通信协议”-- 白码王子小张

通信过程中的几种状态

  1. 开始 IIC_Start()

从协议的角度来说,当时钟信号(SCK)处于高电平时,数据线(SDA)产生下降沿,表示开始通信。

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

如上图所示,在时钟线处于高电平时,数据线下降沿代表开始信号。

结合C语言代码

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

在开始通信前,先将时钟线、数据线所对应的IO口,配置成输出模式。

设置时钟线和数据线为高电平,延时4微妙后,拉低数据线,产生下降沿,表示通信开始。

在产生开始信号后,延时4微妙,拉低时钟线,准备发送或接受和数据。

  1. 发送 IIC_Write_Byte()

传输数据时,每一位数据都有一个时钟脉冲相对应,即在SCL串行时钟的配合下,在SDA上逐位地传送每一位数据。进行数据传输时,在SCL的高电平期间SDA上的电平必须保持稳定,只有在SCL为低电平期间,才允许SDA上的电平改变状态。即数据在SCL的上升沿到来之前就必须准备好,并在下降沿到来之前保持稳定。

(详情请阅读这篇文章 -->)

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

结合实际电平信号图可以看到,数据线的电平变换在时钟线的低电平期间,而在时钟线的高电平期间都处于稳定状态。正好印证了上面有关传输数据时的协议规定。

结合C语言代码

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

结合IIC_Start()函数,在发送第一个数据前,SCL已经处于低电平状态,此状态可以变换数据线的数据(高低电平)。

  1. 在发送数据之前,要保证时钟线处于低电平,数据线 IO 处于输出状态

  1. 将 1 字节的数据,具体化为八个时钟周期内连续的高低电平。

落实到具体的代码逻辑就是 (&)按位与 和(<<)左移。

比如,要发送的数据为 0xA0 ,转换成二进制 即 1010 0000 b

而发送都是从高位先开始发送,即发送顺序为1、0、1、0、0、0、0、0。

结合实际代码 0xA0 先左移 0 位 然后 和 0x80进行 按位与 操作

(1010 0000) & (1000 0000) = 1 & 1 = 1

如果 左移 后的 按位与 操作的结果为 1 就将 SDA置为 高电平 否则 SDA拉低。

3.数据发送完成后将 时钟线拉低

  1. 等待回复IIC_Wait_Ack()

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

结合代码来说

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

首先,开始读取前,将数据线 IO 设置成输入模式,准备读取从机的回复信号。

用while()一直等待,当收到从机低电平信号时,表示从机应答成功,否则继续等待。

等待超过205次后,返回应答超时停止等待,发送停止信号,结束通信。

  1. 接收IIC_Read_Byte()

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

从实际电平信号图看,发送数据和接收数据的逻辑是完全一样的。

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

从代码来说,也没啥特别需要注意的,就是在读取之前将数据线IO设置为输入。

就是为了使波形更加标准,对延时的数值进行了微调,使实际的时钟波形都在8us左右。

  1. 停止IIC_Stop()

在SCL保持高电平期间,SDA被释放,由低电平转变为高电平,产生上升沿,称为I2C总线的停止信号,标志着一次数据传输的终止。

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

结合代码

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

发送结束信号前,先将数据线和时钟线拉低。

先拉高时钟线,延时4us后,拉高数据线,产生上升沿,发送结束信号。

发送结束信号后将数据线和时钟线都设为输入模式。

  1. 发送回复IIC_Send_Ack()

发送回复是在主机接受完一帧(字节)数据后,回应从机,表示这一帧(字节)数据接收完毕,继续发送下一帧(字节)数据。

实际波形如下图

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

结合代码和图片来说

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档
  1. 发送不回复IIC_NoAck()

发送不回复是在主机接完最后一帧(字节)数据后,回应从机,表示这一帧(字节)数据接收完毕,停止数据接收。IIC_NoAck() 后面紧跟的是 IIC_Stop()信号。

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

代码和波形图基本和 IIC_ACK() 是一致的,只是数据线一直处于高电平没有拉低。

iic 波形,单片机,嵌入式硬件,开源协议,51单片机,stm32,Powered by 金山文档

C语言代码分享

示例工程还未整理,后面准备出一个STM32F103 和 屏幕通讯的示例工程。

阿里网盘: 阿里云盘分享文章来源地址https://www.toymoban.com/news/detail-704159.html

到了这里,关于IIC代码波形对照详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32单片机初学5-IIC通信驱动OLED屏幕

    在我上篇文章(STM32-软件模拟IIC通信)讲解了软件模拟IIC通信。这篇文章详将细讲解利用软件模拟IIC来控制0.96寸的OLED屏幕(如下图),使其显示字符串。本文将不再对IIC通信原理做详细讲解,所以对IIC通信原理不熟悉的话可以参考我上篇文章(点击上面的链接直接跳转)。

    2023年04月10日
    浏览(15)
  • 【51单片机】EEPROM-IIC实验(按键控制数码管)

    目录   🎁I2C总线 ​编辑 🎁代码 🏳️‍🌈main.c 🏳️‍🌈i2.c 🎆代码分析   I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根 数据线SDA 用于收发数据,一根 时钟线SCL 用于通信

    2024年02月11日
    浏览(19)
  • 基于51单片机+SHT30设计的环境温度与湿度检测设备(IIC模拟时序)

    当前文章介绍基于51单片机和SHT30传感器设计的环境温度与湿度检测设备。设备采用IIC模拟时序通信协议,能够实时监测环境的温度和湿度,并将数据通过LCD显示屏显示出来;可以广泛应用于室内环境监测、气象观测、农业温室监测等领域。 在本项目中,使用了51单片机作为主

    2024年02月13日
    浏览(11)
  • 6、单片机与AT24C02的通讯(IIC)实验(STM32F407)

    IIC简介 I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。 IIC是半双工通信方式。 多主机

    2024年02月20日
    浏览(23)
  • 单片机课程设计波形发生器

    怎么说呢,前面半个月被这个单片机课程设计搞得焦头烂额的,再加上运气属实有点“好”,就脾气有点“暴躁”,好的,也就骂了半天的脏话。有一说一,没有素质确实舒服。 好了,事情目前是过去了,那就好好回顾一下遇到的问题,以及找到了怎样的解决方案,和最后仍

    2024年02月09日
    浏览(22)
  • 单片机实验——简易波形发生器设计

    波形发生器广泛地应用于电子和通信等领域,是应用最广泛的电子仪器之一,本设计用51单片机以及DAC0832实现基本波形的输出,参考电路如下: 可以产生方波、三角波、正弦波、锯齿波等波形,用仿真的示波器查看。 用4个按键分别控制输出相应波形。 利用C51设计程序完成以

    2024年02月12日
    浏览(20)
  • 51单片机入门教程(4)——波形发生器

    目录 1、总述 2、系统硬件设计  3、系统软件设计思路  3、测试与分析 (1)Proteus仿真测试 (2)直流稳压电源测试 (3)实物测试 该篇为51单片机入门教程的实战篇 ,本篇介绍了以51单片机和DAC0832数模转换芯片为核心的波形发生器,并对DAC0832和UA741的结构和工作原理以及电

    2024年02月08日
    浏览(17)
  • 基于51单片机的DAC0832波形发生器

    输出1HZ正弦波、三角波、方波、锯齿波 使用LCD1602显示 DAC0832的D0~D7数据输入口,IOUT1、IOUT2互补输出口,RFB反馈端口、 VREF基准电压值(一般是5V)。用定时器控制段码表输出速度来控制波形的频率。 (定时数值)*10^(-6)*256=波形频率。 ( 1 )锯齿波的实现原理:   锯齿波的实现

    2024年02月06日
    浏览(62)
  • 51单片机“密码锁”代码详解

    注:此代码一经过验证,读者不必怀疑其正确性,如果烧录进去没有反应,请自行检查引脚端口配置,以及仔细分析代码实现原理。倘若能静下心来分析代码,一定能受益匪浅。 废话不多说,,直接上代码。如有问题,请下方评论并私信我,收到后一定及时回复!     功能

    2024年02月08日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包