From 2a36155d8ead62dc2a1aa61512bca75bc7427557 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 24 Mar 2026 23:33:42 +0300 Subject: [PATCH 1/2] Initial commit --- Inc/DS_TMP112.h | 21 +++++++++++++++++++++ README.md | 15 +++++++++++++++ Src/DS_TMP112.c | 1 + 3 files changed, 37 insertions(+) create mode 100644 Inc/DS_TMP112.h create mode 100644 Src/DS_TMP112.c diff --git a/Inc/DS_TMP112.h b/Inc/DS_TMP112.h new file mode 100644 index 0000000..4fe98ab --- /dev/null +++ b/Inc/DS_TMP112.h @@ -0,0 +1,21 @@ +#ifndef DS_TMP112_H +#define DS_TMP112_H + +#ifdef STM32G030xx + #include "stm32g0xx_hal.h" +#endif + +#ifdef STM32F030xx + #include "stm32f0xx_hal.h" +#endif + +#ifdef STM32F103xB + #include "stm32f1xx_hal.h" +#endif + +#ifdef STM32L152xC + #include "stm32l1xx_hal.h" +#endif + + +#endif //DS_TMP112_H \ No newline at end of file diff --git a/README.md b/README.md index 6421aa6..95151ec 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,17 @@ # TMP112 +Для добавления в проект: +git submodule add https://git.domstudent.ru/Library/DS_TMP112 + +Затем добавляем в корневой CMakeLists.txt + +# Library folder +set(DS_Include_Dirs + ${CMAKE_SOURCE_DIR}/Library/DS_TMP112/Inc +) +target_include_directories(stm32cubemx INTERFACE ${DS_Include_Dirs}) + +set(DS_Application_Src + ${CMAKE_SOURCE_DIR}/Library/DS_TMP112/Src/DS_TMP112.c +) +target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${DS_Application_Src}) \ No newline at end of file diff --git a/Src/DS_TMP112.c b/Src/DS_TMP112.c new file mode 100644 index 0000000..8d65019 --- /dev/null +++ b/Src/DS_TMP112.c @@ -0,0 +1 @@ +#include \ No newline at end of file -- 2.47.3 From 76df3b7bf9be046a6ff058f06e5f0d0a19bc5e9d Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 30 Jun 2026 14:06:38 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20=D0=92=D0=BE?= =?UTF-8?q?=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D1=82=20=D1=82=D0=B5?= =?UTF-8?q?=D0=BC=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D1=83=D1=80=D1=83=20=D0=B2?= =?UTF-8?q?=20=D0=BC=D0=B8=D0=BB=D0=BB=D0=B8=D0=B3=D1=80=D0=B0=D0=B4=D1=83?= =?UTF-8?q?=D1=81=D0=B0=D1=85=20=D0=A6=D0=B5=D0=BB=D1=8C=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/DS_TMP112.h | 5 +++++ Src/DS_TMP112.c | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Inc/DS_TMP112.h b/Inc/DS_TMP112.h index 4fe98ab..4b5d7bd 100644 --- a/Inc/DS_TMP112.h +++ b/Inc/DS_TMP112.h @@ -17,5 +17,10 @@ #include "stm32l1xx_hal.h" #endif +/** + * Возвращает температуру в миллиградусах Цельсия (1/1000 °C) + * Пример: 25500 означает 25.5°C + */ +int32_t DS_TMP112_ReadTemperature(I2C_HandleTypeDef *hi2c); #endif //DS_TMP112_H \ No newline at end of file diff --git a/Src/DS_TMP112.c b/Src/DS_TMP112.c index 8d65019..5a0e793 100644 --- a/Src/DS_TMP112.c +++ b/Src/DS_TMP112.c @@ -1 +1,35 @@ -#include \ No newline at end of file +#include + +int32_t DS_TMP112_ReadTemperature(I2C_HandleTypeDef *hi2c) +{ + // Адрес TMP112 (обычно 0x48 << 1, если ножка ADD0 на GND) + #define TMP112_ADDR (0x48 << 1) + #define TMP112_REG_TEMP 0x00 + + uint8_t data[2]; + int16_t raw; + + // Читаем 2 байта из регистра температуры + if (HAL_I2C_Mem_Read(hi2c, TMP112_ADDR, TMP112_REG_TEMP, I2C_MEMADD_SIZE_8BIT, data, 2, 100) != HAL_OK) { + return -999000; // Ошибка чтения + } + + // Объединяем байты: MSB — это целая часть, LSB — дробная (4 верхних бита) + raw = (data[0] << 4) | (data[1] >> 4); + + // Поддержка отрицательных температур (12-битное число с дополнением до 2) + if (raw > 0x7FF) { + raw -= 4096; + } + + // Шаг датчика 0.0625°C (или raw / 16) + //return (float)raw * 0.0625f; + + + // Расчет в целых числах: + // Один шаг (LSB) = 0.0625°C = 1/16°C + // Чтобы получить миллиградусы: (raw * 1000) / 16 + // Это эквивалентно: raw * 62.5. Используем raw * 125 / 2 + return (int32_t)raw * 125 / 2; + +} \ No newline at end of file -- 2.47.3