【STM32笔记】STM32的IIC通信基础(一)

一. IIC是什么

  IIC(Inter-Integrated Circuit) 又称为 I2C 或者是 I2C ,是嵌入式系统中的一种常见的数据通信接口。I2C是IC器件之间互联的两线制总线。它提供多主机功能,控制所有的I2C总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式,同时与SMBus 2.0兼容。STM32F103微控制器的I2C有多种用途,包括CRC码的生成和校验SMBusPMBus。根据特定的需要,还可以使用DMA以减轻CPU的负担。

二. IIC的工作原理

1. IIC内部结构

STM32F103系列微控制器的I2C结构,由SDA和SCL线展开,主要分为时钟控制,数据控制和逻辑控制等部分,负责实现I2C的时钟产生、数据收发、总线仲裁和中断、DMA等功能。

(1). 时钟控制

  时钟控制模块根据控制寄存器CCR、CR1和CR2中的配置产生I2C协议的时钟信号,即SCL线上的信号。为了产生正确的时序,必须在I2C_CR2寄存器中设定I2C的输入时钟。当I2C工作在标准传输速率时,输入时钟的频率必须大于等于2MHz;当I2C工作在快速传输速率时,输入时钟的频率必须大于等于4MHz。

(2). 数据控制

  数据控制模块通过一系列控制架构,在将要发送数据的基础上,按照I2C的数据格式加上起始信号、地址信号、应答信号和停止信号,将数据一位一位的从SDA数据线上发送出去。读取数据时,则从SDA线上的信号中提取出接收到的数据值,发送和接收数据都被保存在数据寄存器中。

(3). 控制逻辑

  控制逻辑用于产生I2C中断和DMA请求。

                I2C功能框图如下:
在这里插入图片描述

2. IIC的主要特点

  • 并行总线I2C总线协议转换器
  • 多主机功能:该模块既可做主设备也可做从设备
  • I2C主设备功能:产生时钟、产生起始和停止信号
  • I2C从设备功能:可编程的I2C地址检测、可响应2个从地址的双地址能力、停止位检测
  • 产生和检测7位/10位地址和广播呼叫
  • 支持不同的通讯速度:标准速度(高达100 kHz)、快速(高达400 kHz)
  • 状态标志:发送器/接收器模式标志、字节发送结束标志
  • I2C总线忙标志
  • 错误标志:主模式时的仲裁丢失、地址/数据传输后的应答(ACK)错误、检测到错位的起始或停止条件、禁止拉长时钟功能时的上溢或下溢
  • 2个中断向量:1个中断用于地址/数据通讯成功、1个中断用于错误
  • 可选的拉长时钟功能
  • 具单字节缓冲器的DMA
  • 可配置的PEC(信息包错误检测)的产生或校验:发送模式中PEC值可以作为最后一个字节传输、用于最后一个接收字节的PEC错误校验
  • 兼容SMBus 2.0 :25 ms时钟低超时延时、10 ms主设备累积时钟低扩展时间、25 ms从设备累积时钟低扩展时间、带ACK控制的硬件PEC产生/校验、支持地址分辨协议(ARP)
  • 兼容SMBus

三. IIC的功能描述

  I2C模块接收和发送数据,并将数据从串行转换成并行,或从并行转换成串行,可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线,允许连接到标准(高达100KHz)或(高达400KHz)的I2C总线。

1. 模式选择

  • 从发送器模式
  • 从接收器模式
  • 主发送器模式
  • 主接收器模式

该模块默认工作于从模式。接口在生成起始条件后自动地由从模式切换到主模式;当仲裁丢失或产生停止信号时,则从主模式切换到从模式。允许多主机功能。

2. 通信流

  主模式时,I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止条件结束。起始条件和停止条件都是在主模式下由软件控制产生。
  从模式时,I2C接口能识别它自己的地址(7位或10位)和广播呼叫地址。软件能够控制开启或禁止广播呼叫地址的识别。
  数据和地址按8位/字节进行传输,高位在前。跟在起始条件后的1或2个字节是地址(7位模式为1个字节,10位模式为2个字节)。地址只在主模式发送。
  在一个字节传输的8个时钟后第9个时钟期间,接收器必须回送一个应答位(ACK)给发送器。
在这里插入图片描述

四. IIC的主从模式

1. IIC的从模式

从模式是STM32F103微控制器I2C默认的工作模式。在从模式下,STM32F103微控制器可以作为发送器,也可以作为接收器。状态寄存器I2C SR2中的TRA位标识了当前是发送器还是接收器。

(1).从发送器

  在接收到地址和清除ADDR位后,从发送器将字节从DR寄存器经由内部移位寄存器发送到SDA线上。
  从设备保持SCL为低电平,直到ADDR位被清除并且待发送数据已写入DR寄存器。
  当收到应答脉冲时: TxE位被硬件置位,如果设置了ITEVFEN和ITBUFEN位,则产生一个中断。如果TxE位被置位,但在下一个数据发送结束之前没有新数据写入到I2C_DR寄存器,则BTF位被置位,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再写入I2C_DR寄存器将清除BTF位。
在这里插入图片描述

(2).从接收器

  在接收到地址并清除ADDR后,从接收器将通过内部移位寄存器从SDA线接收到的字节存进DR寄存器。I2C接口在接收到每个字节后都执行下列操作:

  • 如果设置了ACK位,则产生一个应答脉冲。
  • 硬件设置RxNE=1。如果设置了ITEVFEN和ITBUFEN位,则产生一个中断。

  如果RxNE被置位,并且在接收新的数据结束之前DR寄存器未被读出,BTF位被置位,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再写入I2C_DR寄存器将清除BTF位。
在这里插入图片描述

2. IIC的主模式

主模式状态下,I2C接口启动数据传输并产生时钟信号。串行数据传输总是以其实条件开始并以停止条件结束。当通过START位在总线上产生了起始条件,设备就进入了主模式。在主模式下,STM32F103微控制器可以作为发送器,也可以作为接收器。状态寄存器I2C_AR2中的TRA位标识了当前是发送器还是接收器。

(1).主接收器

  在发送地址和清除ADDR之后,I2C接口进入主接收器模式。在此模式下,I2C接口从SDA线接收数据字节,并通过内部移位寄存器送至DR寄存器。在每个字节后,I2C接口依次执行以下操作:

  • 如果ACK位被置位,发出一个应答脉冲。
  • 硬件设置RxNE=1,如果设置了INEVFEN和ITBUFEN位,则会产生一个中断。

  如果RxNE位被置位,并且在接收新数据结束前,DR寄存器中的数据没有被读走,硬件将设置BTF=1,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再读出I2C_DR寄存器将清除BTF位。
在这里插入图片描述

(2).主发送器

  在发送了地址和清除了ADDR位后, 主设备通过内部移位寄存器将字节从DR寄存器发送到SDA线上。主设备等待,直到TxE被清除。
  当收到应答脉冲时:

  • TxE位被硬件置位,如果设置了INEVFEN和ITBUFEN位,则产生一个中断。如果TxE被置位并且在上一次数据发送结束之前没有写新的数据字节到DR寄存器,则BTF被硬件置位,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再写入I2C_DR寄存器将清除BTF位。
    在这里插入图片描述

下一节我们来聊聊基于STM32CubeMX的实现IIC通信的设计步骤

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值