-
Notifications
You must be signed in to change notification settings - Fork 0
/
TIM_ex.h
96 lines (78 loc) · 3.49 KB
/
TIM_ex.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*!\file TIM_ex.h
** \author SMFSW
** \copyright MIT (c) 2017-2024, SMFSW
** \brief Extensions for TIM peripherals
** \warning Init functions assume that TIM peripherals instance were already configured by HAL
** \warning Shall work for all STM32 F/G/H/L families only (yet)
** \note TIM_MIN_GRANULARITY can defined at project level to tweak to needed minimum granularity
**/
/****************************************************************/
#ifndef __TIM_EX_H
#define __TIM_EX_H
#ifdef __cplusplus
extern "C" {
#endif
#include "sarmfsw.h"
#if defined(HAL_TIM_MODULE_ENABLED)
/****************************************************************/
// *****************************************************************************
// Section: Interface Routines
// *****************************************************************************
/*!\brief Get TIM peripheral clock frequency
** \warning Shall work for all STM32 F/G families, L families not totally covered
** \param[in,out] pTim - pointer to TIM instance
** \return TIM peripheral clock frequency (Hz)
**/
uint32_t NONNULL__ RCC_TIMCLKFreq(const TIM_HandleTypeDef * const pTim);
/*!\brief Write preload bit in TIM module for desired channel
** \param[in,out] pTim - pointer to TIM instance
** \param[in] chan - Channel to write
** \return HAL Status
**/
HAL_StatusTypeDef NONNULL__ write_TIM_Preload(TIM_HandleTypeDef * const pTim, const uint32_t chan);
/*!\brief Low level TIM module CCR write
** \param[in,out] pTim - pointer to TIM instance for PWM generation
** \param[in] chan - Channel to write
** \param[in] CCR_val - CCR value
** \return HAL Status
**/
HAL_StatusTypeDef NONNULL__ write_TIM_CCR(const TIM_HandleTypeDef * const pTim, const uint32_t chan, const uint32_t CCR_val);
/*!\brief Start TIM module interrupts
** \param[in,out] pTim - pointer to TIM instance
** \param[in] on - Time Interrupts 0: off, 1: on
** \return HAL Status
**/
__INLINE HAL_StatusTypeDef NONNULL_INLINE__ set_TIM_Interrupts(TIM_HandleTypeDef * const pTim, const bool on) {
return on ? HAL_TIM_Base_Start_IT(pTim) : HAL_TIM_Base_Stop_IT(pTim); }
/*!\brief De-Init TIM base module (stop interruptions)
** \param[in,out] pTim - pointer to TIM instance
** \return HAL Status
**/
__INLINE HAL_StatusTypeDef NONNULL_INLINE__ deinit_TIM_Base(TIM_HandleTypeDef * const pTim) {
return set_TIM_Interrupts(pTim, Off); } // Stop interrupts
/*!\brief Init TIM module and start interruptions
** \param[in,out] pTim - pointer to TIM instance
** \param[in] freq - Desired TIM frequency
** \return HAL Status
**/
HAL_StatusTypeDef NONNULL__ init_TIM_Base(TIM_HandleTypeDef * const pTim, const uint32_t freq);
/*!\brief Set TIM module frequency
** \param[in,out] pTim - pointer to TIM instance for Frequency computation
** \param[in] freq - Desired TIM frequency
** \return HAL Status
**/
HAL_StatusTypeDef NONNULL__ set_TIM_Freq(TIM_HandleTypeDef * const pTim, const uint32_t freq);
/*!\brief Set TIM module tick frequency
** \note This function sets TIM period to maximum value (which is most likely what is needed in such a configuration case)
** \param[in,out] pTim - pointer to TIM instance for Frequency computation
** \param[in] freq - Desired TIM tick frequency
** \return HAL Status
**/
HAL_StatusTypeDef NONNULL__ set_TIM_Tick_Freq(TIM_HandleTypeDef * const pTim, const uint32_t freq);
/****************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* defined(HAL_TIM_MODULE_ENABLED) */
#endif /* __TIM_EX_H */
/****************************************************************/