STM32-(19):I2C通信(理论基础)

发布者:敬亭山人最新更新时间:2019-08-12 来源: eefocus关键字:STM32  I2C通信  读写EEPROM 手机看文章 扫描二维码
随时随地手机看文章

I2C BUS是Philips公司推出的一种基于两线的芯片间串行传输总线。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。

I2C总线在标准模式下,数据传输率可达100kbps,高速模式下可达400kbps。目前 I2C 总线被广泛应用于消费了电子产品、通信产品、仪器仪表及工业测控系统中。

在I2C总线上只需要串行数据SDA线和串行时钟线SCL线两条线。

每个器件都有一个唯一的地址以供识别,并工作在主模式或者从模式下,而且各器件都可以作为一个发送器或接收器。

微控制器包含的I2C 发送/接收器都可以选择作为主模式( Master )或从模式( Slave )工 作。但任一时刻 I2C 总线上只允许一个微控制器工作在主模式下,作为主控器;而另一个微控制器必须工作在从模式下,作为被控器。
在这里插入图片描述
注:作为主模式,必须内部有时钟,以产生波特率,任何时候只有两个之间进行通信。

I2C总线的特点

1.二线传输
2.无中心主机
3.软件寻址
4.应答式数据传输过程(好处:保证传输过程中数据的稳定和可靠)
5.节点可带电接入或撤出(大概是热插拔的意思)

I2C数据传输

传输的第一个8位数据为寻址字节,包括7位的被控器地址和1位方向位,接着被控器发出A (应答位),紧接着的是主控器与被控器之间数据传输和应答。在数据传输完成后,主控器要发出停止信号。

数据传输格式如图:
在这里插入图片描述

分析:在总线上,SCL和SDA是开漏输出,会接上拉电阻,所以空闲的时候是高电平(即开始信号之前),在SCL处于高电平器件,发现SDA的电平由高到低跳变,即产生开始信号;在SCL处于高电平器件,发现SDA的电平由低到高跳变,即产生停止信号;这中间,SCL电平会变化,一般来说,SCL产生上升沿,发送方发送数据,接收方接收数据,SCL产生下降沿时,发送方开始修改SDA上的数据。第9位为应答位,发送方会将SDA总线线释放,由接收方产生应答,SDA总线默认是高电平,若接收方有应答,会强制拉低电平,表示有应答,即应答位低电平有效。

STM32的I2C模块

介绍:
I2C总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式,同时与SMBUS2.0兼容。

I2C总线有多种用途,包括CRC码的生成和校验、MBus(System Management Bus)、PMBus(Power Management Bus)。

根据特定设备的需要,可以使用DMA以减轻CPU的负担。

特点:
1、 I2C主设备功能
一产生时钟
一产生起始和停止信号
2、 I2C从设备功能
一可编程的丨2C地址检测
一可响应2个从地址的双地址能力
一停止位检测
3、 状态标志:
一发送器/接收器模式标志
一字节发送结束标志
一 I2C总线忙标志
4、 错误标志
一主模式时的仲裁丢失
一地址/数据传输后的应答(ACK)错误
—检测到起始和停止错位
一禁止拉长时钟功能后的上溢或下溢

I2C接口可以下述4种模式中的一种运行

  • 从发送器模式

  • 从接收器模式

  • 主发送器模式

  • 主接收器模式

默认模式为从模式。接口在生成起始条件后自动从从模式切换到主模式;当仲裁丢失或产生停止信号,则从主模式切换到从模式。
在这里插入图片描述
在这里插入图片描述
分析:数据往DR寄存器内丢,也可以从DR寄存器读取,当发生一些错误的时候,访问状态寄存器,根据不同的状态在软件中进行不同的操作。
注:DR寄存器实际上有两个,一个用于发送,一个用于接收,物理上是分开的,不会互相干扰。

比较重要的寄存器简介:

I2C_SR1

在这里插入图片描述
在这里插入图片描述
位7:判断寄存器是否为空,当寄存器为空时,才能继续发送。若不为空,说明DR寄存器内数据还没发完,需要继续等待。
在这里插入图片描述
在这里插入图片描述

主模式下的发送流程:

在这里插入图片描述
在这里插入图片描述

分析:
①首先发送一个S位,起始条件。然后会出现一个事件EV5,若发送成功,SB位置1,然后读SR1寄存器的这个位,当这个SB位为1时再将SR1寄存器的地址写入DR寄存器就会清除因该位置1而产生的事件。
②发送一个8位的地址。一个总线上可能有多个器件,首先你得确认你要跟那个器件进行通信,若有应答,就会产生EV6事件,ADDR置1,表示地址发送成功,EV8_1事件,TxE置1,将发送寄存器清空
③发送数据Data。当获得应答A,既然获得应答,肯定发送成功,会产生EV8,TxE置1,清除该事件,以便发送后面新的数据。
④发送停止信号P停止位
注:各种事件的产生改变了 SR 状态寄存器相应的位

主模式下的接收流程:

