第10周实验---IIC协议读取温湿度数据

一.实验任务:

1. 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务:

1)解释什么是“软件I2C”和“硬件I2C”? (阅读野火配套教材的第23章“I2C--读写EEPROM”原理章节)

2)阅读AHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)。

二.I2C介绍

软件I2C读写芯片和硬件I2C读写芯片是两种不同的方法来实现与I2C设备进行通信。

硬件I2C读写芯片是指使用专门]的硬件电路来实现I2C通信协议。这种方法利用微控制器或其他支持l2C的芯片上的硬件模块来处理I2C通信,包括时序控制、数据传输和应答等。硬件I2C读写芯片通过硬件电路实现,具有高速、可靠性好的特点,适用于对时序要求较高的应用。

软件I2C读写芯片是指通过软件方式来模拟实现I2C通信协议。这种方法利用通用I0口(如GPI0) 通过编程的方式来模拟I2C通信,包括产生时钟信号、发送和接收数据以及处理应答等。软件I2C读写芯片通过软件模拟实现,相对于硬件I2C来说,速度较慢且可能存在一-些时序不稳定性,但它具有灵活性高、成本低的特点,适用于一-些对速度要求不高的应用场景。

区别:

1.实现方式:硬件I2C通过专门]的硬件电路实现,而软件I2C是通过编程的方式来模拟实现。

2.性能:硬件I2C具有高速和可靠性好的特点,而软件I2C的速度相对较慢且可能存在一-些时序不稳定性。3.灵活性和成本:软件I2C具有灵活性高、成本低的特点,适用于一些对速度要求不高的应用场景。

三 采集数据
 

1.新建工程步骤如下

设置RCC

3 设置SYS

  4 设置USART1                       

                                    

5 GPIO口设置

6 I2C设置
在DMA setting add两个端口

7 NVIC设置

8 时钟设置

修改AHT20.H

#ifndef _AHT20_DEMO_
#define _AHT20_DEMO_

#include "main.h"  

void Delay_N10us(uint32_t t);//延时函数
void SensorDelay_us(uint32_t t);//延时函数
void Delay_4us(void);		//延时函数
void Delay_5us(void);		//延时函数
void Delay_1ms(uint32_t t);	
void AHT20_Clock_Init(void);		//延时函数
void SDA_Pin_Output_High(void)  ; //将PB7配置为输出 , 并设置为高电平, PB7作为I2C的SDA
void SDA_Pin_Output_Low(void);  //将P7配置为输出  并设置为低电平
void SDA_Pin_IN_FLOATING(void);  //SDA配置为浮空输入
void SCL_Pin_Output_High(void); //SCL输出高电平,P6作为I2C的SCL
void SCL_Pin_Output_Low(void); //SCL输出低电平
void Init_I2C_Sensor_Port(void); //初始化I2C接口,输出为高电平
void I2C_Start(void);		 //I2C主机发送START信号
void AHT20_WR_Byte(uint8_t Byte); //往AHT20写一个字节
uint8_t AHT20_RD_Byte(void);//从AHT20读取一个字节
uint8_t Receive_ACK(void);   //看AHT20是否有回复ACK
void Send_ACK(void)	;	  //主机回复ACK信号
void Send_NOT_ACK(void);	//主机不回复ACK
void Stop_I2C(void);	  //一条协议结束
uint8_t AHT20_Read_Status(void);//读取AHT20的状态寄存器
uint8_t AHT20_Read_Cal_Enable(void);  //查询cal enable位有没有使能
void AHT20_SendAC(void); //向AHT20发送AC命令
uint8_t Calc_CRC8(uint8_t *message,uint8_t Num);
void AHT20_Read_CTdata(uint32_t *ct); //没有CRC校验,直接读取AHT20的温度和湿度数据
void AHT20_Read_CTdata_crc(uint32_t *ct); //CRC校验后,读取AHT20的温度和湿度数据
void AHT20_Init(void);   //初始化AHT20
void JH_Reset_REG(uint8_t addr);///重置寄存器
void AHT20_Start_Init(void);///上电初始化进入正常测量状态


#endif



修改AHT20.C

#include "main.h" 
#include "AHT20-21_DEMO_V1_3.h" 
#include "gpio.h"
#include "i2c.h"


void Delay_N1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值