datasheet

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

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

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

推荐阅读

STM32 Systick定时器在实现1us延时时的问题与解决

问题:使用systick_config()函数来实现计数,这个函数在下面代码中的 SysTick_CTRL_TICKINT_Msk 开启了中断。不论系统时钟为72Mhz或36Mhz若设置STM32每10us进入一次中断,计时是可以的;而每1us进入中断,由于中断指令较多,那么程序就会困在中断里出不来。static __INLINE uint32_t SysTick_Config(uint32_t ticks){   if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);           
发表于 2019-07-17

stm32 ADC知识总结(二)

关于STM32的ADC的一些重要特点需要记住: 1)STM32F103系列至少有2个ADC,这些ADC可以独立使用,也可以使用双重模式(提高采样率); 2)STM32的ADC是12位逐次逼近型的模数转换器,一共有18个通道,可以测量16个外部信号和2个内部信号源; 3)每个通道的ADC可以在单次、连续、扫描或者间断模式下进行; 4)前面讲过STM32的ADC是12位的,结果存储在16位的数据寄存器中,有4位用不到,所以ADC存在左对齐或右对齐的方式; 5)模拟看门狗允许应用程序检测输入电压是否超出用户定义的高低阈值; 6)STM32的ADC最大的转换速率为1MHz
发表于 2019-07-17
stm32 ADC知识总结(二)

stm32f070 stop 模式 rtc定时启动调试总结

stm32f070 stop 模式 rtc定时启动调试总结。1.在进stoop模式之前一定对gpio进行配置。/* GPIO Ports Clock Enable */__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOF_CLK_ENABLE();/Configure GPIO pins : GPIO_PIN_All/GPIO_InitStruct.Pin = GPIO_PIN_All;GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;GPIO_InitStruct.Pull = GPIO_NOPULL
发表于 2019-07-17

RTC_WakeUp中断唤醒STM32F4停止模式

RTC_WakeUp唤醒STM32F4停止模式(借鉴的是原子哥写的代码): 首先我们先初始化RTC配置://RTC初始化u8 MyRTC_Init(void){    RTC_InitTypeDef RTC_InitStructrue;    u16 retry=0x1FFF;    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR时钟    PWR_BackupAccessCmd(ENABLE);//使能后备寄存器    if
发表于 2019-07-17

关于stm32stop模式下,串口唤醒中的问题及解决办法

首先讲一下应用场景:STM32F1 + HAL库+ Freertos ,STOP模式下利用串口引脚唤醒。stop mode 处理内容如下:1,配置所有引脚为模拟输入(参考官方代码)2,配置串口接收引脚为外部中断3,进入stop mode4,初始化串口等外设现象:第一次从stop模式唤醒时串口能正常通信,判断一段时间后无数据则再一次进入stop mode,然后再一次唤醒,此时串口无法输出。最后发现原因是串口重新初始化时HAL_UART_Init()函数中会判断if(huart->State == HAL_UART_STATE_RESET),此时才会执行HAL_UART_MspInit(huart),配置串口IO口。解决办法
发表于 2019-07-17

STM32开发笔记1: STM32F407时钟配置

单片机型号:STM32F407    本文讲解STMF407时钟的使用及其配置方法。        1、STM32F407的分类        a、LSI是低速内部时钟,RC震荡器,频率为32KHz左右。供独立看门狗和自动唤醒单元使用。        b、LSE是低速外部时钟,接频率为32.768KHz的石英晶体。这个主要是RTC的时钟源。        c、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围
发表于 2019-07-17
STM32开发笔记1: STM32F407时钟配置

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved