Preskočiť na hlavný obsah

Modul MCAL TIM

Podporované rodiny STM32: G4 · U5
Nepodporované: H5, H7, L4

Tento repozitár poskytuje ovládač MCAL (Microcontroller Abstraction Layer) pre periférie časovačov (TIMx) používané v mikrokontroléroch STM32.
Ponúka jednotné a prenosné rozhranie na prácu so všetkými časovačmi všeobecného určenia, základnými aj pokročilými, naprieč rôznymi rodinami STM32.

Každá rodina STM32 je podporovaná v dedikovanej vetve tohto repozitára:

  • STM32G4
  • STM32U5
  • STM32L4
  • STM32H5
  • a ďalšie podľa potreby.

📘 Prehľad​

Ovládač TIM MCAL abstrahuje periférie časovačov STM32 do konzistentného rozhrania nezávislého od hardvéru.
Umožňuje inicializáciu, konfiguráciu a riadenie za behu pre všetky kanály a režimy časovačov, ako sú:

  • Input Capture / Output Compare
  • Generovanie PWM
  • Režim jedného impulzu (one-pulse) a režim časovej základne (time-base)
  • Režim encodera
  • Prevádzka založená na DMA a prerušeniach

Všetky hardvérovo špecifické konfigurácie (nastavenie RCC, alternatívne funkcie GPIO, spracovanie prerušení atď.) rieši tento modul interne.

✅ Používateľ nemusí zahŕňať ani používať žiadne ďalšie moduly, ako sú ovládače RCC, GPIO alebo NVIC.
Všetko potrebné na fungovanie časovačov je už zahrnuté a modul TIM to automaticky inicializuje.


🧩 Architektúra​

Architektúra sleduje štandardné vrstvenie MCAL používané vo všetkých repozitároch STM32 MCAL:

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

🧠 Pokyny k použitiu​

Používateľ má pracovať výlučne s nasledujúcimi dvoma verejnými hlavičkami:

SúborÚčel
Tim_Port.hObsahuje všetky funkcie verejného API na riadenie časovačov (inicializácia, štart, stop, nastavenie striedy, čítanie čítača atď.)
Tim_Types.hObsahuje definície typov a enumerácie používané v API (ID časovačov, čísla kanálov, konfiguračné štruktúry atď.)

Všetko ostatné — konfiguračné súbory, statické tabuľky, pomocné funkcie — je interné a nesmie sa k tomu pristupovať priamo.


⚙️ Typický príklad použitia​

#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);
}
}

🧾 Stratégia vetvenia​

Každá rodina STM32 má vlastnú vetvu:

VetvaPopis
STM32G4Ovládač MCAL pre rodinu STM32G4
STM32U5Ovládač MCAL pre rodinu STM32U5
STM32L4Ovládač MCAL pre rodinu STM32L4
STM32H5Ovládač MCAL pre rodinu STM32H5

Tieto vetvy obsahujú definície registrov špecifické pre rodinu, mapovanie kanálov a väzby RCC/GPIO a pritom zachovávajú spoločné rozhranie.


🧩 Závislosti​

  • Nvic_Lib – Pre základné definície a spracovanie prerušení
  • Rcc_Lib – Pre definície hodín
  • Gpio_Lib – Pre definície GPIO
  • RAL (Register Abstraction Layer) – Používa sa interne na prístup k nízkoúrovňovým registrom

Všetky povinné konfigurácie RCC a GPIO sa riešia interne.


🧱 Príklad adresárovej štruktúry​

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

🛠 Integrácia s CMake​

  1. Zahrňte Tim_Lib do svojej knižnice CMake.
  2. Zahrňte Tim_Port.h do svojho projektu.
  3. Prilinkujte implementačné súbory modulu Tim.
  4. Nakonfigurujte modul podľa potrieb vášho hardvéru.

Licencia​

Tento projekt je licencovaný pod licenciou Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).

Toto dielo môžete slobodne používať, upravovať a zdieľať na nekomerčné účely, pokiaľ uvediete primeraný zdroj.

Úplné znenie podmienok nájdete v LICENSE.md alebo na creativecommons.org/licenses/by-nc/4.0.


Autori​

Príspevky sú vítané! Otvorte prosím pull request.