一、I2C总线通信协议
1.I2C介绍
IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps 以上。
注意IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPI
I²C最重要的功能包括:
只需要两条总线; 没有严格的波特率要求,例如使用RS232,主设备生成总线时钟; 所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址; I²C是真正的多主设备总线,可提供仲裁和冲突检测; 传输速度: 标准模式:Standard Mode = 100 Kbps 快速模式:Fast Mode = 400 Kbps 高速模式: High speed mode = 3.4 Mbps 超快速模式: Ultra fast mode = 5 Mbps 最大主设备数:无限制; 最大从机数:理论上是127。
2.I2C物理层
I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,SCL和SDA被上拉电阻Rp拉高,使SDA和SCL线都保持高电平。
I2C通信方式为半双工,只有一根SDA线,同一时间只可以单向通信,485也为半双工,SPI和uart通信为全双工。
主机和从机的概念:
主机就是负责整个系统的任务协调与分配,从机一般是通过接收主机的指令从而完成某些特定的任务,主机和从机之间通过总线连接,进行数据通讯。 发布主要命令的称为主机,接受命令的称为从机
3.I2C协议层
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。 结束信号SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。 应答信号接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。
4.软件IIC和硬件IIC
IIC分为软件IIC和硬件IIC
软件IIC 软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。
直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。 使用: 需要在控制产生 I2C 的起始信号时,控制作为SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL线切换为低电平,这样就输出了一个标准的 I2C 起始信号。
硬件IIC:一块硬件电路,硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,硬件(固件)I2C是直接调用内部寄存器进行配置。
直接利用 STM32 芯片中的硬件 I2C 外设。 使用: 只要配置好对应的寄存器,外设就会产生标准串口协议的时序。在初始化好 I2C 外设后,只需要把某寄存器位置 1,此时外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,不需要内核直接控制引脚的电平。
硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
二、使用CubeMX创建工程
1.新建工程,选择芯片
2.配置RCC
3.配置SYS
4.配置USART1
5.配置I2C
6.NIVC
7.GPIO
8.时钟配置
9.创建工程
三、修改代码
1.去奥松官网下载AHT20芯片代码与芯片的相关信息介绍文档: 软件下载-温湿度传感器 温湿度芯片 温湿度变送器模块 气体传感器 流量传感器 广州奥松电子股份有限公司
官方代码使用的是PB14,PB15引脚,需要修改引脚为PB6,PB7 才可以正常使用。
2.进入到下载的AHT20芯片代码文件夹中,复制两个C语言代码文件
3.找到刚刚利用HAL库生成的工程文件,在其中找到Core文件夹下的Inc文件夹,并且进入其中 ,将AHT20-21_DEMO_V1_3.h复制在此Inc文件夹下:
4.找到刚刚利用HAL库生成的工程文件,在其中找到Core文件夹下的Src文件夹,并且进入其中 ,将AHT20-21_DEMO_V1_3.c复制在此Src文件夹下:
5.进入到 keil5工程文件中,添加AHT20-21_DEMO_V1_3.c文件:
6.修改main.c
/* USER CODE BEGIN Header */
/**
*******************************