/** 
**************************************************************************
* @file mylibs_include.h
* @brief Заголочный файл для всех библиотек
**************************************************************************
* @details
Здесь нужно собрать библиотеки и дефайны, которые должны быть видны во всем проекте,
чтобы не подключать 100 инклюдов в каждом ".c" файле
**************************************************************************
* @defgroup MYLIBS_ALL      My Libs
* @brief    Все используемые MyLibs библиотеки
* @details
Для подключения библиотеки необходимо:
- Сконфигурировать mylibs_config.h:
  - Подключить заголовочный файл HAL библиотеки конкретного МК (напр. stm32f4xx_hal.h)
  - Подключить другие заголовочные файлы которые общие для всего проекта и должны быть видны
  - 
- Подключить mylibs_include.h туда, где необходим доступ к библиотекам.

* @defgroup MYLIBS_PERIPHERAL Peripheral
* @ingroup  MYLIBS_ALL
* @brief    Модули для управления периферией
*
*************************************************************************/
#ifndef __MYLIBS_INCLUDE_H_
#define __MYLIBS_INCLUDE_H_

#include "mylibs_defs.h"


#ifdef ARM_MATH_CM4
  #include "arm_math.h"
#endif


#ifdef INCLUDE_BIT_ACCESS_LIB
#include "bit_access.h"
#endif

#ifdef INCLUDE_TRACKERS_LIB
#include "trackers.h"
#endif

#ifdef INCLUDE_TRACE_LIB
#include "trace.h"
#endif



#ifdef INCLUDE_GENERAL_PERIPH_LIBS

#include "general_flash.h"
#include "general_gpio.h"
#ifdef HAL_SPI_MODULE_ENABLED
#include "general_spi.h"
#endif
#ifdef HAL_UART_MODULE_ENABLED
#include "general_uart.h"
#endif
#ifdef HAL_TIM_MODULE_ENABLED
#include "general_tim.h"
#endif

#endif //INCLUDE_GENERAL_PERIPH_LIBS




/////////////////////////---USER SETTINGS---/////////////////////////
// user includes

// user settings
/////////////////////////---USER SETTINGS---/////////////////////////


#endif // __MYLIBS_INCLUDE_H_

/**
@mainpage

@section overview Обзор
MyLibs - это набор библиотек для удобной работы с периферией микроконтроллеров STM32.

@subsection features Основные возможности

@subsubsection utils_module Общие утилиты @ref MYLIBS_DEFINES
- Битовый доступ к регистрам через union
- Трекеры для статистики и отладки
- Макросы для задержек и утилит
- Поддержка FreeRTOS

@subsubsection trace_module Трассировка @ref TRACE

- Serial трассировка через SWO и RTT
- GPIO трассировка для отладки
- Сохранение логов в Flash память
- Обработка HardFault с сохранением контекста

@subsubsection gpio_module Модуль GPIO @ref MY_LIBS_GPIO
- Управление светодиодами (включение/выключение, моргание, плавное затухание)
- Работа с кнопками (чтение состояния, фильтрация дребезга)
- Инициализация портов и тактирования
- Поддержка альтернативных функций

@subsubsection tim_module Модуль таймеров @ref MY_LIBS_TIM

- Базовая инициализация таймеров
- Режимы прерываний
- Формирование задержек (блокирующие и неблокирующие)
- Работа с энкодерами (чтение положения, обработка кнопок)
- Настройка ШИМ и Output Compare


@subsection structure Структура проекта

@code
├── inc/                     # Заголовочные файлы
│   ├── mylibs_include.h     # Главный include файл
│   ├── mylibs_config.h      # Конфигурация библиотек
│   ├── mylibs_defs.h        # Общие определения и макросы
│   ├── bit_access.h         # Битовый доступ к регистрам
│   ├── trackers.h           # Трекеры для отладки
│   ├── trace.h              # Трассировка и логирование
│   ├── general_gpio.h       # Работа с GPIO
│   └── general_tim.h        # Работа с таймерами
└── src/                     # Исходные файлы
    ├── general_gpio.c       # Реализация GPIO
    └── general_tim.c        # Реализация TIM
@endcode

@subsection usage_basic Использование

Инструкция по подключению:

1. Настройте конфигурацию @ref MYLIBS_CONFIG в @ref mylibs_config.h 

2. Подключите главный заголовочный файл:
@code
#include "mylibs_include.h"
@endcode

3. Используйте нужные модули в своем коде

@subsubsection gpio_example Пример работы с GPIO

@code
// Инициализация светодиода
MX_GPIO_Init();
GPIO_LEDTypeDef led;
GPIO_LED_Init(&led, GPIOA, GPIO_PIN_5, 1);

// Включение светодиода
GPIO_LED_On(&led);

// Запуск моргания
GPIO_LED_Blink_Start(&led, 500); // Период 500 мс

// В основном цикле
while (1) {
GPIO_LED_Dynamic_Handle(&led);
}
@endcode

@subsubsection tim_example Пример работы с таймером

@code
// Настройка таймера
TIM_SettingsTypeDef tim_settings = {0};
tim_settings.htim.Instance = TIM2;
tim_settings.sTimAHBFreqMHz = SystemCoreClock;
tim_settings.sTickBaseUS = TIM_TickBase_1MS;
tim_settings.sTimFreqHz = 1000; // 1 кГц
tim_settings.sTimMode = TIM_IT_CONF;

TIM_Base_Init(&tim_settings);
HAL_TIM_Base_Start(&tim_settings.htim);
@endcode

@subsection dependencies Зависимости

- HAL библиотека STM32
- SEGGER RTT (опционально, для RTT трассировки)
- FreeRTOS (опционально, для FreeRTOS задержек)
 */