HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
StmPeriodicTimer.h
Go to the documentation of this file.
1
15#pragma once
16
17#include "BasePeriodicTimer.h"
18#include "StmTypes.h"
19
20struct TIM_HandleTypeDef; // Forward declaration
21
33public:
34
42 explicit StmPeriodicTimer(TIM_HandleTypeDef* htim,
43 hf_u32_t timer_clock_hz,
44 hf_timer_callback_t callback = nullptr,
45 void* user_data = nullptr) noexcept;
46
50 explicit StmPeriodicTimer(const hf_stm32_timer_config_t& config,
51 hf_timer_callback_t callback = nullptr,
52 void* user_data = nullptr) noexcept;
53
54 ~StmPeriodicTimer() noexcept override;
55
56 // Non-copyable, non-movable
59
60 // ── Pure‑virtual overrides ──────────────────────────────────────────────
61 hf_timer_err_t Initialize() noexcept override;
62 hf_timer_err_t Deinitialize() noexcept override;
63 hf_timer_err_t Start(hf_u64_t period_us) noexcept override;
64 hf_timer_err_t Stop() noexcept override;
65 hf_timer_err_t SetPeriod(hf_u64_t period_us) noexcept override;
66 hf_timer_err_t GetPeriod(hf_u64_t& period_us) noexcept override;
67 hf_timer_err_t GetStats(hf_u64_t& callback_count,
68 hf_u64_t& missed_callbacks,
69 hf_timer_err_t& last_error) noexcept override;
70 hf_timer_err_t ResetStats() noexcept override;
71 const char* GetDescription() const noexcept override;
72 hf_u64_t GetMaxPeriod() const noexcept override;
73 hf_u64_t GetMinPeriod() const noexcept override;
74 hf_u64_t GetResolution() const noexcept override;
75
76 // ── Statistics / Diagnostics overrides ──────────────────────────────────
77 hf_timer_err_t GetStatistics(hf_timer_statistics_t& statistics) const noexcept override;
78 hf_timer_err_t GetDiagnostics(hf_timer_diagnostics_t& diagnostics) const noexcept override;
79
80 // ── ISR Dispatch ────────────────────────────────────────────────────────
91 static void IsrDispatch(TIM_HandleTypeDef* htim) noexcept;
92
93private:
94 TIM_HandleTypeDef* htim_;
98
100 bool ApplyPeriod(hf_u64_t period_us) noexcept;
101
102 // ── Static dispatch table ───────────────────────────────────────────────
103 static constexpr int kMaxTimerInstances = 8;
105 TIM_HandleTypeDef* htim;
107 };
110
111 void RegisterDispatch() noexcept;
112 void UnregisterDispatch() noexcept;
113};
Abstract base class for periodic timer implementations in the HardFOC system.
hf_timer_err_t
Definition BasePeriodicTimer.h:65
void(*)(void *user_data) hf_timer_callback_t
Timer callback function type.
Definition BasePeriodicTimer.h:146
uint32_t hf_u32_t
Platform-agnostic 32-bit unsigned integer type.
Definition HardwareTypes.h:52
uint64_t hf_u64_t
Platform-agnostic 64-bit unsigned integer type.
Definition HardwareTypes.h:58
STM32 platform-specific type definitions for hardware abstraction.
Abstract base class for periodic timer operations.
Definition BasePeriodicTimer.h:168
STM32 Periodic Timer implementation.
Definition StmPeriodicTimer.h:32
hf_u64_t period_us_
Current period in µs.
Definition StmPeriodicTimer.h:96
const char * GetDescription() const noexcept override
Get description of this timer implementation.
Definition StmPeriodicTimer.cpp:208
hf_timer_stats_t stats_
Internal stats.
Definition StmPeriodicTimer.h:97
StmPeriodicTimer(TIM_HandleTypeDef *htim, hf_u32_t timer_clock_hz, hf_timer_callback_t callback=nullptr, void *user_data=nullptr) noexcept
Construct from CubeMX timer handle.
Definition StmPeriodicTimer.cpp:46
bool ApplyPeriod(hf_u64_t period_us) noexcept
Recalculate and apply PSC+ARR for the requested period.
Definition StmPeriodicTimer.cpp:236
hf_timer_err_t GetStats(hf_u64_t &callback_count, hf_u64_t &missed_callbacks, hf_timer_err_t &last_error) noexcept override
Get timer statistics and status information.
Definition StmPeriodicTimer.cpp:174
hf_timer_err_t GetPeriod(hf_u64_t &period_us) noexcept override
Get the current timer period.
Definition StmPeriodicTimer.cpp:164
hf_timer_err_t GetStatistics(hf_timer_statistics_t &statistics) const noexcept override
Get timer operation statistics.
Definition StmPeriodicTimer.cpp:190
hf_u64_t GetResolution() const noexcept override
Get timer resolution.
Definition StmPeriodicTimer.cpp:225
void UnregisterDispatch() noexcept
Definition StmPeriodicTimer.cpp:301
static DispatchEntry s_dispatch_[kMaxTimerInstances]
Definition StmPeriodicTimer.h:39
TIM_HandleTypeDef * htim_
HAL timer handle.
Definition StmPeriodicTimer.h:94
hf_timer_err_t GetDiagnostics(hf_timer_diagnostics_t &diagnostics) const noexcept override
Get timer diagnostic information.
Definition StmPeriodicTimer.cpp:195
hf_timer_err_t Deinitialize() noexcept override
Deinitialize the timer and free resources.
Definition StmPeriodicTimer.cpp:88
hf_u64_t GetMaxPeriod() const noexcept override
Get minimum supported timer period.
Definition StmPeriodicTimer.cpp:212
hf_timer_err_t ResetStats() noexcept override
Reset timer statistics.
Definition StmPeriodicTimer.cpp:184
~StmPeriodicTimer() noexcept override
Definition StmPeriodicTimer.cpp:69
void RegisterDispatch() noexcept
Definition StmPeriodicTimer.cpp:294
static void IsrDispatch(TIM_HandleTypeDef *htim) noexcept
Call from HAL_TIM_PeriodElapsedCallback to dispatch to instances.
Definition StmPeriodicTimer.cpp:282
static int s_dispatch_count_
Definition StmPeriodicTimer.h:109
hf_u32_t timer_clock_hz_
Input clock to the timer.
Definition StmPeriodicTimer.h:95
StmPeriodicTimer & operator=(const StmPeriodicTimer &)=delete
hf_timer_err_t Start(hf_u64_t period_us) noexcept override
Start the periodic timer with specified period.
Definition StmPeriodicTimer.cpp:101
hf_timer_err_t SetPeriod(hf_u64_t period_us) noexcept override
Change the timer period while running.
Definition StmPeriodicTimer.cpp:141
hf_timer_err_t Initialize() noexcept override
Initialize the timer hardware/resources.
Definition StmPeriodicTimer.cpp:77
hf_u64_t GetMinPeriod() const noexcept override
Get maximum supported timer period.
Definition StmPeriodicTimer.cpp:219
StmPeriodicTimer(const StmPeriodicTimer &)=delete
hf_timer_err_t Stop() noexcept override
Stop the periodic timer.
Definition StmPeriodicTimer.cpp:125
static constexpr int kMaxTimerInstances
Definition StmPeriodicTimer.h:103
Definition StmPeriodicTimer.h:104
StmPeriodicTimer * instance
Definition StmPeriodicTimer.h:106
TIM_HandleTypeDef * htim
Definition StmPeriodicTimer.h:105
Periodic timer configuration for STM32.
Definition StmTypes.h:479
Timer diagnostic information.
Definition BasePeriodicTimer.h:126
Timer operation statistics.
Definition BasePeriodicTimer.h:107
Timer statistics structure.
Definition BasePeriodicTimer.h:91