极速赛车手机官网

STM32总结之I2C协议

2019-07-13来源: eefocus关键字:STM32  I2C协议  物理层

一、I2C物理层



   I2C总线有如下特点:


   1。在一个I2C总线中,可以连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。


   2.一个I2C总线只使用2条总线线路,一条为双向串行数据线SDA,一条串行时钟线SCL。


数据线用来传输数据,时钟线用于数据同步。


   3.每个连接到总线上的设备都有一个独立的地址,通讯主机可以用这个地址进行不同


设备之间的访问。


   4.总线通过上拉电阻连接到电源。当I2C设备空闲时,会输出高阻态(意思是既不输出


高电平,也不输出低电平),而当所有设备都空闲时,都输出高阻态,由上拉电阻把总线


拉成高电平。   


   5。多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定哪个设备占用总线。


   6.具有三种传输模式:标准模式,传输速率为100Kbit/s


                                      快速模式,传输速率为400Kbit/s


                                      高速模式,传输速率为3.4Mbit/s(目前大多数I2C设备尚不支持)


   7.连接到相同总线的IC数量受到总线的最大电容400pF限制。


二、I2C协议层


   I2C总线协议如下:


   1。只有在总线空闲时,才允许启动数据传送。


极速赛车手机官网   2.在数据传送过程中,当时钟线为高电平时,数据线须保持稳定状态,不允许随意跳变。


时钟线为高电平时,数据线任何电平的跳变都被看做总线的起始或停止信号。


   起始信号:时钟线保持高电平,数据线电平由高到低的跳变作为I2C总线的起始信号。


   停止信号:时钟线保持高电平,数据线电平由低到高的跳变作为I2C总线的停止信号。   


   应答信号ACK和非应答信号NACK:传输时主机产生时钟,在传输完一个字节的数据后,


数据发送端将SDA的电平置高后释放SDA的控制权,在第9个时钟时,由数据接收端控制SDA。


若此时接收端将SDA电平置高,表示非应答信号NACK,若此时接收端将SDA电平置低,


则表示应答信号ACK。


   数据有效性:I2C使用SDA信号线来传输数据,使用SCL信号线进行数据同步。SDA信号线


极速赛车手机官网在SCL的每个时钟周期传输一位数据。传输时,SCL为高电平时SDA数据有效,即:此时SDA


为高电平表示数据“1”,SDA为低电平,表示数据“0”’。当SCL为低电平时,数据接收方不对SDA


上的电平进行采集,在这个时候,发送方可以进行SDA电平的切换,为下一比特数据的传输做好


准备。



   地址及数据方向:I2C协议规定, 设备地址可以是7位或10位(一般7位就够了)。紧跟


设备地址的一个数据位用来表示数据传输方向,它是数据方向位,第8位或第11位。数据


方向位为1时表示主机由从机读数据,为0时表示主机向从机写数据。



响应:响应包括应答信号ACK和非应答信号NACK。作为数据接收端,无论主机从机,接收


到一个字节的数据后,若希望对方继续发送数据,则需要向对方发送ACK信号。发送方在


收到接收方发送的ACK信号后,才继续发送下一个字节的数据。若接收方希望结束数据传输,


则向发送方发送NACK信号,发送方接收到该信号后,先发送一个停止信号,然后结束这次数据传输。


停止数据传输时,主机必须向从机发送一个停止信号,不论是主机收到ACK后还是收到NACK后,


只要是结束数据传输,主机必须向从机发送一个停止信号。



    如果我们直接控制STM32的2个GPIO引脚,分别用作SCL和SDA,按照上述信号


的时序要求,输出时像控制LED灯那样,输入时则读取SDA电平,就可以实现I2C


的通讯。由于直接控制GPIO引脚电平产生I2C通信时序,需要由CPU控制每个时刻


的引脚状态,所这种软件模拟协议的方式,也称为“模拟I2C”。


   相对的,还有硬件控制的方式。STM32的I2C片上外设专门负责实现I2C通信协议。



关键字:STM32  I2C协议  物理层

编辑:什么鱼 引用地址:http://news.1900222.com/mcu/ic467660.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)
下一篇:stm32中的i2c协议编程

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm32内存管理分配

bss段:   bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。  bss是英文Block Started by Symbol的简称。  bss段属于静态内存分配。   data段:  数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。  数据段属于静态内存分配。   text段:  代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。  这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写
发表于 2019-08-24

STM32端口配置

的。5、推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。6、开漏输出:输出端相当于三极管的集电极。要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。7、复用输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。端口必须配置成复用功能输出模式(推挽或开漏)。在STM32中选用IO模式,下面是参考网上的总结一下。(1)GPIO_Mode_AIN 模拟输入---应用ADC模拟输入,或者低功耗下省电(2)GPIO_Mode_IN_FLOATING 浮空输入
发表于 2019-08-24
STM32端口配置

STM32按键的短按/长按/双击

上一篇文章已经写好了定时器,并且实现了按键长按。现在狭隘的用一下:https://mp.weixin.qq.com/s?__biz=MzUyOTM0NDkyMA==&mid=2247484014&idx=1&sn=b07bde8a1d5b15467b2c80dfd7ae3547&chksm=fa633299cd14bb8f8e9334282059930bafabf44dfcf502b0a39b7f30326268f8574acc0b0ccf&mpshare=1&scene=23&srcid=0606fxjOEkyOf9zu21GHV78G#rd//⑥外部中断 2 服务程序
发表于 2019-08-24

STM32按键长短按:超强移植性,回调函数按键处理机制

松开是高电平。 1.3 软件设计1.构造按键参数结构体typedef void (*keyCallBackFuction)(void);  //定义回调函数指针__packed typedef struct{    uint8_t          keyNum;          //按键编号    uint32_t         keyRccPeriph;    //按键时钟   
发表于 2019-08-24

极速赛车手机官网stm32中按键长短按实现方法

主函数中扫描该函数即可,需要注意按键按下时程序会停留在该函数中,知道松手或时间到0.8s,大于0.8秒为长按,小于为短按,可以自己根据需要修改,初始化函数因板子而异,这里就不列出来了u8 KEY_N; //在头文件中声明一下外部变量,用于主函数中判断哪个按键按下u8 KEY_Scan(void) //返回值temp代表按键按下的时间(=temp*10 MS){ static u8 flag=1; u8 temp=0; if(flag==1) {   if(KEY1_IN==0) //下面四个按键相似操作 { flag=0; while(KEY1_IN==0&&temp<85
发表于 2019-08-24

stm32中非阻塞式多按键状态检测函数

,会返回一个长按状态之后还会有个短按状态。在检测函数上,我暂时还没有想到解决方法,不过可以在按键处理时,加上上个状态位一起判断即可。具体代码如下:void   key_handle(){     static uint32_t key_press_time=0;      static uint32_t key_laststate ;         uint8_t key_nowstate ;     uint8_t handle_flag=0; 
发表于 2019-08-24
stm32中非阻塞式多按键状态检测函数

小广播

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD。com。cn, Inc。 All rights reserved
极速赛车APP 极速赛车APP下载 极速赛车双面盘 极速赛车手机版下载 极速赛车手机官网 极速赛车APP下载 极速赛车双面盘 极速赛车APP 极速赛车手机版下载 极速赛车APP