基于I2C的温湿度采集

一,I2C简介

IC( Inter-- Integrated Circuit)总线是一种由 PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控I2C之间、I2C与I2C之间进行双向传送,高速IC总线一般可达400kbps以上。 I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。(只有起始信号是必需的)
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结東传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

二,硬件I2C与软件I2C的区别

硬件 I2C:对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但是程序较为繁琐。硬件(固件)I2C是直接调用内部寄存器进行配置;而软件I2C是没有寄存器这个概念的。

软件 I2C:一般是使用GPIO管脚,用软件控制SCL,SDA线输出高低电平,模拟i2c协议的时序。

主要对比:
(一)硬件IIC用法比较复杂,模拟IIC的流程更清楚一些。
(二) 硬件IIC速度比模拟快,并且可以用DMA。
(三) 模拟IIC可以在任何管脚上,而硬件只能在固定管脚上。
软件i2c是程序员使用程序控制SCL,SDA线输出高低电平,模拟i2c协议的时序。一般较硬件i2c稳定,但是程序较为繁琐,但不难。
硬件i2c程序员只要调用i2c的控制函数即可,不用直接的去控制SCL,SDA高低电平的输出。但是有些单片机的硬件i2c不太稳定,调试问题较多

三,实现I2CAHT20温湿度传感器的数据采集

(1) 实验说明

温湿度传感器:AHT20
单片机:STM32F103系列单片机(本人用的时野火的指南者)
每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)
(2)线路连接
VCC- 3.3V
GND- GND
SCL- PB6
SDA- PB7

(3)主要代码(代码资源易得,在此只给出main.c,其余不再赘述)

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "bsp_i2c.h"

uint8_t t;
uint8_t len;
uint16_t times=0;
	


int main(void)
{	
	delay_init();     //延时函数初始化	  
	uart_init(115200);	 //串口初始化为115200
	IIC_Init();

	
	while(1)
	{
		printf("start");
		read_AHT20_once();
		delay_ms(2000);

	}
}	

(4)运行结果
当向AHT20哈气时,易观察到温湿度明显上升。
总结:通过这次实验我了解并且能够明辨什么是“软件I2C”和“硬件I2C”,而且圆满完成上机实验,获益匪浅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值