基于STM32嵌入式接口与传感器应用开发(2)IIC通信

什么是IIC?

IIC(即I2C)是一种二线式串行总线,

SDA总线为双向数据传输线

SCL总线为时钟控制线,用于同步时钟信号,以完成数据收发同步。

微控制器(MCU)与被控制端(外设)、外设与外设之间可以通过IIC总线进行半双工通信

基于STM32嵌入式接口与传感器应用开发(2)IIC通信_第1张图片

IIC的特点

1、支持多设备连接的总线,一条IIC总线中可以有多个主机和从机。

2、每一个连接到IIC总线上的设备都有唯一地址(7位/10位),主机可以利用这个地址对从机进行访问。

3、总线通过上拉电阻接到电源。当IIC设备空闲时会呈高阻态,当所有IIC设备都空闲时,即都输出高阻态,由上拉电阻把总线拉高成高电平。

IIC通信协议

1、主机发送 S(开始信号),接着发送1字节的数据,高7位为地址码,最低位时方向位,方向位表明主机与从机间数据的传输方向。

2、系统中所有从机将自己的地址与主机发送到总线上的地址进行比较,如果从机地址与总线上的地址相同,则进行响应。

3、根据方向位确定是主机向从机发送数据还是从从机接收数据

4、当数据传输完成后发送 P(停止信号),释放IIC总线

基于STM32嵌入式接口与传感器应用开发(2)IIC通信_第2张图片

S(开始信号):当SCL为高电平时,SDA下降沿为开始信号 

P(停止信号):当SCL为高电平时,SDA上升沿为停止信号

数据有效性

进行数据传输时,SCL高电平时,SDA表示的数据有效

也就意味着,SCL信号线控制着数据同步,当SCL低电平时,SDA进行电平转换。SCL的电平切换频率决定着IIC传输数据的速率。

基于STM32嵌入式接口与传感器应用开发(2)IIC通信_第3张图片

 响应

 IIC的数据和地址都有响应,从机接收到数据后。

响应包括应答(ACK)和非应答(NACK)两种信号。

接收端希望继续接受数据时发送应答(ACK),反之希望结束数据传输时,发送非应答(NACK)

基于STM32嵌入式接口与传感器应用开发(2)IIC通信_第4张图片

STM32的IIC模块架构

IIC共有四种模式:从发送器、从接收器、主发送器、主接收器

默认情况下以从模式工作,在产生开始信号后,接口自动进入主模式

typedef struct
{
  uint32_t I2C_ClockSpeed;          /*!< Specifies the clock frequency.
                                         This parameter must be set to a value lower than 400kHz */

  uint16_t I2C_Mode;                /*!< Specifies the I2C mode.
                                         This parameter can be a value of @ref I2C_mode */

  uint16_t I2C_DutyCycle;           /*!< Specifies the I2C fast mode duty cycle.
                                         This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */

  uint16_t I2C_OwnAddress1;         /*!< Specifies the first device own address.
                                         This parameter can be a 7-bit or 10-bit address. */

  uint16_t I2C_Ack;                 /*!< Enables or disables the acknowledgement.
                                         This parameter can be a value of @ref I2C_acknowledgement */

  uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged.
                                         This parameter can be a value of @ref I2C_acknowledged_address */
}I2C_InitTypeDef;

I2C_ClockSpeed:设置控制始终频率,必须小于400000(IIC最大传输速率为400k)

I2C_Mode:设置IIC接口模式,可设置为主/从。

I2C_DutyCycle:设置SCL信号占空比,为2或16/9

I2C_OwnAddress1:设置STM32的IIC接口的设备地址。

I2C_Ack:应答使能,配置端口使用或禁止应答。

I2C_AcknowledgedAddress:寻址模式7位或者10位

你可能感兴趣的:(嵌入式系统,stm32,单片机,arm)