在这里插入图片描述

I2C库函数

在这里插入图片描述
在这里插入图片描述


关键字:STM32  I2C通信  读写EEPROM 引用地址:STM32-(19):I2C通信(理论基础)

上一篇:STM32-(18):SPI与数码管(SPI)
下一篇:STM32-(20):I2C通信(实验:读写EEPROM)

推荐阅读最新更新时间:2024-11-09 18:52

stm32下载的问题
原因是JTAG已经被占用,当然不能再用JTAG操作啦!此时要保证CPU不进入正常运行状态,才能使用JTAG。 解决方案:options for target ---- Debug---- 右上方---- use 后面的setting按钮------ 左上方Ort下面的JTAG变为SW即可 改成
[单片机]
<font color='red'>stm32</font>下载的问题
STM32的SPI接收卡死问题
调试时在调用如下SPI函数时,发现以下两个问题: 1、如果在第三行语句while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);处设断点,将会卡死在这个while语句内,并导致看门狗复位; 2、全速运行,会触发看门狗复位程序,程序只调用spi,无中断,确定为spi导致,SPI速率由16M降至2M,则短时内不见复位; uint8_t SPI2_SendOneByte(uint8_t u8Data)//SPI2发送一字节 { /* 等待发送缓冲区为空, TXE 事件 */ while (SPI_I2S_GetFlagStatus(SPI2, SPI_
[单片机]
STM32单片机中Hex、Bin文件的区别及应用详解
STM32、51等单片机程序经过编译后,生成的hex文件、bin文件,它们都是单片机烧写文件,本文介绍它们的区别与应用。Hex文件Keil5中生成hex文件的配置 如上图,分别点击“魔术棒”-“Output选项卡”,勾选“Create HEX File”选项,确认即可。STM32CubeIDE中生成hex文件的配置 如上图,先用鼠标点击选中项目名,之后点击菜单栏“File”-“Properties”。 如上图红框处,依次点击“C/C++ Build”-“MCU Post build outputs”,勾选“Convert to Intel Hex file”,应用并关闭窗口。 hex烧写用ISP方式烧写程序,首先找来I
[单片机]
<font color='red'>STM32</font>单片机中Hex、Bin文件的区别及应用详解
STM32——GPIO设置:快速点亮第一个LED灯
简介 不同的开发板的原理图结构也不尽相同,笔者在这里使用野火的MINI-V3(F103VET6)简易开发板对GPIO口的设置做一个简单的介绍,并实现按键控制LED灯的亮灭。方便读者可以快速熟悉并灵活应用。 原理图分析 首先我们来看一下发光二极管部分和按键部分的原理图。 下面是按键的原理图部分: 在这里,我们将使用KEY1(PA0)来控制红灯PB5的亮灭。由原理图可知,其控制LED灯的PB5引脚为低电平时,灯亮。当KEY1按下时,PA0引脚由之前的低电平转为高电平(3V3)。明确了目的之后我们就可以分析GPIO口并进行设置了。 GPIO设置 经过上述的功能明确之后,我们将其分为两大类,分别是输入类(如按键)和
[单片机]
<font color='red'>STM32</font>——GPIO设置:快速点亮第一个LED灯
STM32复习笔记(四)串口通信
一、常见的串行通信接口: 二、STM32的串口通信接口: UART:通用异步收发器 USART:通用同步异步收发器 大容量STM32F10x系列芯片,包含3个USART和2个UART 三、UART异步通信方式引脚连接方法: -RXD:数据输入引脚。数据接受。 -TXD:数据发送引脚。数据发送。 四、UART异步通信方式引脚: -RXD:数据输入引脚。数据接受。 -TXD:数据发送引脚。数据发送。 五、UART异步通信方式特点: 全双工异步通信。 分数波特率发生器系统,提供精确的波特率。 -发送和接受共用的可编程波特率,最高可达4.5Mbits/s 可编程的数据字长度(8位或者
[单片机]
<font color='red'>STM32</font>复习笔记(四)串口<font color='red'>通信</font>
STM32 死在 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
移植官方STM32虚拟串口程序,串口通信死在 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); 仿真发现USART1时钟味使能。。。 使能时钟后仿真,USART1寄存器有反应,发送数据是仍死在 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); 上网寻找答案无果。怀疑引脚未配置造成。 配置 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
[单片机]
STM32 串口详解
01、USART的特点 USART是通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx和Tx)就可以完成通信过程,因此也称为异步串行通信。 全双工异步通信。 小数波特率发生器系统,提供精确的波特率。 可配置的16倍过采样或8倍过采样,因而为速度容差与时钟容差的灵活配置提供了可能。 可编程的数据字长度(8位或者9位); 可配置的停止位(支
[单片机]
<font color='red'>STM32</font> 串口详解
编译STM32错误之一:Error: L6218E: Undefined symbol TIM_Cmd
注意要包含头文件:#include stm32f10x_tim.h 还有要把stm32f10x_tim.c加进工程。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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