stm32专题十六:IIC(二)stm32 IIC通讯过程 标志位

最新更新时间:2021-10-22来源: eefocus关键字:IIC  通讯过程  标志位 手机看文章 扫描二维码
随时随地手机看文章

1 IIC进入主模式的步骤:


在主模式时,I 2 C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止条件结束。当通过START位在总线上产生了起始条件,设备就进入了主模式。


以下是主模式所要求的操作顺序:

● 在I2C_CR2寄存器中设定该模块的输入时钟以产生正确的时序

● 配置时钟控制寄存器

● 配置上升时间寄存器

● 编程I2C_CR1寄存器启动外设

● 置I2C_CR1寄存器中的START位为1,产生起始条件


2 作为主机发送器时的传送时序图

主发送器发送流程及事件说明如下:

(1) 控制产生起始信号(S),当发生起始信号后,它产生事件“EV5”,并会对 SR1 寄存器的“SB”位置 1,表示起始信号已经发送;


 EV5事件:

(2) 紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及“EV8_1”,这时 SR1 寄存器的“ADDR”位及“TXE”位被置 1,ADDR 为 1 表示地址已经发送,TXE为 1 表示数据寄存器为空;


EV6事件:

EV8_1事件

(3) 以上步骤正常执行并对 ADDR 位清零后,我们往 I2C 的“数据寄存器 DR”写入要发送的数据,然后DR会将数据转移到移位寄存器,移位寄存器将数据通过SDA线一位一位的发送。一旦DR的数据转移到了移位寄存器,就会产生EV8事件:


EV8事件:EV8:TxE=1,移位寄存器非空,数据寄存器空,写入DR寄存器将清除该事件。值得注意的是,EV8事件必须在当前字节传输完成前清除,为什么?因为如果没有及时清除,就说明没有新的数据填入DR,此时会是发送完成的状态(即EV8_2),然后系统就会产生停止信号了。


如何消除EV8事件?

可以看到,EV8事件其实就是连续用于写入数据的。当发送数据时(DR已经转移到移位寄存器,且无新写入数据),EV8事件会一直持续,所以我们可以往DR再传入一个数据,来消除EV8事件。而其他的事件,会一直拉低SCL,不发送时钟信号,直到我们处理完对应的事件。

所以,当发送单个数据时,由于没有新的数据写入DR,会在这个单数据发送后BTF = 1,此时TXE = 1,产生EV8_2事件,然后继续发送停止信号。当连续发送时,不断的往DR写入数据,这会清除掉BTF标志,只有当最后一个数据时,才会产生EV8_2。


(4) 当我们发送数据完成后,控制 I2C 设备产生一个停止信号(P),这个时候会产生EV8_2 事件,SR1 的 TXE位及 BTF位都被置 1,表示通讯结束。


按照寄存器描述,BTF位实际上做的是如下工作:在移位寄存器将数据全部发送完成时判断DR是否有数据,如果没有,那就代表这已经是最后一个数据了,所以此时字节发送结束。

3 作为主机接收器时的传输时序

主接收器接收流程及事件说明如下:

(1) 同主发送流程,起始信号(S)是由主机端产生的,控制发生起始信号后,它产生事件“EV5”,并会对 SR1寄存器的“SB”位置 1,表示起始信号已经发送;


(2) 紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”这时SR1 寄存器的“ADDR”位被置 1,表示地址已经发送;


这里存在一些难以理解的地方,接下来是个人的理解,可能会有错误,欢迎指正。

首先是EV6_1事件:中文参考手册中说到,要清除响应和停止条件的产生位。清除响应很好理解(就是在接收到一个数据后不应答),此时发送器就不会再发送数据。但是为什么要清除停止条件的产生位?应该是要设置停止位才对啊

对于这个问题,最好的答案就是英文参考手册,其实中文参考手册在这里是错误的,真的无语了,以下是英文参考手册,如何设置说的非常清楚。

如果只接收一个字节的数据,在EV6事件后,马上设置关闭应答使能,以及产生停止条件,这些设置都必须在当前传输的ACK到达之前完成(如果没有,就容易出现数据错误),这也是硬件IIC的一个缺点吧,整个硬件IIC的详细分析就到此结束了。

关键字:IIC  通讯过程  标志位 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic552245.html

上一篇:stm32专题十六:IIC(一)硬件结构框图
下一篇:stm32专题十六:IIC(三)stm32 IIC 固件库函数分析

推荐阅读

stm32专题十三:DMA(三)存储器到外设
DMA的存储器到外设的配置,其实和存储器到存储器的配置非常类似。只是需要注意一点,就是外设寄存器的地址如何获得?比如USART->DR数据寄存器,我们可以这样定义(基址 + 偏移)// 外设寄存器地址#define USART_DR_ADDRESS        (USART1_BASE + 0x04)然后的配置就跟USART和DMA非常类似,直接上初始化过程:bsp_dma.c#include "bsp_dma.h"#include <stdio.h> uint8_t SendBuff[SENDBUFF_SIZE]; void
发表于 2021-10-19
<font color='red'>stm32</font>专题十三:DMA(三)存储器到外设
DA转换(IIC总线)
项目描述向PCF8591芯片的AN2通道输入一个电压模拟量,经过AD转换后,单片机通过IIC总线读取转换后的数据,并将其量化后实时显示在LCD上。然后将AD转换后的数据写入PCF8591中进行DA转换,并用LED灯的亮度来显示模拟量的大小。仿真原理图如下:C语言代码如下:/*------------------------FileName: DAC.hFunction: 头文件Author: Zhang KaizhouDate: 2019-6-13 17:12:49------------------------*/#include <reg52.h>#include <intrins.h>#include
发表于 2021-11-24
DA转换(<font color='red'>IIC</font>总线)
89C51之EEPROM-IIC 实验 ---- 自学笔记
一、EEPROM是什么eeprom是带电可擦可编程只读存储器。EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。一般用在源即插即用。二、IIC串行总线的组成及工作原理2.1、IIC串行总线的组成及其工作原理采用串行总线的组成及其工作原理采用串行总线技术可以使用系统的硬件设计大大简化、系统的体积减小、可靠性提供。同时系统的更改和扩充极为容易。常用的串行扩展总线有:IIC(Intet IC BUS)总线、单总线(1-WIRE BUS
发表于 2021-11-02
89C51之EEPROM-<font color='red'>IIC</font> 实验 ---- 自学笔记
stm32专题三十:12864 IIC驱动
1 IIC发送数据 / 命令时序2 12864 图形显示(显存)RAM的大小是128×64位,RAM分为8页,从PAGE0到PAGE7,用于单色128x64点阵显示。3 行列设置1 设置起始行坐标(设置页)命令 0XB0 ~ 0XB7 用于设置分页,所以我们显示的分页要 + 偏移(0XB0)2 设置起始列坐标4 制作字模1 字模软件设置方式:2 生成的字模的批处理:生成的字模如图所示,我们要转成 0X00 这种格式:使用 sublime 这个软件,可以进行批处理(先全选,然后再 快捷键 Ctrl + Shift + L):字模生成完毕。驱动程序如下所示:bsp_12864.c#include "
发表于 2021-10-29
stm32专题三十:12864 <font color='red'>IIC</font>驱动
stm32专题十七:深度解析 stm32 硬件iic (i2c)
首先是配置I2C的GPIO,然后配置I2C参数。就是常规配置,按流程来写不会错。/** * @brief EEPROM IIC 配置 */void I2C_EE_config(void){  GPIO_InitTypeDef GPIO_InitStruct; I2C_InitTypeDef I2C_InitStruct; // 开启I2C GPIO时钟 EPROM_I2C_GPIO_APBxClkCmd(EEPROM_I2C_SCL_GPIO_CLK | EEPROM_I2C_SDA_GPIO_CLK, ENABLE); // 开启I2C 外设时钟 EEPROM_I2C_APBxClkCmd
发表于 2021-10-22
stm32专题十七:深度解析 stm32 硬件<font color='red'>iic</font> (i2c)
stm32专题十六:IIC(三)stm32 IIC 固件库函数分析
因为I2C通讯非常重要,因此要详细的分析每一个库函数IIC初始化结构体/**   * @brief  I2C Init structure definition    */ typedef struct{  // 指定时钟频率,这个值不能超过400kHz  uint32_t I2C_ClockSpeed;          /*!< Specifies the clock frequency.             
发表于 2021-10-22
stm32专题十六:<font color='red'>IIC</font>(三)stm32 <font color='red'>IIC</font> 固件库函数分析
小广播
何立民专栏 单片机及嵌入式宝典

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

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