Přeskočit na hlavní obsah

Modul MCAL TIM

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

Tento repozitář poskytuje ovladač MCAL (Microcontroller Abstraction Layer) pro periferie časovačů (TIMx) používané v mikrokontrolérech STM32.
Nabízí jednotné a přenositelné rozhraní pro práci se všemi univerzálními, základními i pokročilými časovači napříč různými rodinami STM32.

Každá rodina STM32 je podporována ve vyhrazené větvi tohoto repozitáře:

  • STM32G4
  • STM32U5
  • STM32L4
  • STM32H5
  • a další podle potřeby.

📘 Přehled​

Ovladač TIM MCAL abstrahuje periferie časovačů STM32 do konzistentního rozhraní nezávislého na hardwaru.
Umožňuje inicializaci, konfiguraci a řízení za běhu pro všechny kanály a režimy časovačů, například:

  • Input Capture / Output Compare
  • Generování PWM
  • Režim one-pulse a časová základna (time-base)
  • Režim enkodéru
  • Provoz pomocí DMA a přerušení

Veškeré hardwarově specifické konfigurace (nastavení RCC, alternativní funkce GPIO, obsluha přerušení atd.) zajišťuje tento modul interně.

✅ Uživatel nemusí zahrnovat ani používat žádné další moduly, například ovladače RCC, GPIO nebo NVIC.
Vše potřebné pro funkci časovačů je již zahrnuto a modul TIM to automaticky inicializuje.


🧩 Architektura​

Architektura odpovídá standardnímu vrstvení MCAL používanému ve všech repozitářích MCAL pro STM32:

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

🧠 Pokyny k použití​

Uživatel smí pracovat pouze s následujícími dvěma veřejnými hlavičkovými soubory:

SouborÚčel
Tim_Port.hObsahuje všechny funkce veřejného API pro řízení časovačů (inicializace, start, stop, nastavení střídy, čtení čítače atd.)
Tim_Types.hObsahuje definice typů a výčtů používaných v API (ID časovačů, čísla kanálů, konfigurační struktury atd.)

Vše ostatní — konfigurační soubory, statické tabulky, pomocné funkce — je interní a nesmí se k tomu přistupovat přímo.


⚙️ Typický příklad použití​

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

🧾 Strategie větvení​

Každá rodina STM32 má vlastní větev:

VětevPopis
STM32G4Ovladač MCAL pro rodinu STM32G4
STM32U5Ovladač MCAL pro rodinu STM32U5
STM32L4Ovladač MCAL pro rodinu STM32L4
STM32H5Ovladač MCAL pro rodinu STM32H5

Tyto větve obsahují definice registrů, mapování kanálů a vazby na RCC/GPIO specifické pro danou rodinu, a přitom zachovávají společné rozhraní.


🧩 Závislosti​

  • Nvic_Lib – pro základní definice a obsluhu přerušení
  • Rcc_Lib – pro definice hodin
  • Gpio_Lib – pro definice GPIO
  • RAL (Register Abstraction Layer) – používá se interně pro přístup k nízkoúrovňovým registrům

Veškerá povinná konfigurace RCC a GPIO se provádí interně.


🧱 Příklad adresářové struktury​

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

🛠 Integrace s CMake​

  1. Zahrňte Tim_Lib do své knihovny CMake.
  2. Zahrňte Tim_Port.h do svého projektu.
  3. Prolinkujte implementační soubory modulu Tim.
  4. Nakonfigurujte modul podle potřeb vašeho hardwaru.

Licence​

Tento projekt je licencován pod licencí Creative Commons Uveďte původ–Neužívejte komerčně 4.0 Mezinárodní (CC BY-NC 4.0).

Toto dílo můžete volně používat, upravovat a sdílet pro nekomerční účely za předpokladu, že uvedete odpovídající autorství.

Úplné podmínky najdete v LICENSE.md nebo navštivte creativecommons.org/licenses/by-nc/4.0.


Autoři​

Příspěvky jsou vítány! Otevřete prosím pull request.