一、软件I2C与硬件I2C
I2C(Inter-Integrated Circuit)是一种常见的串行通信协议,用于在数字电路中连接各种设备。I2C通常分为软件I2C和硬件I2C两种类型。
软件I2C是通过软件实现的I2C通信协议。这种方法通常使用GPIO引脚进行通信,通过编程控制GPIO引脚的高低电平来模拟数据线和时钟线,从而实现I2C通信。软件I2C在一些资源受限的系统中或者没有硬件I2C接口的情况下非常有用,但通常速度较慢,稳定性也不如硬件I2C。
硬件I2C则是通过专门的I2C控制器硬件实现的I2C通信协议。这种方法使用专门的硬件电路来实现I2C通信,通常具有更高的速度和稳定性,更适合在需要高速传输或者对稳定性要求较高的场合使用。
总的来说,软件I2C适用于一些简单或者资源受限的系统,而硬件I2C适用于需要高性能和稳定性的系统。在选择使用哪种I2C通信方式时,需要根据具体的应用场景和需求进行权衡和选择。
二、实验
(1)步骤一
选择STM32F103C8T6芯片
(2)步骤二
sys配置
rcc配置
I2C1配置
I2C2配置
USART1配置
TIM1配置
时钟树配置
(3)步骤三
工程生成
三、代码
1.main.c
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
#include "u8g2.h"
#include "AHT20.h"
#include <stdio.h>
//温
static const unsigned char wen[] =
{0x00,0x00,0xC4,0x1F,0x48,0x10,0x48,0x10,0xC1,0x1F,0x42,0x10,0x42,0x10,0xC8,0x1F,0x08,0x00,0xE4,0x3F,0x27,0x25,0x24,0x25,0x24,0x25,0x24,0x25,0xF4,0x7F,0x00,0x00};
//湿
static const unsigned char shi[] ={0x00,0x00,0xE4,0x1F,0x28,0x10,0x28,0x10,0xE1,0x1F,0x22,0x10,0x22,0x10,0xE8,0x1F,0x88,0x04,0x84,0x04,0x97,0x24,0xA4,0x14,0xC4,0x0C,0x84,0x04,0xF4,0x7F,0x00,0x00};
//度
static const unsigned char du[] ={0x80,0x00,0x00,0x01,0xFC,0x7F,0x44,0x04,0x44,0x04,0xFC,0x3F,0x44,0x04,0x44,0x04,0xC4,0x07,0x04,0x00,0xF4,0x0F,0x24,0x08,0x42,0x04,0x82,0x03,0x61,0x0C,0x1C,0x70};
//待
static const unsigned char dai[]={0x10,0x02,0x10,0x02,0x08,0x02,0xC4,0x3F,0x12,0x02,0x10,0x02,0xE8,0x7F,0x0C,0x08,0x0A,0x08,0xE9,0x7F,0x08,0x08,0x48,0x08,0x88,0x08,0x88,0x08,0x08,0x0A,0x08,0x04};
//检
static const unsigned char jian[]={0x08,0x02,0x08,0x02,0x08,0x05,0x08,0x05,0xBF,0x08,0x48,0x10,0xAC,0x6F,0x1C,0x00,0x2A,0x11,0x0A,0x12,0x49,0x12,0x88,0x0A,0x88,0x08,0x08,0x04,0xE8,0x7F,0x08,0x00};
//测
static const unsigned char che[]={0x00,0x20,0xE4,0x23,0x28,0x22,0x28,0x2A,0xA1,0x2A,0xA2,0x2A,0xA2,0x2A,0xA8,0x2A,0xA8,0x2A,0xA4,0x2A,0xA7,0x2A,0x84,0x20,0x44,0x21,0x44,0x22,0x24,0x28,0x10,0x10};
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
//write by luobitaihuangzhang
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD