Модуль TIM MCAL
Підтримувані родини STM32: G4 · U5
Не підтримуються: H5, H7, L4
Цей репозиторій містить драйвер MCAL (Microcontroller Abstraction Layer) для периферії таймерів (TIMx) у мікроконтролерах STM32.
Він пропонує уніфікований і переносимий інтерфейс для роботи з усіма таймерами загального призначення, базовими та розширеними в різних родинах STM32.
Кожна родина STM32 підтримується в окремій гілці цього репозиторію:
STM32G4STM32U5STM32L4STM32H5- та інші за потреби.
📘 Огляд
Драйвер 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
- Додайте
Tim_Libдо вашої CMake-бібліотеки. - Підключіть
Tim_Port.hу вашому проєкті. - Злінкуйте з файлами реалізації модуля Tim.
- Налаштуйте модуль відповідно до вашого апаратного забезпечення.
Ліцензія
Цей проєкт ліцензовано за Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).
Ви вільні використовувати, змінювати та поширювати цю роботу в некомерційних цілях за умови належного зазначення авторства.
Повні умови дивіться у LICENSE.md або на creativecommons.org/licenses/by-nc/4.0.
Автори
- Mr.Nobody — embedbits.com
Внески вітаються! Будь ласка, відкрийте pull request.