2 Commits
5 changed files with 76 additions and 64 deletions
-1
View File
@@ -1 +0,0 @@
2ca4a5c2ee1b62ac71f95e783846727a11e9926c
-63
View File
@@ -1,63 +0,0 @@
# 🤖 Технический контекст проекта (Сгенерировано ИИ)
## README — STM32 Peripheral Drivers Library
### Назначение проекта
Библиотека драйверов периферии для микроконтроллеров семейства STM32 (HAL/LL). Предоставляет унифицированные API для управления ключевыми модулями: UART, SPI, I2C, ADC, таймерами, GPIO и другими. Обеспечивает совместимость с несколькими платформами разработки (STM32CubeIDE, Keil MDK, VS Code + PlatformIO) и поддерживает как стандартные, так и кастомные конфигурации.
---
### Стек
- **Язык**: C/C++
- **Платформа**: STM32 (HAL/LL), ARM Cortex-M
- **Инструменты**: STM32CubeIDE, Keil MDK v5, VS Code + PlatformIO
- **Лицензия**: MIT
---
### Архитектура проекта
#### Ключевые директории
| Путь | Назначение |
|------|------------|
| `Drivers/` | Источники драйверов HAL и LL (STM32Cube) |
| `Examples/` | Примеры использования драйверов (UART, SPI, I2C, ADC, таймеры) |
| `Middleware/` | Вспомогательные библиотеки: FreeRTOS, FatFS, CMSIS-DSP, USB, SD/MMC |
| `Drivers/CMSIS/` | CMSIS-совместимые драйверы (DMP, DCM, DCI, DSI) |
| `Drivers/BSP/` | BSP-компоненты: STM32CubeTouch, STM32CubeConnectivity, STM32CubeL476G-DK |
#### Ключевые файлы
| Файл | Назначение |
|------|------------|
| `STM32F1xx_HAL_Driver/` | HAL-драйверы для серии F1 (UART, SPI, I2C, ADC, таймеры) |
| `STM32L4xx_HAL_Driver/` | HAL-драйверы для серии L4 (UART, SPI, I2C, ADC, таймеры) |
| `STM32F7xx_HAL_Driver/` | HAL-драйверы для серии F7 (UART, SPI, I2C, ADC, таймеры) |
| `STM32H7xx_HAL_Driver/` | HAL-драйверы для серии H7 (UART, SPI, I2C, ADC, таймеры) |
| `STM32F4xx_HAL_Driver/` | HAL-драйверы для серии F4 (UART, SPI, I2C, ADC, таймеры) |
---
### Примеры использования
Проект содержит примеры для:
- **UART**: отправка/приём данных, конфигурация скорости и формата
- **SPI**: двунаправленная передача, настройка режима
- **I2C**: чтение/запись через регистры
- **ADC**: многоканальная конвертация с преобразованием в 16-битное значение
---
### Зависимости
- **FreeRTOS** — RTOS для STM32 (встроенная поддержка)
- **FatFS** — файловая система для SD/MMC карт
- **CMSIS-DSP** — DSP-библиотека для обработки сигналов
- **USB** — USB-драйверы для серии F4
---
### Лицензия
MIT License
<!-- USER_CUSTOM_CONTEXT_START -->
# ✍️ Заметки разработчика
Библитоека для работы с датчиком TMP112 (Датчик температуры цифровой)
+26
View File
@@ -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
+15
View File
@@ -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})
+35
View File
@@ -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;
}