本文将介绍STM32 IIC的通信原理和协议
①IIC总线简介
②IIC总线协议与读写操作
③STM32 IIC控制器介绍
①IIC总线简介
IIC是inter integrated circuit的简称,IIC是由PHILIPS公司开发的两线式串行总线;该总线具有接口线少、易于控制、通讯速率高等有点,在微电子控制领域被广泛使用。
IIC总线具备以下特征:
1、同步通信,半双工,以字节为传输单位;
2、两条线路、SDA和SCL;
3、挂载在IIC总线上的设备均可为主设备、亦可为从设备;
4、具有3种传输速率,最高可达3.4Mbit/s;可通过总线时钟的频率和总线上拉电阻来配置传输速率;
5、多主机功能、7位和10位地址模式、可以软件复位、1字节缓冲带DMA功能;
IIC总线的物理连接如下图:
SDA和SCL总线上会有上拉电阻,总线上可以挂在一定数量的设备通过总线进行通讯、当总线空闲时总线上处于高电平。
②IIC总线协议与读写操作
IIC总线协议包括:起始信号、终止信号、数据、应答部分;
起始信号:当总线处于空闲状态时SDA SCL两根线上是高电平,若此时SDA由高变低、则定义为起始信号;
终止信号:当SCL处于高电平时,若此时SDA由低变高、则定义为终止信号;
起始信号、终止信号顾名思义是通信的开始和终止,这两个信号都有主设备发起;
数据:可分为地址数据、和真实意义上的地址内存储的数据;
应答:应答可以有应答信号和非应答信号,该信号是跟在数据后面;
若主设备向从设备写1个数据会有以下过程:
起始信号>从机地址+写位ACK>写入地址ACK>写入数据ACK>终止信号
若主设备向从设备读1个数据会有以下过程:
起始信号>从机地址+写位ACK>要读的地址ACK>起始信号>从机地址+读位ACK>地址内的数据NACK>终止信号
若读多个数据就是“从机地址+读位ACK>地址内的数据NACK”重复几次
③STM32 IIC控制器介绍
STM32这种芯片是具有IIC控制器的,这样可以通过硬件产生IIC时序;但有些简单的单片机就可能没有IIC控制器,那我们如何与IIC设备通讯呢?答案就是软件模拟IIC时序,软件模拟IIC时序相比更加操作繁琐、效率低。
STM32的IIC片上外设是用来专门实现IIC通讯协议的,我们只要配置好该外设,就可以产生通讯信号、收发数据并缓存起来,CPU检测外设的状态和访问数据寄存器就能完成数据的收发,这样减轻了CPU的工作负担、使得软件设计的效率提高。
以下是STM32 IIC控制器的框图:
引脚对应表: