Перейти до основного вмісту

Модуль TIM MCAL

Підтримувані родини STM32: G4 · U5
Не підтримуються: H5, H7, L4

Цей репозиторій містить драйвер MCAL (Microcontroller Abstraction Layer) для периферії таймерів (TIMx) у мікроконтролерах STM32.
Він пропонує уніфікований і переносимий інтерфейс для роботи з усіма таймерами загального призначення, базовими та розширеними в різних родинах STM32.

Кожна родина STM32 підтримується в окремій гілці цього репозиторію:

  • STM32G4
  • STM32U5
  • STM32L4
  • STM32H5
  • та інші за потреби.

📘 Огляд​

Драйвер TIM MCAL абстрагує периферію таймерів STM32 до узгодженого, незалежного від апаратури інтерфейсу.
Він дає змогу виконувати ініціалізацію, конфігурацію та керування під час виконання для всіх каналів і режимів таймерів, таких як:

  • Input Capture / Output Compare
  • Генерація PWM
  • Режими одного імпульсу (one-pulse) і базового таймера (time-base)
  • Режим енкодера
  • Робота через DMA та переривання

Усі апаратно-специфічні конфігурації (налаштування RCC, альтернативні функції GPIO, обробка переривань тощо) виконуються всередині цього модуля.

✅ Користувачеві не потрібно підключати чи використовувати жодні додаткові модулі, як-от драйвери RCC, GPIO або NVIC.
Усе необхідне для роботи таймерів уже включено і автоматично ініціалізується модулем TIM.


🧩 Архітектура​

Архітектура відповідає стандартній багаторівневій структурі MCAL, що використовується в усіх репозиторіях STM32 MCAL:

┌────────────────────────────┐
│ Application │
└────────────┬───────────────┘
│
┌────────────▼───────────────┐
│ HAL │
│(Hardware Abstraction Layer)│
└────────────┬───────────────┘
┌────────────▼───────────────┐
│ MCAL - Tim │
│ ├── Tim_Port.h │
│ ├── Tim_Types.h │
│ └── Tim.c/.h │
└────────────┬───────────────┘
│
┌────────────▼───────────────┐
│ RAL │
│(Register Abstraction Layer)│
└────────────────────────────┘

🧠 Рекомендації щодо використання​

Користувач має взаємодіяти лише з такими двома публічними заголовками:

ФайлПризначення
Tim_Port.hМістить усі функції публічного API для керування таймерами (ініціалізація, запуск, зупинка, встановлення коефіцієнта заповнення, зчитування лічильника тощо)
Tim_Types.hМістить визначення типів і перелічення, що використовуються в API (ідентифікатори таймерів, номери каналів, структури конфігурації тощо)

Усе інше — файли конфігурації, статичні таблиці, допоміжні функції — є внутрішнім і не повинно використовуватися напряму.


⚙️ Типовий приклад використання​

#include "Tim_Port.h"

int main(void)
{
// Initialize timer TIM2 for PWM mode on channel 1
tim_PeriphConfig_t pwmConfig =
{
.PeriphId = TIM_PERIPH_1;
.ClockSource = TIM_CLOCKSOURCE_INT_CLK;
.SlaveMode = TIM_SLAVE_MODE_DISABLE;
.TimerFrequency = 10000000u;
.AutoreloadPreloadState = TIM_FUNCTION_INACTIVE;
.UpdateEventState = TIM_FUNCTION_INACTIVE;
.CounterDirection = TIM_COUNTER_DIR_UP;
...
};

Tim_Init(&pwmConfig);
Tim_Start(TIM_PERIPH_1);

while (1)
{
// Change duty cycle dynamically
Tim_Set_PwmMode_DutyCycle(TIM_PERIPH_1, TIM_CHANNEL_1, 75U);
}
}

🧾 Стратегія гілкування​

Кожна родина STM32 має власну гілку:

ГілкаОпис
STM32G4Драйвер MCAL для родини STM32G4
STM32U5Драйвер MCAL для родини STM32U5
STM32L4Драйвер MCAL для родини STM32L4
STM32H5Драйвер MCAL для родини STM32H5

Ці гілки містять специфічні для родини визначення регістрів, відображення каналів і прив'язки до RCC/GPIO, зберігаючи спільний інтерфейс.


🧩 Залежності​

  • Nvic_Lib – базові визначення та обробка переривань
  • Rcc_Lib – визначення тактування
  • Gpio_Lib – визначення GPIO
  • RAL (Register Abstraction Layer) – використовується всередині для доступу до низькорівневих регістрів

Усі обов'язкові конфігурації RCC і GPIO обробляються всередині.


🧱 Приклад структури каталогів​

Tim/
├── Tim_Port.h
├── Tim_Types.h
├── Tim.c
├── Tim.h
├── CMakeLists.txt
└── README.md

🛠 Інтеграція з CMake​

  1. Додайте Tim_Lib до вашої CMake-бібліотеки.
  2. Підключіть Tim_Port.h у вашому проєкті.
  3. Злінкуйте з файлами реалізації модуля Tim.
  4. Налаштуйте модуль відповідно до вашого апаратного забезпечення.

Ліцензія​

Цей проєкт ліцензовано за Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).

Ви вільні використовувати, змінювати та поширювати цю роботу в некомерційних цілях за умови належного зазначення авторства.

Повні умови дивіться у LICENSE.md або на creativecommons.org/licenses/by-nc/4.0.


Автори​

Внески вітаються! Будь ласка, відкрийте pull request.