STM32学习笔记8 ------- IIC通信协议原理及使用

IIC(Inter-Integrated Circuit)通信协议由于它引脚少,硬件实现简单,可扩展性强,不需要使用USART、CAN等通信协议的外部收发设备,被广泛地用于系统内多个集成电路间的通信。

分层简化复杂问题

  • 芯片被分为内核层和片上外设
  • STM32标准库则是在寄存器与用户代码之间的软件层
  • 通信协议则可将其分为物理层和协议层
    • 物理层

      规定通信系统中具有机械、电子功能部分的特性,确保原始数据在物理媒介中的传输。

    • 协议层

      主要规定通信逻辑,统一收发双方的数据打包、解包标准。

IIC物理层

1.它是一个支持设备的总线。在一个IIC通信总线中,支持多个通信主机及多个通信从机。

2.一个IIC总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线用来表示数据,时钟线用于同步数据的收发。

3.每个设备都有一个独立的地址,主机可利用这个地址进行不同设备之间的访问。

4.总线通过上拉电阻接到电源。当IIC设备空闲时,会输出高阻态,而当所有设备都空闲时,都输出高阻态,由上拉电阻把总线拉成高电平。(ps:高阻态:表示电路中的某个节点具有相对电路中其他点相对更高的阻抗。对下级电路无任何影响,电平高低由后面接到电路决定。)

什么是三态门与高阻态?

5.多个主机同时使用总线时,为防止数据冲突,利用仲裁方式解决由哪个设备占用总线。

6.具有3种传输模式:标准模式100kbps, 快速模式400kbps, 高速模式3.4Mbps.

7.连接到相同总线的IC数量受到总线的最大电容400pF限制。

IIC协议层

定义了通信的起始信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。

传输时主机产生时钟,在第9个时钟时,数据发送端会释放SDA的控制权,由数据接收端控制SDA,若SDA为高电平,表示非应答信号(NACK),低电平表示应答信号(ACK)

STM32标准库IIC初始化结构体详解

STM32标准库提供了IIC初始化结构体及初始化函数,来配置IIC外设。
stm32f10x_i2c.h和stm32f10x_i2c.c中定义。

typedef struct{
	uint32_t I2C_ClockSpeed;     // 设置SCL时钟频率,此值要低于400000
	uint16_t I2C_Mode;     		  // 指定工作模式
	uint16_t I2C_DutyCycle;		  // 指定时钟占空比
	uint16_t I2C_OwnAddress1;   // 指定自身的I2C设备地址
	uint16_t I2C_Ack;				  // 使能或关闭响应
	uint16_t I2C_AcknowledgedAddress;   // 指定地址的长度, 7/10
}I2C_InitTypeDef;

你可能感兴趣的:(STM32)