Compare commits
2
Commits
ai-context
...
Dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76df3b7bf9 | ||
|
|
2a36155d8e |
@@ -0,0 +1,26 @@
|
|||||||
|
#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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает температуру в миллиградусах Цельсия (1/1000 °C)
|
||||||
|
* Пример: 25500 означает 25.5°C
|
||||||
|
*/
|
||||||
|
int32_t DS_TMP112_ReadTemperature(I2C_HandleTypeDef *hi2c);
|
||||||
|
|
||||||
|
#endif //DS_TMP112_H
|
||||||
@@ -1,2 +1,17 @@
|
|||||||
# TMP112
|
# 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})
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
#include <DS_TMP112.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user