1 /**
2   ******************************************************************************
3   * @file    stm32l1xx_hal_tim.h
4   * @author  MCD Application Team
5   * @brief   Header file of TIM HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2016 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32L1xx_HAL_TIM_H
21 #define STM32L1xx_HAL_TIM_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32l1xx_hal_def.h"
29 
30 /** @addtogroup STM32L1xx_HAL_Driver
31   * @{
32   */
33 
34 /** @addtogroup TIM
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 /** @defgroup TIM_Exported_Types TIM Exported Types
40   * @{
41   */
42 
43 /**
44   * @brief  TIM Time base Configuration Structure definition
45   */
46 typedef struct
47 {
48   uint32_t Prescaler;         /*!< Specifies the prescaler value used to divide the TIM clock.
49                                    This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */
50 
51   uint32_t CounterMode;       /*!< Specifies the counter mode.
52                                    This parameter can be a value of @ref TIM_Counter_Mode */
53 
54   uint32_t Period;            /*!< Specifies the period value to be loaded into the active
55                                    Auto-Reload Register at the next update event.
56                                    This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF.  */
57 
58   uint32_t ClockDivision;     /*!< Specifies the clock division.
59                                    This parameter can be a value of @ref TIM_ClockDivision */
60 
61   uint32_t AutoReloadPreload;  /*!< Specifies the auto-reload preload.
62                                    This parameter can be a value of @ref TIM_AutoReloadPreload */
63 } TIM_Base_InitTypeDef;
64 
65 /**
66   * @brief  TIM Output Compare Configuration Structure definition
67   */
68 typedef struct
69 {
70   uint32_t OCMode;        /*!< Specifies the TIM mode.
71                                This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */
72 
73   uint32_t Pulse;         /*!< Specifies the pulse value to be loaded into the Capture Compare Register.
74                                This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */
75 
76   uint32_t OCPolarity;    /*!< Specifies the output polarity.
77                                This parameter can be a value of @ref TIM_Output_Compare_Polarity */
78 
79   uint32_t OCFastMode;    /*!< Specifies the Fast mode state.
80                                This parameter can be a value of @ref TIM_Output_Fast_State
81                                @note This parameter is valid only in PWM1 and PWM2 mode. */
82 } TIM_OC_InitTypeDef;
83 
84 /**
85   * @brief  TIM One Pulse Mode Configuration Structure definition
86   */
87 typedef struct
88 {
89   uint32_t OCMode;        /*!< Specifies the TIM mode.
90                                This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */
91 
92   uint32_t Pulse;         /*!< Specifies the pulse value to be loaded into the Capture Compare Register.
93                                This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */
94 
95   uint32_t OCPolarity;    /*!< Specifies the output polarity.
96                                This parameter can be a value of @ref TIM_Output_Compare_Polarity */
97 
98   uint32_t ICPolarity;    /*!< Specifies the active edge of the input signal.
99                                This parameter can be a value of @ref TIM_Input_Capture_Polarity */
100 
101   uint32_t ICSelection;   /*!< Specifies the input.
102                               This parameter can be a value of @ref TIM_Input_Capture_Selection */
103 
104   uint32_t ICFilter;      /*!< Specifies the input capture filter.
105                               This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
106 } TIM_OnePulse_InitTypeDef;
107 
108 /**
109   * @brief  TIM Input Capture Configuration Structure definition
110   */
111 typedef struct
112 {
113   uint32_t  ICPolarity;  /*!< Specifies the active edge of the input signal.
114                               This parameter can be a value of @ref TIM_Input_Capture_Polarity */
115 
116   uint32_t ICSelection;  /*!< Specifies the input.
117                               This parameter can be a value of @ref TIM_Input_Capture_Selection */
118 
119   uint32_t ICPrescaler;  /*!< Specifies the Input Capture Prescaler.
120                               This parameter can be a value of @ref TIM_Input_Capture_Prescaler */
121 
122   uint32_t ICFilter;     /*!< Specifies the input capture filter.
123                               This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
124 } TIM_IC_InitTypeDef;
125 
126 /**
127   * @brief  TIM Encoder Configuration Structure definition
128   */
129 typedef struct
130 {
131   uint32_t EncoderMode;   /*!< Specifies the active edge of the input signal.
132                                This parameter can be a value of @ref TIM_Encoder_Mode */
133 
134   uint32_t IC1Polarity;   /*!< Specifies the active edge of the input signal.
135                                This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
136 
137   uint32_t IC1Selection;  /*!< Specifies the input.
138                                This parameter can be a value of @ref TIM_Input_Capture_Selection */
139 
140   uint32_t IC1Prescaler;  /*!< Specifies the Input Capture Prescaler.
141                                This parameter can be a value of @ref TIM_Input_Capture_Prescaler */
142 
143   uint32_t IC1Filter;     /*!< Specifies the input capture filter.
144                                This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
145 
146   uint32_t IC2Polarity;   /*!< Specifies the active edge of the input signal.
147                                This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
148 
149   uint32_t IC2Selection;  /*!< Specifies the input.
150                               This parameter can be a value of @ref TIM_Input_Capture_Selection */
151 
152   uint32_t IC2Prescaler;  /*!< Specifies the Input Capture Prescaler.
153                                This parameter can be a value of @ref TIM_Input_Capture_Prescaler */
154 
155   uint32_t IC2Filter;     /*!< Specifies the input capture filter.
156                                This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
157 } TIM_Encoder_InitTypeDef;
158 
159 /**
160   * @brief  Clock Configuration Handle Structure definition
161   */
162 typedef struct
163 {
164   uint32_t ClockSource;     /*!< TIM clock sources
165                                  This parameter can be a value of @ref TIM_Clock_Source */
166   uint32_t ClockPolarity;   /*!< TIM clock polarity
167                                  This parameter can be a value of @ref TIM_Clock_Polarity */
168   uint32_t ClockPrescaler;  /*!< TIM clock prescaler
169                                  This parameter can be a value of @ref TIM_Clock_Prescaler */
170   uint32_t ClockFilter;     /*!< TIM clock filter
171                                  This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
172 } TIM_ClockConfigTypeDef;
173 
174 /**
175   * @brief  TIM Clear Input Configuration Handle Structure definition
176   */
177 typedef struct
178 {
179   uint32_t ClearInputState;      /*!< TIM clear Input state
180                                       This parameter can be ENABLE or DISABLE */
181   uint32_t ClearInputSource;     /*!< TIM clear Input sources
182                                       This parameter can be a value of @ref TIM_ClearInput_Source */
183   uint32_t ClearInputPolarity;   /*!< TIM Clear Input polarity
184                                       This parameter can be a value of @ref TIM_ClearInput_Polarity */
185   uint32_t ClearInputPrescaler;  /*!< TIM Clear Input prescaler
186                                       This parameter must be 0: When OCRef clear feature is used with ETR source,
187                                       ETR prescaler must be off */
188   uint32_t ClearInputFilter;     /*!< TIM Clear Input filter
189                                       This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
190 } TIM_ClearInputConfigTypeDef;
191 
192 /**
193   * @brief  TIM Master configuration Structure definition
194   */
195 typedef struct
196 {
197   uint32_t  MasterOutputTrigger;   /*!< Trigger output (TRGO) selection
198                                         This parameter can be a value of @ref TIM_Master_Mode_Selection */
199   uint32_t  MasterSlaveMode;       /*!< Master/slave mode selection
200                                         This parameter can be a value of @ref TIM_Master_Slave_Mode
201                                         @note When the Master/slave mode is enabled, the effect of
202                                         an event on the trigger input (TRGI) is delayed to allow a
203                                         perfect synchronization between the current timer and its
204                                         slaves (through TRGO). It is not mandatory in case of timer
205                                         synchronization mode. */
206 } TIM_MasterConfigTypeDef;
207 
208 /**
209   * @brief  TIM Slave configuration Structure definition
210   */
211 typedef struct
212 {
213   uint32_t  SlaveMode;         /*!< Slave mode selection
214                                     This parameter can be a value of @ref TIM_Slave_Mode */
215   uint32_t  InputTrigger;      /*!< Input Trigger source
216                                     This parameter can be a value of @ref TIM_Trigger_Selection */
217   uint32_t  TriggerPolarity;   /*!< Input Trigger polarity
218                                     This parameter can be a value of @ref TIM_Trigger_Polarity */
219   uint32_t  TriggerPrescaler;  /*!< Input trigger prescaler
220                                     This parameter can be a value of @ref TIM_Trigger_Prescaler */
221   uint32_t  TriggerFilter;     /*!< Input trigger filter
222                                     This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF  */
223 
224 } TIM_SlaveConfigTypeDef;
225 
226 /**
227   * @brief  HAL State structures definition
228   */
229 typedef enum
230 {
231   HAL_TIM_STATE_RESET             = 0x00U,    /*!< Peripheral not yet initialized or disabled  */
232   HAL_TIM_STATE_READY             = 0x01U,    /*!< Peripheral Initialized and ready for use    */
233   HAL_TIM_STATE_BUSY              = 0x02U,    /*!< An internal process is ongoing              */
234   HAL_TIM_STATE_TIMEOUT           = 0x03U,    /*!< Timeout state                               */
235   HAL_TIM_STATE_ERROR             = 0x04U     /*!< Reception process is ongoing                */
236 } HAL_TIM_StateTypeDef;
237 
238 /**
239   * @brief  TIM Channel States definition
240   */
241 typedef enum
242 {
243   HAL_TIM_CHANNEL_STATE_RESET             = 0x00U,    /*!< TIM Channel initial state                         */
244   HAL_TIM_CHANNEL_STATE_READY             = 0x01U,    /*!< TIM Channel ready for use                         */
245   HAL_TIM_CHANNEL_STATE_BUSY              = 0x02U,    /*!< An internal process is ongoing on the TIM channel */
246 } HAL_TIM_ChannelStateTypeDef;
247 
248 /**
249   * @brief  DMA Burst States definition
250   */
251 typedef enum
252 {
253   HAL_DMA_BURST_STATE_RESET             = 0x00U,    /*!< DMA Burst initial state */
254   HAL_DMA_BURST_STATE_READY             = 0x01U,    /*!< DMA Burst ready for use */
255   HAL_DMA_BURST_STATE_BUSY              = 0x02U,    /*!< Ongoing DMA Burst       */
256 } HAL_TIM_DMABurstStateTypeDef;
257 
258 /**
259   * @brief  HAL Active channel structures definition
260   */
261 typedef enum
262 {
263   HAL_TIM_ACTIVE_CHANNEL_1        = 0x01U,    /*!< The active channel is 1     */
264   HAL_TIM_ACTIVE_CHANNEL_2        = 0x02U,    /*!< The active channel is 2     */
265   HAL_TIM_ACTIVE_CHANNEL_3        = 0x04U,    /*!< The active channel is 3     */
266   HAL_TIM_ACTIVE_CHANNEL_4        = 0x08U,    /*!< The active channel is 4     */
267   HAL_TIM_ACTIVE_CHANNEL_CLEARED  = 0x00U     /*!< All active channels cleared */
268 } HAL_TIM_ActiveChannel;
269 
270 /**
271   * @brief  TIM Time Base Handle Structure definition
272   */
273 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
274 typedef struct __TIM_HandleTypeDef
275 #else
276 typedef struct
277 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
278 {
279   TIM_TypeDef                        *Instance;         /*!< Register base address                             */
280   TIM_Base_InitTypeDef               Init;              /*!< TIM Time Base required parameters                 */
281   HAL_TIM_ActiveChannel              Channel;           /*!< Active channel                                    */
282   DMA_HandleTypeDef                  *hdma[7];          /*!< DMA Handlers array
283                                                              This array is accessed by a @ref DMA_Handle_index */
284   HAL_LockTypeDef                    Lock;              /*!< Locking object                                    */
285   __IO HAL_TIM_StateTypeDef          State;             /*!< TIM operation state                               */
286   __IO HAL_TIM_ChannelStateTypeDef   ChannelState[4];   /*!< TIM channel operation state                       */
287   __IO HAL_TIM_DMABurstStateTypeDef  DMABurstState;     /*!< DMA burst operation state                         */
288 
289 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
290   void (* Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM Base Msp Init Callback                              */
291   void (* Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);            /*!< TIM Base Msp DeInit Callback                            */
292   void (* IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM IC Msp Init Callback                                */
293   void (* IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM IC Msp DeInit Callback                              */
294   void (* OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM OC Msp Init Callback                                */
295   void (* OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM OC Msp DeInit Callback                              */
296   void (* PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim);               /*!< TIM PWM Msp Init Callback                               */
297   void (* PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM PWM Msp DeInit Callback                             */
298   void (* OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim);          /*!< TIM One Pulse Msp Init Callback                         */
299   void (* OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM One Pulse Msp DeInit Callback                       */
300   void (* Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Encoder Msp Init Callback                           */
301   void (* Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM Encoder Msp DeInit Callback                         */
302   void (* PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM Period Elapsed Callback                             */
303   void (* PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);     /*!< TIM Period Elapsed half complete Callback               */
304   void (* TriggerCallback)(struct __TIM_HandleTypeDef *htim);                   /*!< TIM Trigger Callback                                    */
305   void (* TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Trigger half complete Callback                      */
306   void (* IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM Input Capture Callback                              */
307   void (* IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM Input Capture half complete Callback                */
308   void (* OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Output Compare Delay Elapsed Callback               */
309   void (* PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM PWM Pulse Finished Callback                         */
310   void (* PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback           */
311   void (* ErrorCallback)(struct __TIM_HandleTypeDef *htim);                     /*!< TIM Error Callback                                      */
312 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
313 } TIM_HandleTypeDef;
314 
315 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
316 /**
317   * @brief  HAL TIM Callback ID enumeration definition
318   */
319 typedef enum
320 {
321   HAL_TIM_BASE_MSPINIT_CB_ID              = 0x00U   /*!< TIM Base MspInit Callback ID                              */
322   , HAL_TIM_BASE_MSPDEINIT_CB_ID          = 0x01U   /*!< TIM Base MspDeInit Callback ID                            */
323   , HAL_TIM_IC_MSPINIT_CB_ID              = 0x02U   /*!< TIM IC MspInit Callback ID                                */
324   , HAL_TIM_IC_MSPDEINIT_CB_ID            = 0x03U   /*!< TIM IC MspDeInit Callback ID                              */
325   , HAL_TIM_OC_MSPINIT_CB_ID              = 0x04U   /*!< TIM OC MspInit Callback ID                                */
326   , HAL_TIM_OC_MSPDEINIT_CB_ID            = 0x05U   /*!< TIM OC MspDeInit Callback ID                              */
327   , HAL_TIM_PWM_MSPINIT_CB_ID             = 0x06U   /*!< TIM PWM MspInit Callback ID                               */
328   , HAL_TIM_PWM_MSPDEINIT_CB_ID           = 0x07U   /*!< TIM PWM MspDeInit Callback ID                             */
329   , HAL_TIM_ONE_PULSE_MSPINIT_CB_ID       = 0x08U   /*!< TIM One Pulse MspInit Callback ID                         */
330   , HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID     = 0x09U   /*!< TIM One Pulse MspDeInit Callback ID                       */
331   , HAL_TIM_ENCODER_MSPINIT_CB_ID         = 0x0AU   /*!< TIM Encoder MspInit Callback ID                           */
332   , HAL_TIM_ENCODER_MSPDEINIT_CB_ID       = 0x0BU   /*!< TIM Encoder MspDeInit Callback ID                         */
333   , HAL_TIM_PERIOD_ELAPSED_CB_ID          = 0x0EU   /*!< TIM Period Elapsed Callback ID                             */
334   , HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID     = 0x0FU   /*!< TIM Period Elapsed half complete Callback ID               */
335   , HAL_TIM_TRIGGER_CB_ID                 = 0x10U   /*!< TIM Trigger Callback ID                                    */
336   , HAL_TIM_TRIGGER_HALF_CB_ID            = 0x11U   /*!< TIM Trigger half complete Callback ID                      */
337 
338   , HAL_TIM_IC_CAPTURE_CB_ID              = 0x12U   /*!< TIM Input Capture Callback ID                              */
339   , HAL_TIM_IC_CAPTURE_HALF_CB_ID         = 0x13U   /*!< TIM Input Capture half complete Callback ID                */
340   , HAL_TIM_OC_DELAY_ELAPSED_CB_ID        = 0x14U   /*!< TIM Output Compare Delay Elapsed Callback ID               */
341   , HAL_TIM_PWM_PULSE_FINISHED_CB_ID      = 0x15U   /*!< TIM PWM Pulse Finished Callback ID           */
342   , HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U   /*!< TIM PWM Pulse Finished half complete Callback ID           */
343   , HAL_TIM_ERROR_CB_ID                   = 0x17U   /*!< TIM Error Callback ID                                      */
344 } HAL_TIM_CallbackIDTypeDef;
345 
346 /**
347   * @brief  HAL TIM Callback pointer definition
348   */
349 typedef  void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim);  /*!< pointer to the TIM callback function */
350 
351 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
352 
353 /**
354   * @}
355   */
356 /* End of exported types -----------------------------------------------------*/
357 
358 /* Exported constants --------------------------------------------------------*/
359 /** @defgroup TIM_Exported_Constants TIM Exported Constants
360   * @{
361   */
362 
363 /** @defgroup TIM_ClearInput_Source TIM Clear Input Source
364   * @{
365   */
366 #define TIM_CLEARINPUTSOURCE_NONE           0x00000000U   /*!< OCREF_CLR is disabled */
367 #define TIM_CLEARINPUTSOURCE_ETR            0x00000001U   /*!< OCREF_CLR is connected to ETRF input */
368 #define TIM_CLEARINPUTSOURCE_OCREFCLR       0x00000002U   /*!< OCREF_CLR is connected to OCREF_CLR_INT */
369 /**
370   * @}
371   */
372 
373 /** @defgroup TIM_DMA_Base_address TIM DMA Base Address
374   * @{
375   */
376 #define TIM_DMABASE_CR1                    0x00000000U
377 #define TIM_DMABASE_CR2                    0x00000001U
378 #define TIM_DMABASE_SMCR                   0x00000002U
379 #define TIM_DMABASE_DIER                   0x00000003U
380 #define TIM_DMABASE_SR                     0x00000004U
381 #define TIM_DMABASE_EGR                    0x00000005U
382 #define TIM_DMABASE_CCMR1                  0x00000006U
383 #define TIM_DMABASE_CCMR2                  0x00000007U
384 #define TIM_DMABASE_CCER                   0x00000008U
385 #define TIM_DMABASE_CNT                    0x00000009U
386 #define TIM_DMABASE_PSC                    0x0000000AU
387 #define TIM_DMABASE_ARR                    0x0000000BU
388 #define TIM_DMABASE_CCR1                   0x0000000DU
389 #define TIM_DMABASE_CCR2                   0x0000000EU
390 #define TIM_DMABASE_CCR3                   0x0000000FU
391 #define TIM_DMABASE_CCR4                   0x00000010U
392 #define TIM_DMABASE_DCR                    0x00000012U
393 #define TIM_DMABASE_DMAR                   0x00000013U
394 #define TIM_DMABASE_OR                     0x00000014U
395 /**
396   * @}
397   */
398 
399 /** @defgroup TIM_Event_Source TIM Event Source
400   * @{
401   */
402 #define TIM_EVENTSOURCE_UPDATE              TIM_EGR_UG     /*!< Reinitialize the counter and generates an update of the registers */
403 #define TIM_EVENTSOURCE_CC1                 TIM_EGR_CC1G   /*!< A capture/compare event is generated on channel 1 */
404 #define TIM_EVENTSOURCE_CC2                 TIM_EGR_CC2G   /*!< A capture/compare event is generated on channel 2 */
405 #define TIM_EVENTSOURCE_CC3                 TIM_EGR_CC3G   /*!< A capture/compare event is generated on channel 3 */
406 #define TIM_EVENTSOURCE_CC4                 TIM_EGR_CC4G   /*!< A capture/compare event is generated on channel 4 */
407 #define TIM_EVENTSOURCE_TRIGGER             TIM_EGR_TG     /*!< A trigger event is generated */
408 /**
409   * @}
410   */
411 
412 /** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity
413   * @{
414   */
415 #define  TIM_INPUTCHANNELPOLARITY_RISING      0x00000000U                       /*!< Polarity for TIx source */
416 #define  TIM_INPUTCHANNELPOLARITY_FALLING     TIM_CCER_CC1P                     /*!< Polarity for TIx source */
417 #define  TIM_INPUTCHANNELPOLARITY_BOTHEDGE    (TIM_CCER_CC1P | TIM_CCER_CC1NP)  /*!< Polarity for TIx source */
418 /**
419   * @}
420   */
421 
422 /** @defgroup TIM_ETR_Polarity TIM ETR Polarity
423   * @{
424   */
425 #define TIM_ETRPOLARITY_INVERTED              TIM_SMCR_ETP                      /*!< Polarity for ETR source */
426 #define TIM_ETRPOLARITY_NONINVERTED           0x00000000U                       /*!< Polarity for ETR source */
427 /**
428   * @}
429   */
430 
431 /** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler
432   * @{
433   */
434 #define TIM_ETRPRESCALER_DIV1                 0x00000000U                       /*!< No prescaler is used */
435 #define TIM_ETRPRESCALER_DIV2                 TIM_SMCR_ETPS_0                   /*!< ETR input source is divided by 2 */
436 #define TIM_ETRPRESCALER_DIV4                 TIM_SMCR_ETPS_1                   /*!< ETR input source is divided by 4 */
437 #define TIM_ETRPRESCALER_DIV8                 TIM_SMCR_ETPS                     /*!< ETR input source is divided by 8 */
438 /**
439   * @}
440   */
441 
442 /** @defgroup TIM_Counter_Mode TIM Counter Mode
443   * @{
444   */
445 #define TIM_COUNTERMODE_UP                 0x00000000U                          /*!< Counter used as up-counter   */
446 #define TIM_COUNTERMODE_DOWN               TIM_CR1_DIR                          /*!< Counter used as down-counter */
447 #define TIM_COUNTERMODE_CENTERALIGNED1     TIM_CR1_CMS_0                        /*!< Center-aligned mode 1        */
448 #define TIM_COUNTERMODE_CENTERALIGNED2     TIM_CR1_CMS_1                        /*!< Center-aligned mode 2        */
449 #define TIM_COUNTERMODE_CENTERALIGNED3     TIM_CR1_CMS                          /*!< Center-aligned mode 3        */
450 /**
451   * @}
452   */
453 
454 /** @defgroup TIM_ClockDivision TIM Clock Division
455   * @{
456   */
457 #define TIM_CLOCKDIVISION_DIV1             0x00000000U                          /*!< Clock division: tDTS=tCK_INT   */
458 #define TIM_CLOCKDIVISION_DIV2             TIM_CR1_CKD_0                        /*!< Clock division: tDTS=2*tCK_INT */
459 #define TIM_CLOCKDIVISION_DIV4             TIM_CR1_CKD_1                        /*!< Clock division: tDTS=4*tCK_INT */
460 /**
461   * @}
462   */
463 
464 /** @defgroup TIM_Output_Compare_State TIM Output Compare State
465   * @{
466   */
467 #define TIM_OUTPUTSTATE_DISABLE            0x00000000U                          /*!< Capture/Compare 1 output disabled */
468 #define TIM_OUTPUTSTATE_ENABLE             TIM_CCER_CC1E                        /*!< Capture/Compare 1 output enabled */
469 /**
470   * @}
471   */
472 
473 /** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload
474   * @{
475   */
476 #define TIM_AUTORELOAD_PRELOAD_DISABLE                0x00000000U               /*!< TIMx_ARR register is not buffered */
477 #define TIM_AUTORELOAD_PRELOAD_ENABLE                 TIM_CR1_ARPE              /*!< TIMx_ARR register is buffered */
478 
479 /**
480   * @}
481   */
482 
483 /** @defgroup TIM_Output_Fast_State TIM Output Fast State
484   * @{
485   */
486 #define TIM_OCFAST_DISABLE                 0x00000000U                          /*!< Output Compare fast disable */
487 #define TIM_OCFAST_ENABLE                  TIM_CCMR1_OC1FE                      /*!< Output Compare fast enable  */
488 /**
489   * @}
490   */
491 
492 /** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State
493   * @{
494   */
495 #define TIM_OUTPUTNSTATE_DISABLE           0x00000000U                          /*!< OCxN is disabled  */
496 #define TIM_OUTPUTNSTATE_ENABLE            TIM_CCER_CC1NE                       /*!< OCxN is enabled   */
497 /**
498   * @}
499   */
500 
501 /** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity
502   * @{
503   */
504 #define TIM_OCPOLARITY_HIGH                0x00000000U                          /*!< Capture/Compare output polarity  */
505 #define TIM_OCPOLARITY_LOW                 TIM_CCER_CC1P                        /*!< Capture/Compare output polarity  */
506 /**
507   * @}
508   */
509 
510 /** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity
511   * @{
512   */
513 #define  TIM_ICPOLARITY_RISING             TIM_INPUTCHANNELPOLARITY_RISING      /*!< Capture triggered by rising edge on timer input                  */
514 #define  TIM_ICPOLARITY_FALLING            TIM_INPUTCHANNELPOLARITY_FALLING     /*!< Capture triggered by falling edge on timer input                 */
515 #define  TIM_ICPOLARITY_BOTHEDGE           TIM_INPUTCHANNELPOLARITY_BOTHEDGE    /*!< Capture triggered by both rising and falling edges on timer input*/
516 /**
517   * @}
518   */
519 
520 /** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
521   * @{
522   */
523 #define  TIM_ENCODERINPUTPOLARITY_RISING   TIM_INPUTCHANNELPOLARITY_RISING      /*!< Encoder input with rising edge polarity  */
524 #define  TIM_ENCODERINPUTPOLARITY_FALLING  TIM_INPUTCHANNELPOLARITY_FALLING     /*!< Encoder input with falling edge polarity */
525 /**
526   * @}
527   */
528 
529 /** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
530   * @{
531   */
532 #define TIM_ICSELECTION_DIRECTTI           TIM_CCMR1_CC1S_0                     /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC1, IC2, IC3 or IC4, respectively */
533 #define TIM_ICSELECTION_INDIRECTTI         TIM_CCMR1_CC1S_1                     /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC2, IC1, IC4 or IC3, respectively */
534 #define TIM_ICSELECTION_TRC                TIM_CCMR1_CC1S                       /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */
535 /**
536   * @}
537   */
538 
539 /** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler
540   * @{
541   */
542 #define TIM_ICPSC_DIV1                     0x00000000U                          /*!< Capture performed each time an edge is detected on the capture input */
543 #define TIM_ICPSC_DIV2                     TIM_CCMR1_IC1PSC_0                   /*!< Capture performed once every 2 events                                */
544 #define TIM_ICPSC_DIV4                     TIM_CCMR1_IC1PSC_1                   /*!< Capture performed once every 4 events                                */
545 #define TIM_ICPSC_DIV8                     TIM_CCMR1_IC1PSC                     /*!< Capture performed once every 8 events                                */
546 /**
547   * @}
548   */
549 
550 /** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode
551   * @{
552   */
553 #define TIM_OPMODE_SINGLE                  TIM_CR1_OPM                          /*!< Counter stops counting at the next update event */
554 #define TIM_OPMODE_REPETITIVE              0x00000000U                          /*!< Counter is not stopped at update event          */
555 /**
556   * @}
557   */
558 
559 /** @defgroup TIM_Encoder_Mode TIM Encoder Mode
560   * @{
561   */
562 #define TIM_ENCODERMODE_TI1                      TIM_SMCR_SMS_0                                                      /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level  */
563 #define TIM_ENCODERMODE_TI2                      TIM_SMCR_SMS_1                                                      /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */
564 #define TIM_ENCODERMODE_TI12                     (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0)                                   /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */
565 /**
566   * @}
567   */
568 
569 /** @defgroup TIM_Interrupt_definition TIM interrupt Definition
570   * @{
571   */
572 #define TIM_IT_UPDATE                      TIM_DIER_UIE                         /*!< Update interrupt            */
573 #define TIM_IT_CC1                         TIM_DIER_CC1IE                       /*!< Capture/Compare 1 interrupt */
574 #define TIM_IT_CC2                         TIM_DIER_CC2IE                       /*!< Capture/Compare 2 interrupt */
575 #define TIM_IT_CC3                         TIM_DIER_CC3IE                       /*!< Capture/Compare 3 interrupt */
576 #define TIM_IT_CC4                         TIM_DIER_CC4IE                       /*!< Capture/Compare 4 interrupt */
577 #define TIM_IT_TRIGGER                     TIM_DIER_TIE                         /*!< Trigger interrupt           */
578 /**
579   * @}
580   */
581 
582 /** @defgroup TIM_DMA_sources TIM DMA Sources
583   * @{
584   */
585 #define TIM_DMA_UPDATE                     TIM_DIER_UDE                         /*!< DMA request is triggered by the update event */
586 #define TIM_DMA_CC1                        TIM_DIER_CC1DE                       /*!< DMA request is triggered by the capture/compare macth 1 event */
587 #define TIM_DMA_CC2                        TIM_DIER_CC2DE                       /*!< DMA request is triggered by the capture/compare macth 2 event event */
588 #define TIM_DMA_CC3                        TIM_DIER_CC3DE                       /*!< DMA request is triggered by the capture/compare macth 3 event event */
589 #define TIM_DMA_CC4                        TIM_DIER_CC4DE                       /*!< DMA request is triggered by the capture/compare macth 4 event event */
590 #define TIM_DMA_TRIGGER                    TIM_DIER_TDE                         /*!< DMA request is triggered by the trigger event */
591 /**
592   * @}
593   */
594 
595 /** @defgroup TIM_CC_DMA_Request CCx DMA request selection
596   * @{
597   */
598 #define TIM_CCDMAREQUEST_CC                 0x00000000U                         /*!< CCx DMA request sent when capture or compare match event occurs */
599 #define TIM_CCDMAREQUEST_UPDATE             TIM_CR2_CCDS                        /*!< CCx DMA requests sent when update event occurs */
600 /**
601   * @}
602   */
603 
604 /** @defgroup TIM_Flag_definition TIM Flag Definition
605   * @{
606   */
607 #define TIM_FLAG_UPDATE                    TIM_SR_UIF                           /*!< Update interrupt flag         */
608 #define TIM_FLAG_CC1                       TIM_SR_CC1IF                         /*!< Capture/Compare 1 interrupt flag */
609 #define TIM_FLAG_CC2                       TIM_SR_CC2IF                         /*!< Capture/Compare 2 interrupt flag */
610 #define TIM_FLAG_CC3                       TIM_SR_CC3IF                         /*!< Capture/Compare 3 interrupt flag */
611 #define TIM_FLAG_CC4                       TIM_SR_CC4IF                         /*!< Capture/Compare 4 interrupt flag */
612 #define TIM_FLAG_TRIGGER                   TIM_SR_TIF                           /*!< Trigger interrupt flag        */
613 #define TIM_FLAG_CC1OF                     TIM_SR_CC1OF                         /*!< Capture 1 overcapture flag    */
614 #define TIM_FLAG_CC2OF                     TIM_SR_CC2OF                         /*!< Capture 2 overcapture flag    */
615 #define TIM_FLAG_CC3OF                     TIM_SR_CC3OF                         /*!< Capture 3 overcapture flag    */
616 #define TIM_FLAG_CC4OF                     TIM_SR_CC4OF                         /*!< Capture 4 overcapture flag    */
617 /**
618   * @}
619   */
620 
621 /** @defgroup TIM_Channel TIM Channel
622   * @{
623   */
624 #define TIM_CHANNEL_1                      0x00000000U                          /*!< Capture/compare channel 1 identifier      */
625 #define TIM_CHANNEL_2                      0x00000004U                          /*!< Capture/compare channel 2 identifier      */
626 #define TIM_CHANNEL_3                      0x00000008U                          /*!< Capture/compare channel 3 identifier      */
627 #define TIM_CHANNEL_4                      0x0000000CU                          /*!< Capture/compare channel 4 identifier      */
628 #define TIM_CHANNEL_ALL                    0x0000003CU                          /*!< Global Capture/compare channel identifier  */
629 /**
630   * @}
631   */
632 
633 /** @defgroup TIM_Clock_Source TIM Clock Source
634   * @{
635   */
636 #define TIM_CLOCKSOURCE_INTERNAL    TIM_SMCR_ETPS_0      /*!< Internal clock source                                 */
637 #define TIM_CLOCKSOURCE_ETRMODE1    TIM_TS_ETRF          /*!< External clock source mode 1 (ETRF)                   */
638 #define TIM_CLOCKSOURCE_ETRMODE2    TIM_SMCR_ETPS_1      /*!< External clock source mode 2                          */
639 #define TIM_CLOCKSOURCE_TI1ED       TIM_TS_TI1F_ED       /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */
640 #define TIM_CLOCKSOURCE_TI1         TIM_TS_TI1FP1        /*!< External clock source mode 1 (TTI1FP1)                */
641 #define TIM_CLOCKSOURCE_TI2         TIM_TS_TI2FP2        /*!< External clock source mode 1 (TTI2FP2)                */
642 #define TIM_CLOCKSOURCE_ITR0        TIM_TS_ITR0          /*!< External clock source mode 1 (ITR0)                   */
643 #define TIM_CLOCKSOURCE_ITR1        TIM_TS_ITR1          /*!< External clock source mode 1 (ITR1)                   */
644 #define TIM_CLOCKSOURCE_ITR2        TIM_TS_ITR2          /*!< External clock source mode 1 (ITR2)                   */
645 #define TIM_CLOCKSOURCE_ITR3        TIM_TS_ITR3          /*!< External clock source mode 1 (ITR3)                   */
646 /**
647   * @}
648   */
649 
650 /** @defgroup TIM_Clock_Polarity TIM Clock Polarity
651   * @{
652   */
653 #define TIM_CLOCKPOLARITY_INVERTED           TIM_ETRPOLARITY_INVERTED           /*!< Polarity for ETRx clock sources */
654 #define TIM_CLOCKPOLARITY_NONINVERTED        TIM_ETRPOLARITY_NONINVERTED        /*!< Polarity for ETRx clock sources */
655 #define TIM_CLOCKPOLARITY_RISING             TIM_INPUTCHANNELPOLARITY_RISING    /*!< Polarity for TIx clock sources */
656 #define TIM_CLOCKPOLARITY_FALLING            TIM_INPUTCHANNELPOLARITY_FALLING   /*!< Polarity for TIx clock sources */
657 #define TIM_CLOCKPOLARITY_BOTHEDGE           TIM_INPUTCHANNELPOLARITY_BOTHEDGE  /*!< Polarity for TIx clock sources */
658 /**
659   * @}
660   */
661 
662 /** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler
663   * @{
664   */
665 #define TIM_CLOCKPRESCALER_DIV1                 TIM_ETRPRESCALER_DIV1           /*!< No prescaler is used                                                     */
666 #define TIM_CLOCKPRESCALER_DIV2                 TIM_ETRPRESCALER_DIV2           /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */
667 #define TIM_CLOCKPRESCALER_DIV4                 TIM_ETRPRESCALER_DIV4           /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */
668 #define TIM_CLOCKPRESCALER_DIV8                 TIM_ETRPRESCALER_DIV8           /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */
669 /**
670   * @}
671   */
672 
673 /** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity
674   * @{
675   */
676 #define TIM_CLEARINPUTPOLARITY_INVERTED           TIM_ETRPOLARITY_INVERTED      /*!< Polarity for ETRx pin */
677 #define TIM_CLEARINPUTPOLARITY_NONINVERTED        TIM_ETRPOLARITY_NONINVERTED   /*!< Polarity for ETRx pin */
678 /**
679   * @}
680   */
681 
682 /** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler
683   * @{
684   */
685 #define TIM_CLEARINPUTPRESCALER_DIV1              TIM_ETRPRESCALER_DIV1         /*!< No prescaler is used                                                   */
686 #define TIM_CLEARINPUTPRESCALER_DIV2              TIM_ETRPRESCALER_DIV2         /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */
687 #define TIM_CLEARINPUTPRESCALER_DIV4              TIM_ETRPRESCALER_DIV4         /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */
688 #define TIM_CLEARINPUTPRESCALER_DIV8              TIM_ETRPRESCALER_DIV8         /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */
689 /**
690   * @}
691   */
692 
693 /** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection
694   * @{
695   */
696 #define TIM_TRGO_RESET            0x00000000U                                      /*!< TIMx_EGR.UG bit is used as trigger output (TRGO)              */
697 #define TIM_TRGO_ENABLE           TIM_CR2_MMS_0                                    /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO)             */
698 #define TIM_TRGO_UPDATE           TIM_CR2_MMS_1                                    /*!< Update event is used as trigger output (TRGO)                 */
699 #define TIM_TRGO_OC1              (TIM_CR2_MMS_1 | TIM_CR2_MMS_0)                  /*!< Capture or a compare match 1 is used as trigger output (TRGO) */
700 #define TIM_TRGO_OC1REF           TIM_CR2_MMS_2                                    /*!< OC1REF signal is used as trigger output (TRGO)                */
701 #define TIM_TRGO_OC2REF           (TIM_CR2_MMS_2 | TIM_CR2_MMS_0)                  /*!< OC2REF signal is used as trigger output(TRGO)                 */
702 #define TIM_TRGO_OC3REF           (TIM_CR2_MMS_2 | TIM_CR2_MMS_1)                  /*!< OC3REF signal is used as trigger output(TRGO)                 */
703 #define TIM_TRGO_OC4REF           (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0)  /*!< OC4REF signal is used as trigger output(TRGO)                 */
704 /**
705   * @}
706   */
707 
708 /** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode
709   * @{
710   */
711 #define TIM_MASTERSLAVEMODE_ENABLE         TIM_SMCR_MSM                         /*!< No action */
712 #define TIM_MASTERSLAVEMODE_DISABLE        0x00000000U                          /*!< Master/slave mode is selected */
713 /**
714   * @}
715   */
716 
717 /** @defgroup TIM_Slave_Mode TIM Slave mode
718   * @{
719   */
720 #define TIM_SLAVEMODE_DISABLE                0x00000000U                                        /*!< Slave mode disabled           */
721 #define TIM_SLAVEMODE_RESET                  TIM_SMCR_SMS_2                                     /*!< Reset Mode                    */
722 #define TIM_SLAVEMODE_GATED                  (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0)                  /*!< Gated Mode                    */
723 #define TIM_SLAVEMODE_TRIGGER                (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1)                  /*!< Trigger Mode                  */
724 #define TIM_SLAVEMODE_EXTERNAL1              (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1         */
725 /**
726   * @}
727   */
728 
729 /** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes
730   * @{
731   */
732 #define TIM_OCMODE_TIMING                   0x00000000U                                              /*!< Frozen                                 */
733 #define TIM_OCMODE_ACTIVE                   TIM_CCMR1_OC1M_0                                         /*!< Set channel to active level on match   */
734 #define TIM_OCMODE_INACTIVE                 TIM_CCMR1_OC1M_1                                         /*!< Set channel to inactive level on match */
735 #define TIM_OCMODE_TOGGLE                   (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0)                    /*!< Toggle                                 */
736 #define TIM_OCMODE_PWM1                     (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1)                    /*!< PWM mode 1                             */
737 #define TIM_OCMODE_PWM2                     (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2                             */
738 #define TIM_OCMODE_FORCED_ACTIVE            (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0)                    /*!< Force active level                     */
739 #define TIM_OCMODE_FORCED_INACTIVE          TIM_CCMR1_OC1M_2                                         /*!< Force inactive level                   */
740 /**
741   * @}
742   */
743 
744 /** @defgroup TIM_Trigger_Selection TIM Trigger Selection
745   * @{
746   */
747 #define TIM_TS_ITR0          0x00000000U                                                       /*!< Internal Trigger 0 (ITR0)              */
748 #define TIM_TS_ITR1          TIM_SMCR_TS_0                                                     /*!< Internal Trigger 1 (ITR1)              */
749 #define TIM_TS_ITR2          TIM_SMCR_TS_1                                                     /*!< Internal Trigger 2 (ITR2)              */
750 #define TIM_TS_ITR3          (TIM_SMCR_TS_0 | TIM_SMCR_TS_1)                                   /*!< Internal Trigger 3 (ITR3)              */
751 #define TIM_TS_TI1F_ED       TIM_SMCR_TS_2                                                     /*!< TI1 Edge Detector (TI1F_ED)            */
752 #define TIM_TS_TI1FP1        (TIM_SMCR_TS_0 | TIM_SMCR_TS_2)                                   /*!< Filtered Timer Input 1 (TI1FP1)        */
753 #define TIM_TS_TI2FP2        (TIM_SMCR_TS_1 | TIM_SMCR_TS_2)                                   /*!< Filtered Timer Input 2 (TI2FP2)        */
754 #define TIM_TS_ETRF          (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2)                   /*!< Filtered External Trigger input (ETRF) */
755 #define TIM_TS_NONE          0x0000FFFFU                                                       /*!< No trigger selected                    */
756 /**
757   * @}
758   */
759 
760 /** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity
761   * @{
762   */
763 #define TIM_TRIGGERPOLARITY_INVERTED           TIM_ETRPOLARITY_INVERTED               /*!< Polarity for ETRx trigger sources             */
764 #define TIM_TRIGGERPOLARITY_NONINVERTED        TIM_ETRPOLARITY_NONINVERTED            /*!< Polarity for ETRx trigger sources             */
765 #define TIM_TRIGGERPOLARITY_RISING             TIM_INPUTCHANNELPOLARITY_RISING        /*!< Polarity for TIxFPx or TI1_ED trigger sources */
766 #define TIM_TRIGGERPOLARITY_FALLING            TIM_INPUTCHANNELPOLARITY_FALLING       /*!< Polarity for TIxFPx or TI1_ED trigger sources */
767 #define TIM_TRIGGERPOLARITY_BOTHEDGE           TIM_INPUTCHANNELPOLARITY_BOTHEDGE      /*!< Polarity for TIxFPx or TI1_ED trigger sources */
768 /**
769   * @}
770   */
771 
772 /** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler
773   * @{
774   */
775 #define TIM_TRIGGERPRESCALER_DIV1             TIM_ETRPRESCALER_DIV1             /*!< No prescaler is used                                                       */
776 #define TIM_TRIGGERPRESCALER_DIV2             TIM_ETRPRESCALER_DIV2             /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */
777 #define TIM_TRIGGERPRESCALER_DIV4             TIM_ETRPRESCALER_DIV4             /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */
778 #define TIM_TRIGGERPRESCALER_DIV8             TIM_ETRPRESCALER_DIV8             /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */
779 /**
780   * @}
781   */
782 
783 /** @defgroup TIM_TI1_Selection TIM TI1 Input Selection
784   * @{
785   */
786 #define TIM_TI1SELECTION_CH1               0x00000000U                          /*!< The TIMx_CH1 pin is connected to TI1 input */
787 #define TIM_TI1SELECTION_XORCOMBINATION    TIM_CR2_TI1S                         /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */
788 /**
789   * @}
790   */
791 
792 /** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length
793   * @{
794   */
795 #define TIM_DMABURSTLENGTH_1TRANSFER       0x00000000U                          /*!< The transfer is done to 1 register starting from TIMx_CR1 + TIMx_DCR.DBA   */
796 #define TIM_DMABURSTLENGTH_2TRANSFERS      0x00000100U                          /*!< The transfer is done to 2 registers starting from TIMx_CR1 + TIMx_DCR.DBA  */
797 #define TIM_DMABURSTLENGTH_3TRANSFERS      0x00000200U                          /*!< The transfer is done to 3 registers starting from TIMx_CR1 + TIMx_DCR.DBA  */
798 #define TIM_DMABURSTLENGTH_4TRANSFERS      0x00000300U                          /*!< The transfer is done to 4 registers starting from TIMx_CR1 + TIMx_DCR.DBA  */
799 #define TIM_DMABURSTLENGTH_5TRANSFERS      0x00000400U                          /*!< The transfer is done to 5 registers starting from TIMx_CR1 + TIMx_DCR.DBA  */
800 #define TIM_DMABURSTLENGTH_6TRANSFERS      0x00000500U                          /*!< The transfer is done to 6 registers starting from TIMx_CR1 + TIMx_DCR.DBA  */
801 #define TIM_DMABURSTLENGTH_7TRANSFERS      0x00000600U                          /*!< The transfer is done to 7 registers starting from TIMx_CR1 + TIMx_DCR.DBA  */
802 #define TIM_DMABURSTLENGTH_8TRANSFERS      0x00000700U                          /*!< The transfer is done to 8 registers starting from TIMx_CR1 + TIMx_DCR.DBA  */
803 #define TIM_DMABURSTLENGTH_9TRANSFERS      0x00000800U                          /*!< The transfer is done to 9 registers starting from TIMx_CR1 + TIMx_DCR.DBA  */
804 #define TIM_DMABURSTLENGTH_10TRANSFERS     0x00000900U                          /*!< The transfer is done to 10 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
805 #define TIM_DMABURSTLENGTH_11TRANSFERS     0x00000A00U                          /*!< The transfer is done to 11 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
806 #define TIM_DMABURSTLENGTH_12TRANSFERS     0x00000B00U                          /*!< The transfer is done to 12 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
807 #define TIM_DMABURSTLENGTH_13TRANSFERS     0x00000C00U                          /*!< The transfer is done to 13 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
808 #define TIM_DMABURSTLENGTH_14TRANSFERS     0x00000D00U                          /*!< The transfer is done to 14 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
809 #define TIM_DMABURSTLENGTH_15TRANSFERS     0x00000E00U                          /*!< The transfer is done to 15 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
810 #define TIM_DMABURSTLENGTH_16TRANSFERS     0x00000F00U                          /*!< The transfer is done to 16 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
811 #define TIM_DMABURSTLENGTH_17TRANSFERS     0x00001000U                          /*!< The transfer is done to 17 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
812 #define TIM_DMABURSTLENGTH_18TRANSFERS     0x00001100U                          /*!< The transfer is done to 18 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
813 /**
814   * @}
815   */
816 
817 /** @defgroup DMA_Handle_index TIM DMA Handle Index
818   * @{
819   */
820 #define TIM_DMA_ID_UPDATE                ((uint16_t) 0x0000)       /*!< Index of the DMA handle used for Update DMA requests */
821 #define TIM_DMA_ID_CC1                   ((uint16_t) 0x0001)       /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */
822 #define TIM_DMA_ID_CC2                   ((uint16_t) 0x0002)       /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */
823 #define TIM_DMA_ID_CC3                   ((uint16_t) 0x0003)       /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */
824 #define TIM_DMA_ID_CC4                   ((uint16_t) 0x0004)       /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */
825 #define TIM_DMA_ID_TRIGGER               ((uint16_t) 0x0006)       /*!< Index of the DMA handle used for Trigger DMA requests */
826 /**
827   * @}
828   */
829 
830 /** @defgroup Channel_CC_State TIM Capture/Compare Channel State
831   * @{
832   */
833 #define TIM_CCx_ENABLE                   0x00000001U                            /*!< Input or output channel is enabled */
834 #define TIM_CCx_DISABLE                  0x00000000U                            /*!< Input or output channel is disabled */
835 /**
836   * @}
837   */
838 
839 /**
840   * @}
841   */
842 /* End of exported constants -------------------------------------------------*/
843 
844 /* Exported macros -----------------------------------------------------------*/
845 /** @defgroup TIM_Exported_Macros TIM Exported Macros
846   * @{
847   */
848 
849 /** @brief  Reset TIM handle state.
850   * @param  __HANDLE__ TIM handle.
851   * @retval None
852   */
853 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
854 #define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do {                                                               \
855                                                       (__HANDLE__)->State            = HAL_TIM_STATE_RESET;         \
856                                                       (__HANDLE__)->ChannelState[0]  = HAL_TIM_CHANNEL_STATE_RESET; \
857                                                       (__HANDLE__)->ChannelState[1]  = HAL_TIM_CHANNEL_STATE_RESET; \
858                                                       (__HANDLE__)->ChannelState[2]  = HAL_TIM_CHANNEL_STATE_RESET; \
859                                                       (__HANDLE__)->ChannelState[3]  = HAL_TIM_CHANNEL_STATE_RESET; \
860                                                       (__HANDLE__)->DMABurstState    = HAL_DMA_BURST_STATE_RESET;   \
861                                                       (__HANDLE__)->Base_MspInitCallback         = NULL;            \
862                                                       (__HANDLE__)->Base_MspDeInitCallback       = NULL;            \
863                                                       (__HANDLE__)->IC_MspInitCallback           = NULL;            \
864                                                       (__HANDLE__)->IC_MspDeInitCallback         = NULL;            \
865                                                       (__HANDLE__)->OC_MspInitCallback           = NULL;            \
866                                                       (__HANDLE__)->OC_MspDeInitCallback         = NULL;            \
867                                                       (__HANDLE__)->PWM_MspInitCallback          = NULL;            \
868                                                       (__HANDLE__)->PWM_MspDeInitCallback        = NULL;            \
869                                                       (__HANDLE__)->OnePulse_MspInitCallback     = NULL;            \
870                                                       (__HANDLE__)->OnePulse_MspDeInitCallback   = NULL;            \
871                                                       (__HANDLE__)->Encoder_MspInitCallback      = NULL;            \
872                                                       (__HANDLE__)->Encoder_MspDeInitCallback    = NULL;            \
873                                                      } while(0)
874 #else
875 #define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do {                                                               \
876                                                       (__HANDLE__)->State            = HAL_TIM_STATE_RESET;         \
877                                                       (__HANDLE__)->ChannelState[0]  = HAL_TIM_CHANNEL_STATE_RESET; \
878                                                       (__HANDLE__)->ChannelState[1]  = HAL_TIM_CHANNEL_STATE_RESET; \
879                                                       (__HANDLE__)->ChannelState[2]  = HAL_TIM_CHANNEL_STATE_RESET; \
880                                                       (__HANDLE__)->ChannelState[3]  = HAL_TIM_CHANNEL_STATE_RESET; \
881                                                       (__HANDLE__)->DMABurstState    = HAL_DMA_BURST_STATE_RESET;   \
882                                                      } while(0)
883 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
884 
885 /**
886   * @brief  Enable the TIM peripheral.
887   * @param  __HANDLE__ TIM handle
888   * @retval None
889   */
890 #define __HAL_TIM_ENABLE(__HANDLE__)                 ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN))
891 
892 /**
893   * @brief  Disable the TIM peripheral.
894   * @param  __HANDLE__ TIM handle
895   * @retval None
896   */
897 #define __HAL_TIM_DISABLE(__HANDLE__) \
898   do { \
899     if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
900     { \
901       (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
902     } \
903   } while(0)
904 
905 /** @brief  Enable the specified TIM interrupt.
906   * @param  __HANDLE__ specifies the TIM Handle.
907   * @param  __INTERRUPT__ specifies the TIM interrupt source to enable.
908   *          This parameter can be one of the following values:
909   *            @arg TIM_IT_UPDATE: Update interrupt
910   *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt
911   *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt
912   *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt
913   *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt
914   *            @arg TIM_IT_TRIGGER: Trigger interrupt
915   * @retval None
916   */
917 #define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__)    ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__))
918 
919 /** @brief  Disable the specified TIM interrupt.
920   * @param  __HANDLE__ specifies the TIM Handle.
921   * @param  __INTERRUPT__ specifies the TIM interrupt source to disable.
922   *          This parameter can be one of the following values:
923   *            @arg TIM_IT_UPDATE: Update interrupt
924   *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt
925   *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt
926   *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt
927   *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt
928   *            @arg TIM_IT_TRIGGER: Trigger interrupt
929   * @retval None
930   */
931 #define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__))
932 
933 /** @brief  Enable the specified DMA request.
934   * @param  __HANDLE__ specifies the TIM Handle.
935   * @param  __DMA__ specifies the TIM DMA request to enable.
936   *          This parameter can be one of the following values:
937   *            @arg TIM_DMA_UPDATE: Update DMA request
938   *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request
939   *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request
940   *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request
941   *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request
942   *            @arg TIM_DMA_TRIGGER: Trigger DMA request
943   * @retval None
944   */
945 #define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__)         ((__HANDLE__)->Instance->DIER |= (__DMA__))
946 
947 /** @brief  Disable the specified DMA request.
948   * @param  __HANDLE__ specifies the TIM Handle.
949   * @param  __DMA__ specifies the TIM DMA request to disable.
950   *          This parameter can be one of the following values:
951   *            @arg TIM_DMA_UPDATE: Update DMA request
952   *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request
953   *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request
954   *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request
955   *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request
956   *            @arg TIM_DMA_TRIGGER: Trigger DMA request
957   * @retval None
958   */
959 #define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__)        ((__HANDLE__)->Instance->DIER &= ~(__DMA__))
960 
961 /** @brief  Check whether the specified TIM interrupt flag is set or not.
962   * @param  __HANDLE__ specifies the TIM Handle.
963   * @param  __FLAG__ specifies the TIM interrupt flag to check.
964   *        This parameter can be one of the following values:
965   *            @arg TIM_FLAG_UPDATE: Update interrupt flag
966   *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag
967   *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag
968   *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag
969   *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag
970   *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag
971   *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag
972   *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag
973   *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag
974   *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag
975   * @retval The new state of __FLAG__ (TRUE or FALSE).
976   */
977 #define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__)          (((__HANDLE__)->Instance->SR &(__FLAG__)) == (__FLAG__))
978 
979 /** @brief  Clear the specified TIM interrupt flag.
980   * @param  __HANDLE__ specifies the TIM Handle.
981   * @param  __FLAG__ specifies the TIM interrupt flag to clear.
982   *        This parameter can be one of the following values:
983   *            @arg TIM_FLAG_UPDATE: Update interrupt flag
984   *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag
985   *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag
986   *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag
987   *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag
988   *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag
989   *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag
990   *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag
991   *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag
992   *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag
993   * @retval The new state of __FLAG__ (TRUE or FALSE).
994   */
995 #define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__)        ((__HANDLE__)->Instance->SR = ~(__FLAG__))
996 
997 /**
998   * @brief  Check whether the specified TIM interrupt source is enabled or not.
999   * @param  __HANDLE__ TIM handle
1000   * @param  __INTERRUPT__ specifies the TIM interrupt source to check.
1001   *          This parameter can be one of the following values:
1002   *            @arg TIM_IT_UPDATE: Update interrupt
1003   *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt
1004   *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt
1005   *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt
1006   *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt
1007   *            @arg TIM_IT_TRIGGER: Trigger interrupt
1008   * @retval The state of TIM_IT (SET or RESET).
1009   */
1010 #define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
1011                                                              == (__INTERRUPT__)) ? SET : RESET)
1012 
1013 /** @brief Clear the TIM interrupt pending bits.
1014   * @param  __HANDLE__ TIM handle
1015   * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.
1016   *          This parameter can be one of the following values:
1017   *            @arg TIM_IT_UPDATE: Update interrupt
1018   *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt
1019   *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt
1020   *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt
1021   *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt
1022   *            @arg TIM_IT_TRIGGER: Trigger interrupt
1023   * @retval None
1024   */
1025 #define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__)      ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
1026 
1027 /**
1028   * @brief  Indicates whether or not the TIM Counter is used as downcounter.
1029   * @param  __HANDLE__ TIM handle.
1030   * @retval False (Counter used as upcounter) or True (Counter used as downcounter)
1031   * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode
1032   *       or Encoder mode.
1033   */
1034 #define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__)    (((__HANDLE__)->Instance->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR))
1035 
1036 /**
1037   * @brief  Set the TIM Prescaler on runtime.
1038   * @param  __HANDLE__ TIM handle.
1039   * @param  __PRESC__ specifies the Prescaler new value.
1040   * @retval None
1041   */
1042 #define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__)       ((__HANDLE__)->Instance->PSC = (__PRESC__))
1043 
1044 /**
1045   * @brief  Set the TIM Counter Register value on runtime.
1046   * @param  __HANDLE__ TIM handle.
1047   * @param  __COUNTER__ specifies the Counter register new value.
1048   * @retval None
1049   */
1050 #define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__)  ((__HANDLE__)->Instance->CNT = (__COUNTER__))
1051 
1052 /**
1053   * @brief  Get the TIM Counter Register value on runtime.
1054   * @param  __HANDLE__ TIM handle.
1055   * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
1056   */
1057 #define __HAL_TIM_GET_COUNTER(__HANDLE__)  ((__HANDLE__)->Instance->CNT)
1058 
1059 /**
1060   * @brief  Set the TIM Autoreload Register value on runtime without calling another time any Init function.
1061   * @param  __HANDLE__ TIM handle.
1062   * @param  __AUTORELOAD__ specifies the Counter register new value.
1063   * @retval None
1064   */
1065 #define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
1066   do{                                                    \
1067     (__HANDLE__)->Instance->ARR = (__AUTORELOAD__);  \
1068     (__HANDLE__)->Init.Period = (__AUTORELOAD__);    \
1069   } while(0)
1070 
1071 /**
1072   * @brief  Get the TIM Autoreload Register value on runtime.
1073   * @param  __HANDLE__ TIM handle.
1074   * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
1075   */
1076 #define __HAL_TIM_GET_AUTORELOAD(__HANDLE__)  ((__HANDLE__)->Instance->ARR)
1077 
1078 /**
1079   * @brief  Set the TIM Clock Division value on runtime without calling another time any Init function.
1080   * @param  __HANDLE__ TIM handle.
1081   * @param  __CKD__ specifies the clock division value.
1082   *          This parameter can be one of the following value:
1083   *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT
1084   *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
1085   *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
1086   * @retval None
1087   */
1088 #define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
1089   do{                                                   \
1090     (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD);  \
1091     (__HANDLE__)->Instance->CR1 |= (__CKD__);       \
1092     (__HANDLE__)->Init.ClockDivision = (__CKD__);   \
1093   } while(0)
1094 
1095 /**
1096   * @brief  Get the TIM Clock Division value on runtime.
1097   * @param  __HANDLE__ TIM handle.
1098   * @retval The clock division can be one of the following values:
1099   *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT
1100   *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
1101   *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
1102   */
1103 #define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__)  ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
1104 
1105 /**
1106   * @brief  Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel()
1107   *         function.
1108   * @param  __HANDLE__ TIM handle.
1109   * @param  __CHANNEL__ TIM Channels to be configured.
1110   *          This parameter can be one of the following values:
1111   *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
1112   *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
1113   *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
1114   *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
1115   * @param  __ICPSC__ specifies the Input Capture4 prescaler new value.
1116   *          This parameter can be one of the following values:
1117   *            @arg TIM_ICPSC_DIV1: no prescaler
1118   *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events
1119   *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events
1120   *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events
1121   * @retval None
1122   */
1123 #define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
1124   do{                                                    \
1125     TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__));  \
1126     TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
1127   } while(0)
1128 
1129 /**
1130   * @brief  Get the TIM Input Capture prescaler on runtime.
1131   * @param  __HANDLE__ TIM handle.
1132   * @param  __CHANNEL__ TIM Channels to be configured.
1133   *          This parameter can be one of the following values:
1134   *            @arg TIM_CHANNEL_1: get input capture 1 prescaler value
1135   *            @arg TIM_CHANNEL_2: get input capture 2 prescaler value
1136   *            @arg TIM_CHANNEL_3: get input capture 3 prescaler value
1137   *            @arg TIM_CHANNEL_4: get input capture 4 prescaler value
1138   * @retval The input capture prescaler can be one of the following values:
1139   *            @arg TIM_ICPSC_DIV1: no prescaler
1140   *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events
1141   *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events
1142   *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events
1143   */
1144 #define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__)  \
1145   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC) :\
1146    ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) :\
1147    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC) :\
1148    (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U)
1149 
1150 /**
1151   * @brief  Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function.
1152   * @param  __HANDLE__ TIM handle.
1153   * @param  __CHANNEL__ TIM Channels to be configured.
1154   *          This parameter can be one of the following values:
1155   *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
1156   *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
1157   *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
1158   *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
1159   * @param  __COMPARE__ specifies the Capture Compare register new value.
1160   * @retval None
1161   */
1162 #define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
1163   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
1164    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
1165    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
1166    ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)))
1167 
1168 /**
1169   * @brief  Get the TIM Capture Compare Register value on runtime.
1170   * @param  __HANDLE__ TIM handle.
1171   * @param  __CHANNEL__ TIM Channel associated with the capture compare register
1172   *          This parameter can be one of the following values:
1173   *            @arg TIM_CHANNEL_1: get capture/compare 1 register value
1174   *            @arg TIM_CHANNEL_2: get capture/compare 2 register value
1175   *            @arg TIM_CHANNEL_3: get capture/compare 3 register value
1176   *            @arg TIM_CHANNEL_4: get capture/compare 4 register value
1177   * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
1178   */
1179 #define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
1180   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
1181    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
1182    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
1183    ((__HANDLE__)->Instance->CCR4))
1184 
1185 /**
1186   * @brief  Set the TIM Output compare preload.
1187   * @param  __HANDLE__ TIM handle.
1188   * @param  __CHANNEL__ TIM Channels to be configured.
1189   *          This parameter can be one of the following values:
1190   *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
1191   *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
1192   *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
1193   *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
1194   * @retval None
1195   */
1196 #define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)    \
1197   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
1198    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
1199    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
1200    ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE))
1201 
1202 /**
1203   * @brief  Reset the TIM Output compare preload.
1204   * @param  __HANDLE__ TIM handle.
1205   * @param  __CHANNEL__ TIM Channels to be configured.
1206   *          This parameter can be one of the following values:
1207   *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
1208   *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
1209   *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
1210   *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
1211   * @retval None
1212   */
1213 #define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)    \
1214   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
1215    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
1216    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
1217    ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE))
1218 
1219 /**
1220   * @brief  Enable fast mode for a given channel.
1221   * @param  __HANDLE__ TIM handle.
1222   * @param  __CHANNEL__ TIM Channels to be configured.
1223   *          This parameter can be one of the following values:
1224   *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
1225   *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
1226   *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
1227   *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
1228   * @note  When fast mode is enabled an active edge on the trigger input acts
1229   *        like a compare match on CCx output. Delay to sample the trigger
1230   *        input and to activate CCx output is reduced to 3 clock cycles.
1231   * @note  Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
1232   * @retval None
1233   */
1234 #define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__)    \
1235   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
1236    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
1237    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
1238    ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE))
1239 
1240 /**
1241   * @brief  Disable fast mode for a given channel.
1242   * @param  __HANDLE__ TIM handle.
1243   * @param  __CHANNEL__ TIM Channels to be configured.
1244   *          This parameter can be one of the following values:
1245   *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
1246   *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
1247   *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
1248   *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
1249   * @note  When fast mode is disabled CCx output behaves normally depending
1250   *        on counter and CCRx values even when the trigger is ON. The minimum
1251   *        delay to activate CCx output when an active edge occurs on the
1252   *        trigger input is 5 clock cycles.
1253   * @retval None
1254   */
1255 #define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__)    \
1256   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
1257    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
1258    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
1259    ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE))
1260 
1261 /**
1262   * @brief  Set the Update Request Source (URS) bit of the TIMx_CR1 register.
1263   * @param  __HANDLE__ TIM handle.
1264   * @note  When the URS bit of the TIMx_CR1 register is set, only counter
1265   *        overflow/underflow generates an update interrupt or DMA request (if
1266   *        enabled)
1267   * @retval None
1268   */
1269 #define __HAL_TIM_URS_ENABLE(__HANDLE__)  ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
1270 
1271 /**
1272   * @brief  Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
1273   * @param  __HANDLE__ TIM handle.
1274   * @note  When the URS bit of the TIMx_CR1 register is reset, any of the
1275   *        following events generate an update interrupt or DMA request (if
1276   *        enabled):
1277   *           _ Counter overflow underflow
1278   *           _ Setting the UG bit
1279   *           _ Update generation through the slave mode controller
1280   * @retval None
1281   */
1282 #define __HAL_TIM_URS_DISABLE(__HANDLE__)  ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
1283 
1284 /**
1285   * @brief  Set the TIM Capture x input polarity on runtime.
1286   * @param  __HANDLE__ TIM handle.
1287   * @param  __CHANNEL__ TIM Channels to be configured.
1288   *          This parameter can be one of the following values:
1289   *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
1290   *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
1291   *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
1292   *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
1293   * @param  __POLARITY__ Polarity for TIx source
1294   *            @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge
1295   *            @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge
1296   *            @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge
1297   * @retval None
1298   */
1299 #define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__)    \
1300   do{                                                                     \
1301     TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__));               \
1302     TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
1303   }while(0)
1304 
1305 /** @brief  Select the Capture/compare DMA request source.
1306   * @param  __HANDLE__ specifies the TIM Handle.
1307   * @param  __CCDMA__ specifies Capture/compare DMA request source
1308   *          This parameter can be one of the following values:
1309   *            @arg TIM_CCDMAREQUEST_CC: CCx DMA request generated on Capture/Compare event
1310   *            @arg TIM_CCDMAREQUEST_UPDATE: CCx DMA request generated on Update event
1311   * @retval None
1312   */
1313 #define __HAL_TIM_SELECT_CCDMAREQUEST(__HANDLE__, __CCDMA__)    \
1314   MODIFY_REG((__HANDLE__)->Instance->CR2, TIM_CR2_CCDS, (__CCDMA__))
1315 
1316 /**
1317   * @}
1318   */
1319 /* End of exported macros ----------------------------------------------------*/
1320 
1321 /* Private constants ---------------------------------------------------------*/
1322 /** @defgroup TIM_Private_Constants TIM Private Constants
1323   * @{
1324   */
1325 /* The counter of a timer instance is disabled only if all the CCx and CCxN
1326    channels have been disabled */
1327 #define TIM_CCER_CCxE_MASK  ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E))
1328 /**
1329   * @}
1330   */
1331 /* End of private constants --------------------------------------------------*/
1332 
1333 /* Private macros ------------------------------------------------------------*/
1334 /** @defgroup TIM_Private_Macros TIM Private Macros
1335   * @{
1336   */
1337 #define IS_TIM_CLEARINPUT_SOURCE(__MODE__)  (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE)      || \
1338                                              ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR)       || \
1339                                              ((__MODE__) == TIM_CLEARINPUTSOURCE_OCREFCLR))
1340 
1341 #define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1)   || \
1342                                    ((__BASE__) == TIM_DMABASE_CR2)   || \
1343                                    ((__BASE__) == TIM_DMABASE_SMCR)  || \
1344                                    ((__BASE__) == TIM_DMABASE_DIER)  || \
1345                                    ((__BASE__) == TIM_DMABASE_SR)    || \
1346                                    ((__BASE__) == TIM_DMABASE_EGR)   || \
1347                                    ((__BASE__) == TIM_DMABASE_CCMR1) || \
1348                                    ((__BASE__) == TIM_DMABASE_CCMR2) || \
1349                                    ((__BASE__) == TIM_DMABASE_CCER)  || \
1350                                    ((__BASE__) == TIM_DMABASE_CNT)   || \
1351                                    ((__BASE__) == TIM_DMABASE_PSC)   || \
1352                                    ((__BASE__) == TIM_DMABASE_ARR)   || \
1353                                    ((__BASE__) == TIM_DMABASE_CCR1)  || \
1354                                    ((__BASE__) == TIM_DMABASE_CCR2)  || \
1355                                    ((__BASE__) == TIM_DMABASE_CCR3)  || \
1356                                    ((__BASE__) == TIM_DMABASE_CCR4)  || \
1357                                    ((__BASE__) == TIM_DMABASE_OR))
1358 
1359 #define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFFA0U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))
1360 
1361 #define IS_TIM_COUNTER_MODE(__MODE__)      (((__MODE__) == TIM_COUNTERMODE_UP)              || \
1362                                             ((__MODE__) == TIM_COUNTERMODE_DOWN)            || \
1363                                             ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED1)  || \
1364                                             ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2)  || \
1365                                             ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
1366 
1367 #define IS_TIM_CLOCKDIVISION_DIV(__DIV__)  (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
1368                                             ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
1369                                             ((__DIV__) == TIM_CLOCKDIVISION_DIV4))
1370 
1371 #define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || \
1372                                             ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE))
1373 
1374 #define IS_TIM_FAST_STATE(__STATE__)       (((__STATE__) == TIM_OCFAST_DISABLE) || \
1375                                             ((__STATE__) == TIM_OCFAST_ENABLE))
1376 
1377 #define IS_TIM_OC_POLARITY(__POLARITY__)   (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || \
1378                                             ((__POLARITY__) == TIM_OCPOLARITY_LOW))
1379 
1380 #define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__)   (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING)   || \
1381                                                       ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
1382 
1383 #define IS_TIM_IC_POLARITY(__POLARITY__)   (((__POLARITY__) == TIM_ICPOLARITY_RISING)   || \
1384                                             ((__POLARITY__) == TIM_ICPOLARITY_FALLING)  || \
1385                                             ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
1386 
1387 #define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || \
1388                                             ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || \
1389                                             ((__SELECTION__) == TIM_ICSELECTION_TRC))
1390 
1391 #define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || \
1392                                             ((__PRESCALER__) == TIM_ICPSC_DIV2) || \
1393                                             ((__PRESCALER__) == TIM_ICPSC_DIV4) || \
1394                                             ((__PRESCALER__) == TIM_ICPSC_DIV8))
1395 
1396 #define IS_TIM_OPM_MODE(__MODE__)          (((__MODE__) == TIM_OPMODE_SINGLE) || \
1397                                             ((__MODE__) == TIM_OPMODE_REPETITIVE))
1398 
1399 #define IS_TIM_ENCODER_MODE(__MODE__)      (((__MODE__) == TIM_ENCODERMODE_TI1) || \
1400                                             ((__MODE__) == TIM_ENCODERMODE_TI2) || \
1401                                             ((__MODE__) == TIM_ENCODERMODE_TI12))
1402 
1403 #define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFA0FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))
1404 
1405 #define IS_TIM_CHANNELS(__CHANNEL__)       (((__CHANNEL__) == TIM_CHANNEL_1) || \
1406                                             ((__CHANNEL__) == TIM_CHANNEL_2) || \
1407                                             ((__CHANNEL__) == TIM_CHANNEL_3) || \
1408                                             ((__CHANNEL__) == TIM_CHANNEL_4) || \
1409                                             ((__CHANNEL__) == TIM_CHANNEL_ALL))
1410 
1411 #define IS_TIM_OPM_CHANNELS(__CHANNEL__)   (((__CHANNEL__) == TIM_CHANNEL_1) || \
1412                                             ((__CHANNEL__) == TIM_CHANNEL_2))
1413 
1414 #define IS_TIM_PERIOD(__HANDLE__, __PERIOD__) \
1415   ((IS_TIM_32B_COUNTER_INSTANCE(((__HANDLE__)->Instance)) == 0U) ? (((__PERIOD__) > 0U) && ((__PERIOD__) <= 0x0000FFFFU)) : ((__PERIOD__) > 0U))
1416 
1417 #define IS_TIM_CLOCKSOURCE(__CLOCK__) (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || \
1418                                        ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1) || \
1419                                        ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || \
1420                                        ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED)    || \
1421                                        ((__CLOCK__) == TIM_CLOCKSOURCE_TI1)      || \
1422                                        ((__CLOCK__) == TIM_CLOCKSOURCE_TI2)      || \
1423                                        ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0)     || \
1424                                        ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1)     || \
1425                                        ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2)     || \
1426                                        ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3))
1427 
1428 #define IS_TIM_CLOCKPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED)    || \
1429                                             ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || \
1430                                             ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING)      || \
1431                                             ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING)     || \
1432                                             ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE))
1433 
1434 #define IS_TIM_CLOCKPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || \
1435                                               ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || \
1436                                               ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || \
1437                                               ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8))
1438 
1439 #define IS_TIM_CLOCKFILTER(__ICFILTER__)      ((__ICFILTER__) <= 0xFU)
1440 
1441 #define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || \
1442                                                   ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED))
1443 
1444 #define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || \
1445                                                     ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || \
1446                                                     ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) || \
1447                                                     ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8))
1448 
1449 #define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)
1450 
1451 #define IS_TIM_TRGO_SOURCE(__SOURCE__) (((__SOURCE__) == TIM_TRGO_RESET)  || \
1452                                         ((__SOURCE__) == TIM_TRGO_ENABLE) || \
1453                                         ((__SOURCE__) == TIM_TRGO_UPDATE) || \
1454                                         ((__SOURCE__) == TIM_TRGO_OC1)    || \
1455                                         ((__SOURCE__) == TIM_TRGO_OC1REF) || \
1456                                         ((__SOURCE__) == TIM_TRGO_OC2REF) || \
1457                                         ((__SOURCE__) == TIM_TRGO_OC3REF) || \
1458                                         ((__SOURCE__) == TIM_TRGO_OC4REF))
1459 
1460 #define IS_TIM_MSM_STATE(__STATE__)      (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || \
1461                                           ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE))
1462 
1463 #define IS_TIM_SLAVE_MODE(__MODE__) (((__MODE__) == TIM_SLAVEMODE_DISABLE)   || \
1464                                      ((__MODE__) == TIM_SLAVEMODE_RESET)     || \
1465                                      ((__MODE__) == TIM_SLAVEMODE_GATED)     || \
1466                                      ((__MODE__) == TIM_SLAVEMODE_TRIGGER)   || \
1467                                      ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1))
1468 
1469 #define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1)               || \
1470                                    ((__MODE__) == TIM_OCMODE_PWM2))
1471 
1472 #define IS_TIM_OC_MODE(__MODE__)  (((__MODE__) == TIM_OCMODE_TIMING)             || \
1473                                    ((__MODE__) == TIM_OCMODE_ACTIVE)             || \
1474                                    ((__MODE__) == TIM_OCMODE_INACTIVE)           || \
1475                                    ((__MODE__) == TIM_OCMODE_TOGGLE)             || \
1476                                    ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE)      || \
1477                                    ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE))
1478 
1479 #define IS_TIM_TRIGGER_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0)    || \
1480                                                  ((__SELECTION__) == TIM_TS_ITR1)    || \
1481                                                  ((__SELECTION__) == TIM_TS_ITR2)    || \
1482                                                  ((__SELECTION__) == TIM_TS_ITR3)    || \
1483                                                  ((__SELECTION__) == TIM_TS_TI1F_ED) || \
1484                                                  ((__SELECTION__) == TIM_TS_TI1FP1)  || \
1485                                                  ((__SELECTION__) == TIM_TS_TI2FP2)  || \
1486                                                  ((__SELECTION__) == TIM_TS_ETRF))
1487 
1488 #define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \
1489                                                                ((__SELECTION__) == TIM_TS_ITR1) || \
1490                                                                ((__SELECTION__) == TIM_TS_ITR2) || \
1491                                                                ((__SELECTION__) == TIM_TS_ITR3) || \
1492                                                                ((__SELECTION__) == TIM_TS_NONE))
1493 
1494 #define IS_TIM_TRIGGERPOLARITY(__POLARITY__)   (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED   ) || \
1495                                                 ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || \
1496                                                 ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING     ) || \
1497                                                 ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING    ) || \
1498                                                 ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE   ))
1499 
1500 #define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || \
1501                                                 ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || \
1502                                                 ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || \
1503                                                 ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8))
1504 
1505 #define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)
1506 
1507 #define IS_TIM_TI1SELECTION(__TI1SELECTION__)  (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || \
1508                                                 ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION))
1509 
1510 #define IS_TIM_DMA_LENGTH(__LENGTH__)      (((__LENGTH__) == TIM_DMABURSTLENGTH_1TRANSFER)   || \
1511                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_2TRANSFERS)  || \
1512                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_3TRANSFERS)  || \
1513                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_4TRANSFERS)  || \
1514                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_5TRANSFERS)  || \
1515                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_6TRANSFERS)  || \
1516                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_7TRANSFERS)  || \
1517                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_8TRANSFERS)  || \
1518                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_9TRANSFERS)  || \
1519                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_10TRANSFERS) || \
1520                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_11TRANSFERS) || \
1521                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_12TRANSFERS) || \
1522                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_13TRANSFERS) || \
1523                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_14TRANSFERS) || \
1524                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_15TRANSFERS) || \
1525                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_16TRANSFERS) || \
1526                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_17TRANSFERS) || \
1527                                             ((__LENGTH__) == TIM_DMABURSTLENGTH_18TRANSFERS))
1528 
1529 #define IS_TIM_DMA_DATA_LENGTH(LENGTH) (((LENGTH) >= 0x1U) && ((LENGTH) < 0x10000U))
1530 
1531 #define IS_TIM_IC_FILTER(__ICFILTER__)   ((__ICFILTER__) <= 0xFU)
1532 
1533 #define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER)
1534 
1535 #define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
1536   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
1537    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
1538    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
1539    ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
1540 
1541 #define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
1542   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
1543    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
1544    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
1545    ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
1546 
1547 #define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
1548   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
1549    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
1550    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
1551    ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
1552 
1553 #define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
1554   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
1555    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
1556    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
1557    ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
1558 
1559 #define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)\
1560   (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelState[0] :\
1561    ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] :\
1562    ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] :\
1563    (__HANDLE__)->ChannelState[3])
1564 
1565 #define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \
1566   (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) :\
1567    ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) :\
1568    ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) :\
1569    ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__)))
1570 
1571 #define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__,  __CHANNEL_STATE__) do { \
1572                                                                        (__HANDLE__)->ChannelState[0]  = (__CHANNEL_STATE__);  \
1573                                                                        (__HANDLE__)->ChannelState[1]  = (__CHANNEL_STATE__);  \
1574                                                                        (__HANDLE__)->ChannelState[2]  = (__CHANNEL_STATE__);  \
1575                                                                        (__HANDLE__)->ChannelState[3]  = (__CHANNEL_STATE__);  \
1576                                                                      } while(0)
1577 
1578 /**
1579   * @}
1580   */
1581 /* End of private macros -----------------------------------------------------*/
1582 
1583 /* Include TIM HAL Extended module */
1584 #include "stm32l1xx_hal_tim_ex.h"
1585 
1586 /* Exported functions --------------------------------------------------------*/
1587 /** @addtogroup TIM_Exported_Functions TIM Exported Functions
1588   * @{
1589   */
1590 
1591 /** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions
1592   *  @brief   Time Base functions
1593   * @{
1594   */
1595 /* Time Base functions ********************************************************/
1596 HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);
1597 HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim);
1598 void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);
1599 void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim);
1600 /* Blocking mode: Polling */
1601 HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);
1602 HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);
1603 /* Non-Blocking mode: Interrupt */
1604 HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
1605 HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);
1606 /* Non-Blocking mode: DMA */
1607 HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length);
1608 HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);
1609 /**
1610   * @}
1611   */
1612 
1613 /** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions
1614   *  @brief   TIM Output Compare functions
1615   * @{
1616   */
1617 /* Timer Output Compare functions *********************************************/
1618 HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim);
1619 HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim);
1620 void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim);
1621 void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim);
1622 /* Blocking mode: Polling */
1623 HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
1624 HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);
1625 /* Non-Blocking mode: Interrupt */
1626 HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
1627 HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
1628 /* Non-Blocking mode: DMA */
1629 HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData,
1630                                        uint16_t Length);
1631 HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
1632 /**
1633   * @}
1634   */
1635 
1636 /** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions
1637   *  @brief   TIM PWM functions
1638   * @{
1639   */
1640 /* Timer PWM functions ********************************************************/
1641 HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim);
1642 HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim);
1643 void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim);
1644 void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim);
1645 /* Blocking mode: Polling */
1646 HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
1647 HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);
1648 /* Non-Blocking mode: Interrupt */
1649 HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
1650 HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
1651 /* Non-Blocking mode: DMA */
1652 HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData,
1653                                         uint16_t Length);
1654 HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
1655 /**
1656   * @}
1657   */
1658 
1659 /** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions
1660   *  @brief   TIM Input Capture functions
1661   * @{
1662   */
1663 /* Timer Input Capture functions **********************************************/
1664 HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim);
1665 HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim);
1666 void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim);
1667 void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim);
1668 /* Blocking mode: Polling */
1669 HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
1670 HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);
1671 /* Non-Blocking mode: Interrupt */
1672 HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
1673 HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
1674 /* Non-Blocking mode: DMA */
1675 HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);
1676 HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
1677 /**
1678   * @}
1679   */
1680 
1681 /** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions
1682   *  @brief   TIM One Pulse functions
1683   * @{
1684   */
1685 /* Timer One Pulse functions **************************************************/
1686 HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode);
1687 HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim);
1688 void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim);
1689 void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim);
1690 /* Blocking mode: Polling */
1691 HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
1692 HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
1693 /* Non-Blocking mode: Interrupt */
1694 HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
1695 HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
1696 /**
1697   * @}
1698   */
1699 
1700 /** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions
1701   *  @brief   TIM Encoder functions
1702   * @{
1703   */
1704 /* Timer Encoder functions ****************************************************/
1705 HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, const TIM_Encoder_InitTypeDef *sConfig);
1706 HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim);
1707 void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim);
1708 void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim);
1709 /* Blocking mode: Polling */
1710 HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
1711 HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);
1712 /* Non-Blocking mode: Interrupt */
1713 HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
1714 HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
1715 /* Non-Blocking mode: DMA */
1716 HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
1717                                             uint32_t *pData2, uint16_t Length);
1718 HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
1719 /**
1720   * @}
1721   */
1722 
1723 /** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management
1724   *  @brief   IRQ handler management
1725   * @{
1726   */
1727 /* Interrupt Handler functions  ***********************************************/
1728 void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
1729 /**
1730   * @}
1731   */
1732 
1733 /** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
1734   *  @brief   Peripheral Control functions
1735   * @{
1736   */
1737 /* Control functions  *********************************************************/
1738 HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig,
1739                                            uint32_t Channel);
1740 HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig,
1741                                             uint32_t Channel);
1742 HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig,
1743                                            uint32_t Channel);
1744 HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
1745                                                  uint32_t OutputChannel,  uint32_t InputChannel);
1746 HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
1747                                            const TIM_ClearInputConfigTypeDef *sClearInputConfig,
1748                                            uint32_t Channel);
1749 HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig);
1750 HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
1751 HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig);
1752 HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig);
1753 HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
1754                                               uint32_t BurstRequestSrc, const uint32_t  *BurstBuffer, uint32_t  BurstLength);
1755 HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
1756                                                    uint32_t BurstRequestSrc, const uint32_t *BurstBuffer,
1757                                                    uint32_t BurstLength,  uint32_t DataLength);
1758 HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
1759 HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
1760                                              uint32_t BurstRequestSrc, uint32_t  *BurstBuffer, uint32_t  BurstLength);
1761 HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
1762                                                   uint32_t BurstRequestSrc, uint32_t  *BurstBuffer,
1763                                                   uint32_t  BurstLength, uint32_t  DataLength);
1764 HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
1765 HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
1766 uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel);
1767 /**
1768   * @}
1769   */
1770 
1771 /** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
1772   *  @brief   TIM Callbacks functions
1773   * @{
1774   */
1775 /* Callback in non blocking modes (Interrupt and DMA) *************************/
1776 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
1777 void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim);
1778 void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);
1779 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);
1780 void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim);
1781 void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);
1782 void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);
1783 void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);
1784 void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim);
1785 void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
1786 
1787 /* Callbacks Register/UnRegister functions  ***********************************/
1788 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
1789 HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
1790                                            pTIM_CallbackTypeDef pCallback);
1791 HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
1792 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
1793 
1794 /**
1795   * @}
1796   */
1797 
1798 /** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
1799   *  @brief  Peripheral State functions
1800   * @{
1801   */
1802 /* Peripheral State functions  ************************************************/
1803 HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(const TIM_HandleTypeDef *htim);
1804 HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(const TIM_HandleTypeDef *htim);
1805 HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(const TIM_HandleTypeDef *htim);
1806 HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(const TIM_HandleTypeDef *htim);
1807 HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(const TIM_HandleTypeDef *htim);
1808 HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(const TIM_HandleTypeDef *htim);
1809 
1810 /* Peripheral Channel state functions  ************************************************/
1811 HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(const TIM_HandleTypeDef *htim);
1812 HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim,  uint32_t Channel);
1813 HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(const TIM_HandleTypeDef *htim);
1814 /**
1815   * @}
1816   */
1817 
1818 /**
1819   * @}
1820   */
1821 /* End of exported functions -------------------------------------------------*/
1822 
1823 /* Private functions----------------------------------------------------------*/
1824 /** @defgroup TIM_Private_Functions TIM Private Functions
1825   * @{
1826   */
1827 void TIM_DMAError(DMA_HandleTypeDef *hdma);
1828 void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma);
1829 void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma);
1830 
1831 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
1832 void TIM_ResetCallback(TIM_HandleTypeDef *htim);
1833 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
1834 
1835 /**
1836   * @}
1837   */
1838 /* End of private functions --------------------------------------------------*/
1839 
1840 /**
1841   * @}
1842   */
1843 
1844 /**
1845   * @}
1846   */
1847 
1848 #ifdef __cplusplus
1849 }
1850 #endif
1851 
1852 #endif /* STM32L1xx_HAL_TIM_H */
1853