目录
简介:
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);