// // Created by dell on 24-12-20. // TMP112A Temperature Sensor Driver Header // #ifndef TMP112_H #define TMP112_H #include "gd32e23x_it.h" #include "gd32e23x.h" #include "systick.h" #include #include #include #include #include #include "board_config.h" #include "i2c.h" /******************************************************************************/ /* TMP112A I2C Address */ #define TMP112A_ADDR (0x49) // 7-bit address (ADD0=GND) /* Register Addresses */ /******************************************************************************/ #define TMP112A_TEMP_REG 0x00 // 温度寄存器 #define TMP112A_CONFIG_REG 0x01 // 配置寄存器 #define TMP112A_TLOW_REG 0x02 // 低温阈值寄存器 #define TMP112A_THIGH_REG 0x03 // 高温阈值寄存器 /* Configuration Register Bits */ /******************************************************************************/ #define TMP112A_CONFIG_OS (1 << 15) // One-shot #define TMP112A_CONFIG_R1 (1 << 14) // Converter resolution bit 1 #define TMP112A_CONFIG_R0 (1 << 13) // Converter resolution bit 0 #define TMP112A_CONFIG_F1 (1 << 12) // Fault queue bit 1 #define TMP112A_CONFIG_F0 (1 << 11) // Fault queue bit 0 #define TMP112A_CONFIG_POL (1 << 10) // Polarity #define TMP112A_CONFIG_TM (1 << 9) // Thermostat mode #define TMP112A_CONFIG_SD (1 << 8) // Shutdown #define TMP112A_CONFIG_CR1 (1 << 7) // Conversion rate bit 1 #define TMP112A_CONFIG_CR0 (1 << 6) // Conversion rate bit 0 #define TMP112A_CONFIG_AL (1 << 5) // Alert #define TMP112A_CONFIG_EM (1 << 4) // Extended mode /* Resolution Settings */ /******************************************************************************/ #define TMP112A_RESOLUTION_9BIT 0x0000 // 9-bit (0.5°C) #define TMP112A_RESOLUTION_10BIT 0x2000 // 10-bit (0.25°C) #define TMP112A_RESOLUTION_11BIT 0x4000 // 11-bit (0.125°C) #define TMP112A_RESOLUTION_12BIT 0x6000 // 12-bit (0.0625°C) /* Conversion Rate Settings */ /******************************************************************************/ #define TMP112A_RATE_0_25HZ 0x0000 // 0.25 Hz (4s) #define TMP112A_RATE_1HZ 0x0040 // 1 Hz (1s) #define TMP112A_RATE_4HZ 0x0080 // 4 Hz (250ms) #define TMP112A_RATE_8HZ 0x00C0 // 8 Hz (125ms) /* Default Configuration */ /******************************************************************************/ #define TMP112A_CONFIG_DEFAULT (TMP112A_RESOLUTION_12BIT | TMP112A_RATE_8HZ) /* Temperature Conversion Constants */ /******************************************************************************/ #define TMP112A_TEMP_RESOLUTION 0.0625f // 12-bit resolution (°C/LSB) #define TMP112A_TEMP_MIN -55.0f // 最低温度 (°C) #define TMP112A_TEMP_MAX 125.0f // 最高温度 (°C) /* Status Definitions */ /******************************************************************************/ typedef enum { TMP112A_STATUS_SUCCESS = 0, TMP112A_STATUS_ERROR, TMP112A_STATUS_TIMEOUT, TMP112A_STATUS_INVALID_PARAM, TMP112A_STATUS_OUT_OF_RANGE } tmp112a_status_t; typedef struct { uint16_t raw_data; float temperature_c; float temperature_f; bool alert_flag; } tmp112a_result_t; /******************************************************************************/ /* Function Declarations */ /*! \brief 初始化TMP112A传感器 \param[in] none \param[out] none \retval tmp112a_status_t */ tmp112a_status_t tmp112a_init(void); /*! \brief 配置TMP112A传感器 \param[in] config: 配置值 \param[out] none \retval tmp112a_status_t */ tmp112a_status_t tmp112a_config(uint16_t config); /*! \brief 读取温度 \param[in] none \param[out] result: 结果结构体指针 \retval tmp112a_status_t */ tmp112a_status_t tmp112a_read_temperature(tmp112a_result_t *result); void tmp112a_get_raw_temperature_value(uint8_t *value); /*! \brief 设置温度阈值 \param[in] low_temp: 低温阈值 (°C) \param[in] high_temp: 高温阈值 (°C) \param[out] none \retval tmp112a_status_t */ tmp112a_status_t tmp112a_set_thresholds(float low_temp, float high_temp); /*! \brief 进入关机模式 \param[in] none \param[out] none \retval tmp112a_status_t */ tmp112a_status_t tmp112a_shutdown(void); /*! \brief 退出关机模式 \param[in] none \param[out] none \retval tmp112a_status_t */ tmp112a_status_t tmp112a_wakeup(void); /*! \brief 单次转换 \param[in] none \param[out] result: 结果结构体指针 \retval tmp112a_status_t */ tmp112a_status_t tmp112a_one_shot(tmp112a_result_t *result); /*! \brief 获取状态字符串 \param[in] status: 状态码 \param[out] none \retval const char* 状态字符串 */ const char* tmp112a_get_status_string(tmp112a_status_t status); #endif //TMP112_H