Modul MCAL TIM
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:
STM32G4STM32U5STM32L4STM32H5- 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.h | Obsahuje všetky funkcie verejného API na riadenie časovačov (inicializácia, štart, stop, nastavenie striedy, čítanie čítača atď.) |
Tim_Types.h | Obsahuje 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:
| Vetva | Popis |
|---|---|
STM32G4 | Ovládač MCAL pre rodinu STM32G4 |
STM32U5 | Ovládač MCAL pre rodinu STM32U5 |
STM32L4 | Ovládač MCAL pre rodinu STM32L4 |
STM32H5 | Ovlá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
- Zahrňte
Tim_Libdo svojej knižnice CMake. - Zahrňte
Tim_Port.hdo svojho projektu. - Prilinkujte implementačné súbory modulu Tim.
- 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
- Mr.Nobody — embedbits.com
Príspevky sú vítané! Otvorte prosím pull request.