STM32 SHT40驱动源码(使用硬件I2C接口)

目录

简介:

SHT40.c:

SHT40.h

测试结果:


简介:

        SHT40是瑞士Sensirion公司推出的第四代温湿度传感器,内部集成加热器用于去除表面微小液滴。集成I2C接口,典型的相对湿度精度1.8%RH,典型温度精度0.2℃,运行在0-100%RH和-40-125℃的环境中。

主控:STM32H7B0VBT6

平台:STM32CubeIDE

SHT40一片,使用硬件I2C驱动:

I2C配置:

如果硬件上没有上拉电阻,请打开GPIO的上拉电阻:

SHT40.c:

/********************************Copyright (c)**********************************\
**
**                   (c) Copyright 2023, Main, China, 被钢琴支配的悲惨大学生.
**                           All Rights Reserved
**
**                           By(被钢琴支配的悲惨大学生 personally owned)
**                           https://blog.csdn.net/m0_71226271?type=blog
**
**----------------------------------文件信息------------------------------------
** 文件名称: SHT40.c
** 创建人员: 被钢琴支配的悲惨大学生
** 创建日期: 2023-09-04
** 文档描述:基于STM32H7B0VBT6的HAL库SHT40驱动源码,使用硬件I2C
\********************************End of Head************************************/
#include "main.h"
#include "i2c.h"
#include "SHT40.h"
/*************************************************************************************************
*	函 数 名: SHT40_Read_Temperature_Humidity
*	入口参数: Temperature温度指针,Humidity湿度指针
*	返回值:无
*	函数功能: 以高精度读取温度和湿度
*	说    明:不对CRC校验码做验证
*************************************************************************************************/
void SHT40_Read_Temperature_Humidity(double *Temperature,double *Humidity)
{
	uint32_t Temperature_Byte;
	uint32_t Temperature_Checksum;
	uint32_t Humidity_Byte;
	uint32_t  Humidity_Checksum;

	uint8_t I2C_Transmit_Data[1];
	I2C_Transmit_Data[0]=SHT40_MEASURE_TEMPERATURE_HUMIDITY;
	uint8_t I2C_Receive_Data[6];
	HAL_I2C_Master_Transmit(&hi2c1, SHT30_Write, I2C_Transmit_Data,1,HAL_MAX_DELAY);
    HAL_Delay(10);
	HAL_I2C_Master_Receive(&hi2c1, SHT30_Read, I2C_Receive_Data,6,HAL_MAX_DELAY);

	Temperature_Byte = I2C_Receive_Data[0] << 8| I2C_Receive_Data[1];
	Temperature_Checksum= I2C_Receive_Data[2];
	Humidity_Byte = I2C_Receive_Data[3] << 8| I2C_Receive_Data[4];
	Humidity_Checksum = I2C_Receive_Data[5];
    *Temperature = -45 + 175 * Temperature_Byte/65535.0;
	*Humidity = -6 + 125 * Humidity_Byte/65535.0;

}
/*************************************************************************************************
*	函 数 名: SHT40_Read_Serial_Number
*	入口参数: 无
*	返回值:32bit的序列号
*	函数功能: 读取SHT40的出场唯一序列号
*	说    明:无
*************************************************************************************************/
uint32_t SHT40_Read_Serial_Number()
{
	uint32_t Serial_Number;
	uint8_t I2C_Transmit_Data[1];
	I2C_Transmit_Data[0]=SHT40_READ_SERIAL_NUMBER;
	uint8_t I2C_Receive_Data[6];
	HAL_I2C_Master_Transmit(&hi2c1, SHT30_Write, I2C_Transmit_Data,1,HAL_MAX_DELAY);
	HAL_I2C_Master_Receive(&hi2c1, SHT30_Read, I2C_Receive_Data,6,HAL_MAX_DELAY);
	Serial_Number=(I2C_Receive_Data[0] << 24)|
			(I2C_Receive_Data[1] << 16)|
			(I2C_Receive_Data[3] << 8)|
			(I2C_Receive_Data[4] << 0);
	return Serial_Number;


}
/*************************************************************************************************
*	函 数 名: SHT40_Heater_200mW_1s
*	入口参数: 无
*	返回值:无
*	函数功能: 开始内部加热器,以200mW加热1秒(一秒)
*	说    明:加热时间不能超过运行时间的10%,否则会过热。详情说明请参考数据手册12页
*************************************************************************************************/
void SHT40_Heater_200mW_1s()
{
	uint8_t I2C_Transmit_Data[1];
	I2C_Transmit_Data[0]=SHT40_HEATER_200mW_1s;
	HAL_I2C_Master_Transmit(&hi2c1, SHT30_Write, I2C_Transmit_Data,1,HAL_MAX_DELAY);
}

SHT40.h

/********************************Copyright (c)**********************************\
**
**                   (c) Copyright 2023, Main, China, 被钢琴支配的悲惨大学生.
**                           All Rights Reserved
**
**                           By(被钢琴支配的悲惨大学生 personally owned)
**                           https://blog.csdn.net/m0_71226271?type=blog
**
**----------------------------------文件信息------------------------------------
** 文件名称: SHT40.h
** 创建人员: 被钢琴支配的悲惨大学生
** 创建日期: 2023-09-04
** 文档描述:基于STM32H7B0VBT6的HAL库SHT40驱动源码,使用硬件I2C
\********************************End of Head************************************/
#include "main.h"
/**************************I2C地址****************************/
#define SHT30_Write (0x44<<1)   //写入地址
#define SHT30_Read  ((0x44<<1)+1)   //读出地址
/**************************SHT40命令****************************/
#define SHT40_MEASURE_TEMPERATURE_HUMIDITY 0xFD  //高精度读取温湿度命令
#define SHT40_READ_SERIAL_NUMBER 0x89                         //读取唯一序列号命令
#define SHT40_HEATER_200mW_1s 0x39                               //200mW加热1秒命令
/**************************API****************************/
void SHT40_Read_Temperature_Humidity(double *Temperature,double *Humidity);
uint32_t SHT40_Read_Serial_Number(void);
void SHT40_Heater_200mW_1s(void);

测试结果:

作者:被钢琴支配的悲惨大学生

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 SHT40驱动源码(使用硬件I2C接口)

发表评论