#ifndef __SHT3X_H__ #define __SHT3X_H__ #ifdef __cplusplus extern "C"{ #endif #include "main.h" #define SHT3X_USING_HARDWARE_I2C 1 //使用硬件i2c #if SHT3X_USING_HARDWARE_I2C #include "i2c.h" //#define I2Cx hi2c2 #endif #define SHT3X_ADDRESS (0x44 << 1) //ADDR-->GND(0x44<<1)/ADDR-->VCC(0x45<<1) //读取的温湿度数据 typedef struct SHT3x_TemperatureHumidity { float SHT3x_Temperature; float SHT3x_Humidity; } SHT3x_ReadData; extern SHT3x_ReadData SHT3x_Data; //SHT3x相关指令 typedef enum { /** * 软件复位命令 **/ SOFT_RESET = 0x30A2, /** * 单发模式下的测量命令 * 重复性高、中、低(Repeatability) * 时钟拉伸使能/失能(Clock stretching)(注:开启时钟拉伸后,SCL总线将一直为低电平,需重新上电) **/ SINGLE_HIGH_ENABLE = 0x2C06, SINGLE_MEDIUM_ENABLE = 0x2C0D, SINGLE_LOW_ENABLE = 0x2C10, SINGLE_HIGH_DISABLE = 0x2400, SINGLE_MEDIUM_DISABLE = 0x240B, SINGLE_LOW_DISABLE = 0x2416, /** * 周期数据采集模式的测量命令 * 重复性高、中、低(Repeatability) * 数据采集频率0.5/1/2/4/10(measurements per second) **/ PERIODIC_HIGH_0_5 = 0x2032, PERIODIC_MEDIUM_0_5 = 0x2024, PERIODIC_LOW_0_5 = 0x202F, PERIODIC_HIGH_1 = 0x2130, PERIODIC_MEDIUM_1 = 0x2126, PERIODIC_LOW_1 = 0x212D, PERIODIC_HIGH_2 = 0x2236, PERIODIC_MEDIUM_2 = 0x2220, PERIODIC_LOW_2 = 0x222B, PERIODIC_HIGH_4 = 0x2334, PERIODIC_MEDIUM_4 = 0x2322, PERIODIC_LOW_4 = 0x2329, PERIODIC_HIGH_10 = 0x2737, PERIODIC_MEDIUM_10 = 0x2721, PERIODIC_LOW_10 = 0x272A, /** * 周期模式测量结果的读出 **/ FETCH_DATA_PERIODIC = 0xE000, /** * 中断命令/停止周期数据采集模式 **/ BREAK_ACQUISITION_DATA = 0x3093, /** * 打开和关闭加热器 **/ HEATER_ENABLE = 0x306D, HEATER_DISABLE = 0x3066, /** * 读取状态寄存器 **/ READ_STATUS_REGISTER = 0xF32D, /** * 清除状态寄存器 **/ CLEAR_STATUS_REGISTER = 0x3041, /** * ART加速响应时间命令 **/ ACCELERATED_RESPONSE_TIME = 0x2B32 } SHT3x_CMD; #define SHT3x_Delay_ms(__xms) HAL_Delay(__xms) uint8_t SHT3x_Soft_Reset(void); uint8_t SHT3x_Init_Measurement_Mode(SHT3x_CMD Mode); uint8_t SHT3x_Get_TemperatureHumidity(float *temperature, float *humidity); uint8_t CRC8_Calculation(uint8_t *const message, uint8_t initial_value); #ifdef __cplusplus } #endif #endif //__SHT3X_H__