stm32中i2c之学习浅谈

最新更新时间:2019-04-02来源: eefocus关键字:stm32  I2C 手机看文章 扫描二维码
随时随地手机看文章

       首先介绍下自己的学习背景,博主本人是在上周刚入门stm32并且学习gpio口基本用法和中断的介绍。在这样的知识储备下我开始学习I2c通信协议,并尝试编写了师兄布置的一个小任务。


     1.1.  I2C总线物理结构 


      首先介绍下i2c通信协议,从物理层上来看这是一种非常简洁明了的通信协议。本身一共就两条总线,一条SCL(时钟总线),一条SDA(数据总线)。通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。硬件图如下:



1.2  I2C总线特征

    I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主从设备之间就通过这 个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。

    I2C总线上可挂接的设备数量受总线的最大电容400pF 限制,如果所挂接的是相同型号的器件,则还受器件地址位的限制。

    I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。

    I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。


1.3  I2C总线协议

    I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生。总线在空闲状态 时,SCL和SDA都保持着高电平,当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件;当SCL为高而SDA由低到高的跳变,表示产生一个 停止条件。在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备 将释放总线,总线再次处于空闲状态。如图所示:



    在了解起始条件和停止条件后,我们再来看看在这个过程中数据的传输是如何进行的。前面我们已经提到过,数据传输以字节为单位。主设备在SCL线上产生每个 时钟脉冲的过程中将在SDA线上传输一个数据位,当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位, 此时才认为一个字节真正的被传输完成。当然,并不是所有的字节传输都必须有一个应答位,比如:当从设备不能再接收主设备发送的数据时,从设备将回传一个否 定应答位。数据传输的过程如图所示:


  


    在前面我们还提到过,I2C总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前 要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来 数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。如图所示:



1.4  I2C总线操作

            对I2C总线的操作实际就是主从设备之间的读写操作。大致可分为以下三种操作情况:

   第一,主设备往从设备中写数据。数据传输格式如下:

  

 


    第二,主设备从从设备中读数据。数据传输格式如下:

    


       第三,主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。数据传输格式如下:



       其实以上关于I2C的详细介绍都大同小异,而且一般介绍都比较详细充分,我建议初学者只要提炼主要的有效信息就可以。初学者想要进一步了解还是要结合具体程序来分析,所以下一篇博客我将详细介绍下I2C应用程序的编写。

关键字:stm32  I2C 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/2019/ic-news040243691.html

上一篇:一个stm32的I2C比较通俗易懂的入门例程
下一篇:stm32 I2C自收发测试例程

推荐阅读

STM32 SPI硬件模式
反复试验,发现SPI_NSS引脚的自动硬件控制与想象的不同,无论是否外加上拉,只要一使能SPI,SPI_Cmd(SPI1, ENABLE); SPI_NSS引脚就一直处于低电平,直到SPI_Cmd(SPI1, DISABLE);这个需要用程序来控制。  而用过其他芯片则是发送完成自动会拉高,这点是要注意的我说的就是做主机的时候SPI_SSOutputCmd(SPIx,ENABLE) 在soft模式时这句话有必要吗?我的理解是当hard模式,需要multimaster的时候,才应该要开启这个output功能,这点从我的截图上可以看出。我觉得,这里只要把SPI_InitStructure
发表于 2022-02-21
<font color='red'>STM32</font> SPI硬件模式
STM32 timer input filter
STM32的定时器输入通道都有一个滤波单元,分别位于每个输入通路上(下图中的黄色框)和外部触发输入通路上(下图中的兰色框),它们的作用是滤除输入信号上的高频干扰。具体操作原理如下:在TIMx_CR1中的CKD[1:0]可以由用户设置对输入信号的采样频率基准,有三种选择:1)采样频率基准fDTS=定时器输入频率fCK_INT2)采样频率基准fDTS=定时器输入频率fCK_INT/23)采样频率基准fDTS=定时器输入频率fCK_INT/4然后使用上述频率作为基准对输入信号进行采样,当连续采样到N次个有效电平时,认为一次有效的输入电平。实际的采样频率和采样次数可以由用户程序根据需要选择;外部触发输入通道的滤波参数在从模式控制寄存器(TI
发表于 2022-02-21
<font color='red'>STM32</font> timer input filter
关于STM32影子寄存器和预装载寄存器和TIM_ARRPreloadConfig
本文的说明依据STM32参考手册(RM0008)第10版:英文:http://www.st.com/stonline/products/literature/rm/13902.pdf中译文:http://www.stmicroelectronics.com.cn/stonline/mcu/images/STM32_RM_CH_V10_1.pdf在STM32参考手册的第13、14章中,都有一张定时器的框图,下面是第14章中定时器框图的局部,图中黄色框所示的是auto-reload register,在下面的第14.3.2节"Counter Modes"就解释了auto-reload register的用法。在图中可
发表于 2022-02-21
关于<font color='red'>STM32</font>影子寄存器和预装载寄存器和TIM_ARRPreloadConfig
stm32 Fdts
发表于 2022-02-21
<font color='red'>stm32</font> Fdts
STM32定时器输出比较模式
OCx与OCxREF和CCxP之间的关系初学STM32,我这个地方卡了很久,现在终于有些明白了,现在把我的理解写下与大家共享,如果有不对的地方,还请指出。-----------------------------------------------------------------------------------------------------------------------TIM_OCMode选择定时器模式。该参数取值见下表:TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //设置跳变值,当计数器计数到这个值时,电平发生跳变TIM_OC2PreloadConfig(TIM3, TI
发表于 2022-02-18
<font color='red'>STM32</font>定时器输出比较模式
stm32库函数学习篇
两天学习了一下stm32通用定时器的输入捕获功能。在网上看到很多网友说触发中断程序进不了,于是自己也测试了个小程序,还好能够进入中断。呵呵~ 实现功能:PA8随意延时驱动led灯闪烁,并且将PA8用杜邦线连接到PA7口,PA7是通用定时器TIM3的2通道,在TIM3_CH2触发中断程序中取反连接到PD2口的led灯,指示中断程序运行,并且每次进入中断后改变触发捕获的极性。实现两个led灯会交替闪烁。 先有必要了解stm32定时器的输入触发模块,如下图:需要注意的是,一眼望去一个定时器似乎有8个通道,左边四个,右边四个,但其实左边和右边是共用相同的IO引脚,所以名称标注是一模一样。也就是说,每个通用定时器都只有四个
发表于 2022-02-18
<font color='red'>stm32</font>库函数学习篇
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved