Modul MCAL TIM
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:
STM32G4STM32U5STM32L4STM32H5- 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.h | Obsahuje všechny funkce veřejného API pro řízení časovačů (inicializace, start, stop, nastavení střídy, čtení čítače atd.) |
Tim_Types.h | Obsahuje 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ětev | Popis |
|---|---|
STM32G4 | Ovladač MCAL pro rodinu STM32G4 |
STM32U5 | Ovladač MCAL pro rodinu STM32U5 |
STM32L4 | Ovladač MCAL pro rodinu STM32L4 |
STM32H5 | Ovladač 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
- Zahrňte
Tim_Libdo své knihovny CMake. - Zahrňte
Tim_Port.hdo svého projektu. - Prolinkujte implementační soubory modulu Tim.
- 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
- Mr.Nobody — embedbits.com
Příspěvky jsou vítány! Otevřete prosím pull request.