amiro-blt / Target / Modules / DiWheelDrive_1-1 / Boot / lib / STM32F10x_StdPeriph_Driver / src / stm32f10x_tim.c @ 367c0652
History | View | Annotate | Download (107 KB)
1 | 69661903 | Thomas Schöpping | /**
|
---|---|---|---|
2 | ******************************************************************************
|
||
3 | * @file stm32f10x_tim.c
|
||
4 | * @author MCD Application Team
|
||
5 | * @version V3.5.0
|
||
6 | * @date 11-March-2011
|
||
7 | * @brief This file provides all the TIM firmware functions.
|
||
8 | ******************************************************************************
|
||
9 | * @attention
|
||
10 | *
|
||
11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||
12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
||
13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
||
14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
||
15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
||
16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||
17 | *
|
||
18 | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
||
19 | ******************************************************************************
|
||
20 | */
|
||
21 | |||
22 | /* Includes ------------------------------------------------------------------*/
|
||
23 | #include "stm32f10x_tim.h" |
||
24 | #include "stm32f10x_rcc.h" |
||
25 | |||
26 | /** @addtogroup STM32F10x_StdPeriph_Driver
|
||
27 | * @{
|
||
28 | */
|
||
29 | |||
30 | /** @defgroup TIM
|
||
31 | * @brief TIM driver modules
|
||
32 | * @{
|
||
33 | */
|
||
34 | |||
35 | /** @defgroup TIM_Private_TypesDefinitions
|
||
36 | * @{
|
||
37 | */
|
||
38 | |||
39 | /**
|
||
40 | * @}
|
||
41 | */
|
||
42 | |||
43 | /** @defgroup TIM_Private_Defines
|
||
44 | * @{
|
||
45 | */
|
||
46 | |||
47 | /* ---------------------- TIM registers bit mask ------------------------ */
|
||
48 | #define SMCR_ETR_Mask ((uint16_t)0x00FF) |
||
49 | #define CCMR_Offset ((uint16_t)0x0018) |
||
50 | #define CCER_CCE_Set ((uint16_t)0x0001) |
||
51 | #define CCER_CCNE_Set ((uint16_t)0x0004) |
||
52 | |||
53 | /**
|
||
54 | * @}
|
||
55 | */
|
||
56 | |||
57 | /** @defgroup TIM_Private_Macros
|
||
58 | * @{
|
||
59 | */
|
||
60 | |||
61 | /**
|
||
62 | * @}
|
||
63 | */
|
||
64 | |||
65 | /** @defgroup TIM_Private_Variables
|
||
66 | * @{
|
||
67 | */
|
||
68 | |||
69 | /**
|
||
70 | * @}
|
||
71 | */
|
||
72 | |||
73 | /** @defgroup TIM_Private_FunctionPrototypes
|
||
74 | * @{
|
||
75 | */
|
||
76 | |||
77 | static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, |
||
78 | uint16_t TIM_ICFilter); |
||
79 | static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, |
||
80 | uint16_t TIM_ICFilter); |
||
81 | static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, |
||
82 | uint16_t TIM_ICFilter); |
||
83 | static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, |
||
84 | uint16_t TIM_ICFilter); |
||
85 | /**
|
||
86 | * @}
|
||
87 | */
|
||
88 | |||
89 | /** @defgroup TIM_Private_Macros
|
||
90 | * @{
|
||
91 | */
|
||
92 | |||
93 | /**
|
||
94 | * @}
|
||
95 | */
|
||
96 | |||
97 | /** @defgroup TIM_Private_Variables
|
||
98 | * @{
|
||
99 | */
|
||
100 | |||
101 | /**
|
||
102 | * @}
|
||
103 | */
|
||
104 | |||
105 | /** @defgroup TIM_Private_FunctionPrototypes
|
||
106 | * @{
|
||
107 | */
|
||
108 | |||
109 | /**
|
||
110 | * @}
|
||
111 | */
|
||
112 | |||
113 | /** @defgroup TIM_Private_Functions
|
||
114 | * @{
|
||
115 | */
|
||
116 | |||
117 | /**
|
||
118 | * @brief Deinitializes the TIMx peripheral registers to their default reset values.
|
||
119 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
120 | * @retval None
|
||
121 | */
|
||
122 | void TIM_DeInit(TIM_TypeDef* TIMx)
|
||
123 | { |
||
124 | /* Check the parameters */
|
||
125 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
126 | |||
127 | if (TIMx == TIM1)
|
||
128 | { |
||
129 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE); |
||
130 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE); |
||
131 | } |
||
132 | else if (TIMx == TIM2) |
||
133 | { |
||
134 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE); |
||
135 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE); |
||
136 | } |
||
137 | else if (TIMx == TIM3) |
||
138 | { |
||
139 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE); |
||
140 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE); |
||
141 | } |
||
142 | else if (TIMx == TIM4) |
||
143 | { |
||
144 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE); |
||
145 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE); |
||
146 | } |
||
147 | else if (TIMx == TIM5) |
||
148 | { |
||
149 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM5, ENABLE); |
||
150 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM5, DISABLE); |
||
151 | } |
||
152 | else if (TIMx == TIM6) |
||
153 | { |
||
154 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM6, ENABLE); |
||
155 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM6, DISABLE); |
||
156 | } |
||
157 | else if (TIMx == TIM7) |
||
158 | { |
||
159 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM7, ENABLE); |
||
160 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM7, DISABLE); |
||
161 | } |
||
162 | else if (TIMx == TIM8) |
||
163 | { |
||
164 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM8, ENABLE); |
||
165 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM8, DISABLE); |
||
166 | } |
||
167 | else if (TIMx == TIM9) |
||
168 | { |
||
169 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM9, ENABLE); |
||
170 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM9, DISABLE); |
||
171 | } |
||
172 | else if (TIMx == TIM10) |
||
173 | { |
||
174 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM10, ENABLE); |
||
175 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM10, DISABLE); |
||
176 | } |
||
177 | else if (TIMx == TIM11) |
||
178 | { |
||
179 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM11, ENABLE); |
||
180 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM11, DISABLE); |
||
181 | } |
||
182 | else if (TIMx == TIM12) |
||
183 | { |
||
184 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM12, ENABLE); |
||
185 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM12, DISABLE); |
||
186 | } |
||
187 | else if (TIMx == TIM13) |
||
188 | { |
||
189 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM13, ENABLE); |
||
190 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM13, DISABLE); |
||
191 | } |
||
192 | else if (TIMx == TIM14) |
||
193 | { |
||
194 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM14, ENABLE); |
||
195 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM14, DISABLE); |
||
196 | } |
||
197 | else if (TIMx == TIM15) |
||
198 | { |
||
199 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM15, ENABLE); |
||
200 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM15, DISABLE); |
||
201 | } |
||
202 | else if (TIMx == TIM16) |
||
203 | { |
||
204 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM16, ENABLE); |
||
205 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM16, DISABLE); |
||
206 | } |
||
207 | else
|
||
208 | { |
||
209 | if (TIMx == TIM17)
|
||
210 | { |
||
211 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, ENABLE); |
||
212 | RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, DISABLE); |
||
213 | } |
||
214 | } |
||
215 | } |
||
216 | |||
217 | /**
|
||
218 | * @brief Initializes the TIMx Time Base Unit peripheral according to
|
||
219 | * the specified parameters in the TIM_TimeBaseInitStruct.
|
||
220 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
221 | * @param TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef
|
||
222 | * structure that contains the configuration information for the
|
||
223 | * specified TIM peripheral.
|
||
224 | * @retval None
|
||
225 | */
|
||
226 | void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
|
||
227 | { |
||
228 | uint16_t tmpcr1 = 0;
|
||
229 | |||
230 | /* Check the parameters */
|
||
231 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
232 | assert_param(IS_TIM_COUNTER_MODE(TIM_TimeBaseInitStruct->TIM_CounterMode)); |
||
233 | assert_param(IS_TIM_CKD_DIV(TIM_TimeBaseInitStruct->TIM_ClockDivision)); |
||
234 | |||
235 | tmpcr1 = TIMx->CR1; |
||
236 | |||
237 | if((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM2) || (TIMx == TIM3)||
|
||
238 | (TIMx == TIM4) || (TIMx == TIM5)) |
||
239 | { |
||
240 | /* Select the Counter Mode */
|
||
241 | tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS))); |
||
242 | tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_CounterMode; |
||
243 | } |
||
244 | |||
245 | if((TIMx != TIM6) && (TIMx != TIM7))
|
||
246 | { |
||
247 | /* Set the clock division */
|
||
248 | tmpcr1 &= (uint16_t)(~((uint16_t)TIM_CR1_CKD)); |
||
249 | tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_ClockDivision; |
||
250 | } |
||
251 | |||
252 | TIMx->CR1 = tmpcr1; |
||
253 | |||
254 | /* Set the Autoreload value */
|
||
255 | TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ; |
||
256 | |||
257 | /* Set the Prescaler value */
|
||
258 | TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler; |
||
259 | |||
260 | if ((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM15)|| (TIMx == TIM16) || (TIMx == TIM17))
|
||
261 | { |
||
262 | /* Set the Repetition Counter value */
|
||
263 | TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter; |
||
264 | } |
||
265 | |||
266 | /* Generate an update event to reload the Prescaler and the Repetition counter
|
||
267 | values immediately */
|
||
268 | TIMx->EGR = TIM_PSCReloadMode_Immediate; |
||
269 | } |
||
270 | |||
271 | /**
|
||
272 | * @brief Initializes the TIMx Channel1 according to the specified
|
||
273 | * parameters in the TIM_OCInitStruct.
|
||
274 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
275 | * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
|
||
276 | * that contains the configuration information for the specified TIM peripheral.
|
||
277 | * @retval None
|
||
278 | */
|
||
279 | void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
|
||
280 | { |
||
281 | uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; |
||
282 | |||
283 | /* Check the parameters */
|
||
284 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
285 | assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); |
||
286 | assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); |
||
287 | assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); |
||
288 | /* Disable the Channel 1: Reset the CC1E Bit */
|
||
289 | TIMx->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC1E); |
||
290 | /* Get the TIMx CCER register value */
|
||
291 | tmpccer = TIMx->CCER; |
||
292 | /* Get the TIMx CR2 register value */
|
||
293 | tmpcr2 = TIMx->CR2; |
||
294 | |||
295 | /* Get the TIMx CCMR1 register value */
|
||
296 | tmpccmrx = TIMx->CCMR1; |
||
297 | |||
298 | /* Reset the Output Compare Mode Bits */
|
||
299 | tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_OC1M)); |
||
300 | tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC1S)); |
||
301 | |||
302 | /* Select the Output Compare Mode */
|
||
303 | tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; |
||
304 | |||
305 | /* Reset the Output Polarity level */
|
||
306 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1P)); |
||
307 | /* Set the Output Compare Polarity */
|
||
308 | tmpccer |= TIM_OCInitStruct->TIM_OCPolarity; |
||
309 | |||
310 | /* Set the Output State */
|
||
311 | tmpccer |= TIM_OCInitStruct->TIM_OutputState; |
||
312 | |||
313 | if((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM15)||
|
||
314 | (TIMx == TIM16)|| (TIMx == TIM17)) |
||
315 | { |
||
316 | assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); |
||
317 | assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); |
||
318 | assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); |
||
319 | assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); |
||
320 | |||
321 | /* Reset the Output N Polarity level */
|
||
322 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1NP)); |
||
323 | /* Set the Output N Polarity */
|
||
324 | tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity; |
||
325 | |||
326 | /* Reset the Output N State */
|
||
327 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1NE)); |
||
328 | /* Set the Output N State */
|
||
329 | tmpccer |= TIM_OCInitStruct->TIM_OutputNState; |
||
330 | |||
331 | /* Reset the Output Compare and Output Compare N IDLE State */
|
||
332 | tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS1)); |
||
333 | tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS1N)); |
||
334 | |||
335 | /* Set the Output Idle state */
|
||
336 | tmpcr2 |= TIM_OCInitStruct->TIM_OCIdleState; |
||
337 | /* Set the Output N Idle state */
|
||
338 | tmpcr2 |= TIM_OCInitStruct->TIM_OCNIdleState; |
||
339 | } |
||
340 | /* Write to TIMx CR2 */
|
||
341 | TIMx->CR2 = tmpcr2; |
||
342 | |||
343 | /* Write to TIMx CCMR1 */
|
||
344 | TIMx->CCMR1 = tmpccmrx; |
||
345 | |||
346 | /* Set the Capture Compare Register value */
|
||
347 | TIMx->CCR1 = TIM_OCInitStruct->TIM_Pulse; |
||
348 | |||
349 | /* Write to TIMx CCER */
|
||
350 | TIMx->CCER = tmpccer; |
||
351 | } |
||
352 | |||
353 | /**
|
||
354 | * @brief Initializes the TIMx Channel2 according to the specified
|
||
355 | * parameters in the TIM_OCInitStruct.
|
||
356 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select
|
||
357 | * the TIM peripheral.
|
||
358 | * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
|
||
359 | * that contains the configuration information for the specified TIM peripheral.
|
||
360 | * @retval None
|
||
361 | */
|
||
362 | void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
|
||
363 | { |
||
364 | uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; |
||
365 | |||
366 | /* Check the parameters */
|
||
367 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
368 | assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); |
||
369 | assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); |
||
370 | assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); |
||
371 | /* Disable the Channel 2: Reset the CC2E Bit */
|
||
372 | TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC2E)); |
||
373 | |||
374 | /* Get the TIMx CCER register value */
|
||
375 | tmpccer = TIMx->CCER; |
||
376 | /* Get the TIMx CR2 register value */
|
||
377 | tmpcr2 = TIMx->CR2; |
||
378 | |||
379 | /* Get the TIMx CCMR1 register value */
|
||
380 | tmpccmrx = TIMx->CCMR1; |
||
381 | |||
382 | /* Reset the Output Compare mode and Capture/Compare selection Bits */
|
||
383 | tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_OC2M)); |
||
384 | tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S)); |
||
385 | |||
386 | /* Select the Output Compare Mode */
|
||
387 | tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8);
|
||
388 | |||
389 | /* Reset the Output Polarity level */
|
||
390 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2P)); |
||
391 | /* Set the Output Compare Polarity */
|
||
392 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4);
|
||
393 | |||
394 | /* Set the Output State */
|
||
395 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 4);
|
||
396 | |||
397 | if((TIMx == TIM1) || (TIMx == TIM8))
|
||
398 | { |
||
399 | assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); |
||
400 | assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); |
||
401 | assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); |
||
402 | assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); |
||
403 | |||
404 | /* Reset the Output N Polarity level */
|
||
405 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NP)); |
||
406 | /* Set the Output N Polarity */
|
||
407 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4);
|
||
408 | |||
409 | /* Reset the Output N State */
|
||
410 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NE)); |
||
411 | /* Set the Output N State */
|
||
412 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4);
|
||
413 | |||
414 | /* Reset the Output Compare and Output Compare N IDLE State */
|
||
415 | tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2)); |
||
416 | tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2N)); |
||
417 | |||
418 | /* Set the Output Idle state */
|
||
419 | tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 2);
|
||
420 | /* Set the Output N Idle state */
|
||
421 | tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2);
|
||
422 | } |
||
423 | /* Write to TIMx CR2 */
|
||
424 | TIMx->CR2 = tmpcr2; |
||
425 | |||
426 | /* Write to TIMx CCMR1 */
|
||
427 | TIMx->CCMR1 = tmpccmrx; |
||
428 | |||
429 | /* Set the Capture Compare Register value */
|
||
430 | TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse; |
||
431 | |||
432 | /* Write to TIMx CCER */
|
||
433 | TIMx->CCER = tmpccer; |
||
434 | } |
||
435 | |||
436 | /**
|
||
437 | * @brief Initializes the TIMx Channel3 according to the specified
|
||
438 | * parameters in the TIM_OCInitStruct.
|
||
439 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
440 | * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
|
||
441 | * that contains the configuration information for the specified TIM peripheral.
|
||
442 | * @retval None
|
||
443 | */
|
||
444 | void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
|
||
445 | { |
||
446 | uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; |
||
447 | |||
448 | /* Check the parameters */
|
||
449 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
450 | assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); |
||
451 | assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); |
||
452 | assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); |
||
453 | /* Disable the Channel 2: Reset the CC2E Bit */
|
||
454 | TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC3E)); |
||
455 | |||
456 | /* Get the TIMx CCER register value */
|
||
457 | tmpccer = TIMx->CCER; |
||
458 | /* Get the TIMx CR2 register value */
|
||
459 | tmpcr2 = TIMx->CR2; |
||
460 | |||
461 | /* Get the TIMx CCMR2 register value */
|
||
462 | tmpccmrx = TIMx->CCMR2; |
||
463 | |||
464 | /* Reset the Output Compare mode and Capture/Compare selection Bits */
|
||
465 | tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_OC3M)); |
||
466 | tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC3S)); |
||
467 | /* Select the Output Compare Mode */
|
||
468 | tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; |
||
469 | |||
470 | /* Reset the Output Polarity level */
|
||
471 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3P)); |
||
472 | /* Set the Output Compare Polarity */
|
||
473 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8);
|
||
474 | |||
475 | /* Set the Output State */
|
||
476 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8);
|
||
477 | |||
478 | if((TIMx == TIM1) || (TIMx == TIM8))
|
||
479 | { |
||
480 | assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); |
||
481 | assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); |
||
482 | assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); |
||
483 | assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); |
||
484 | |||
485 | /* Reset the Output N Polarity level */
|
||
486 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NP)); |
||
487 | /* Set the Output N Polarity */
|
||
488 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8);
|
||
489 | /* Reset the Output N State */
|
||
490 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NE)); |
||
491 | |||
492 | /* Set the Output N State */
|
||
493 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8);
|
||
494 | /* Reset the Output Compare and Output Compare N IDLE State */
|
||
495 | tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3)); |
||
496 | tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3N)); |
||
497 | /* Set the Output Idle state */
|
||
498 | tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4);
|
||
499 | /* Set the Output N Idle state */
|
||
500 | tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4);
|
||
501 | } |
||
502 | /* Write to TIMx CR2 */
|
||
503 | TIMx->CR2 = tmpcr2; |
||
504 | |||
505 | /* Write to TIMx CCMR2 */
|
||
506 | TIMx->CCMR2 = tmpccmrx; |
||
507 | |||
508 | /* Set the Capture Compare Register value */
|
||
509 | TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse; |
||
510 | |||
511 | /* Write to TIMx CCER */
|
||
512 | TIMx->CCER = tmpccer; |
||
513 | } |
||
514 | |||
515 | /**
|
||
516 | * @brief Initializes the TIMx Channel4 according to the specified
|
||
517 | * parameters in the TIM_OCInitStruct.
|
||
518 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
519 | * @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
|
||
520 | * that contains the configuration information for the specified TIM peripheral.
|
||
521 | * @retval None
|
||
522 | */
|
||
523 | void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
|
||
524 | { |
||
525 | uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; |
||
526 | |||
527 | /* Check the parameters */
|
||
528 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
529 | assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); |
||
530 | assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); |
||
531 | assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); |
||
532 | /* Disable the Channel 2: Reset the CC4E Bit */
|
||
533 | TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC4E)); |
||
534 | |||
535 | /* Get the TIMx CCER register value */
|
||
536 | tmpccer = TIMx->CCER; |
||
537 | /* Get the TIMx CR2 register value */
|
||
538 | tmpcr2 = TIMx->CR2; |
||
539 | |||
540 | /* Get the TIMx CCMR2 register value */
|
||
541 | tmpccmrx = TIMx->CCMR2; |
||
542 | |||
543 | /* Reset the Output Compare mode and Capture/Compare selection Bits */
|
||
544 | tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_OC4M)); |
||
545 | tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC4S)); |
||
546 | |||
547 | /* Select the Output Compare Mode */
|
||
548 | tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8);
|
||
549 | |||
550 | /* Reset the Output Polarity level */
|
||
551 | tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC4P)); |
||
552 | /* Set the Output Compare Polarity */
|
||
553 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 12);
|
||
554 | |||
555 | /* Set the Output State */
|
||
556 | tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 12);
|
||
557 | |||
558 | if((TIMx == TIM1) || (TIMx == TIM8))
|
||
559 | { |
||
560 | assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); |
||
561 | /* Reset the Output Compare IDLE State */
|
||
562 | tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS4)); |
||
563 | /* Set the Output Idle state */
|
||
564 | tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6);
|
||
565 | } |
||
566 | /* Write to TIMx CR2 */
|
||
567 | TIMx->CR2 = tmpcr2; |
||
568 | |||
569 | /* Write to TIMx CCMR2 */
|
||
570 | TIMx->CCMR2 = tmpccmrx; |
||
571 | |||
572 | /* Set the Capture Compare Register value */
|
||
573 | TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse; |
||
574 | |||
575 | /* Write to TIMx CCER */
|
||
576 | TIMx->CCER = tmpccer; |
||
577 | } |
||
578 | |||
579 | /**
|
||
580 | * @brief Initializes the TIM peripheral according to the specified
|
||
581 | * parameters in the TIM_ICInitStruct.
|
||
582 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
583 | * @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure
|
||
584 | * that contains the configuration information for the specified TIM peripheral.
|
||
585 | * @retval None
|
||
586 | */
|
||
587 | void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
|
||
588 | { |
||
589 | /* Check the parameters */
|
||
590 | assert_param(IS_TIM_CHANNEL(TIM_ICInitStruct->TIM_Channel)); |
||
591 | assert_param(IS_TIM_IC_SELECTION(TIM_ICInitStruct->TIM_ICSelection)); |
||
592 | assert_param(IS_TIM_IC_PRESCALER(TIM_ICInitStruct->TIM_ICPrescaler)); |
||
593 | assert_param(IS_TIM_IC_FILTER(TIM_ICInitStruct->TIM_ICFilter)); |
||
594 | |||
595 | if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
|
||
596 | (TIMx == TIM4) ||(TIMx == TIM5)) |
||
597 | { |
||
598 | assert_param(IS_TIM_IC_POLARITY(TIM_ICInitStruct->TIM_ICPolarity)); |
||
599 | } |
||
600 | else
|
||
601 | { |
||
602 | assert_param(IS_TIM_IC_POLARITY_LITE(TIM_ICInitStruct->TIM_ICPolarity)); |
||
603 | } |
||
604 | if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
|
||
605 | { |
||
606 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
607 | /* TI1 Configuration */
|
||
608 | TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, |
||
609 | TIM_ICInitStruct->TIM_ICSelection, |
||
610 | TIM_ICInitStruct->TIM_ICFilter); |
||
611 | /* Set the Input Capture Prescaler value */
|
||
612 | TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); |
||
613 | } |
||
614 | else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2) |
||
615 | { |
||
616 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
617 | /* TI2 Configuration */
|
||
618 | TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, |
||
619 | TIM_ICInitStruct->TIM_ICSelection, |
||
620 | TIM_ICInitStruct->TIM_ICFilter); |
||
621 | /* Set the Input Capture Prescaler value */
|
||
622 | TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); |
||
623 | } |
||
624 | else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3) |
||
625 | { |
||
626 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
627 | /* TI3 Configuration */
|
||
628 | TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, |
||
629 | TIM_ICInitStruct->TIM_ICSelection, |
||
630 | TIM_ICInitStruct->TIM_ICFilter); |
||
631 | /* Set the Input Capture Prescaler value */
|
||
632 | TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); |
||
633 | } |
||
634 | else
|
||
635 | { |
||
636 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
637 | /* TI4 Configuration */
|
||
638 | TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, |
||
639 | TIM_ICInitStruct->TIM_ICSelection, |
||
640 | TIM_ICInitStruct->TIM_ICFilter); |
||
641 | /* Set the Input Capture Prescaler value */
|
||
642 | TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); |
||
643 | } |
||
644 | } |
||
645 | |||
646 | /**
|
||
647 | * @brief Configures the TIM peripheral according to the specified
|
||
648 | * parameters in the TIM_ICInitStruct to measure an external PWM signal.
|
||
649 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
650 | * @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure
|
||
651 | * that contains the configuration information for the specified TIM peripheral.
|
||
652 | * @retval None
|
||
653 | */
|
||
654 | void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
|
||
655 | { |
||
656 | uint16_t icoppositepolarity = TIM_ICPolarity_Rising; |
||
657 | uint16_t icoppositeselection = TIM_ICSelection_DirectTI; |
||
658 | /* Check the parameters */
|
||
659 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
660 | /* Select the Opposite Input Polarity */
|
||
661 | if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising)
|
||
662 | { |
||
663 | icoppositepolarity = TIM_ICPolarity_Falling; |
||
664 | } |
||
665 | else
|
||
666 | { |
||
667 | icoppositepolarity = TIM_ICPolarity_Rising; |
||
668 | } |
||
669 | /* Select the Opposite Input */
|
||
670 | if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI)
|
||
671 | { |
||
672 | icoppositeselection = TIM_ICSelection_IndirectTI; |
||
673 | } |
||
674 | else
|
||
675 | { |
||
676 | icoppositeselection = TIM_ICSelection_DirectTI; |
||
677 | } |
||
678 | if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
|
||
679 | { |
||
680 | /* TI1 Configuration */
|
||
681 | TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, |
||
682 | TIM_ICInitStruct->TIM_ICFilter); |
||
683 | /* Set the Input Capture Prescaler value */
|
||
684 | TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); |
||
685 | /* TI2 Configuration */
|
||
686 | TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); |
||
687 | /* Set the Input Capture Prescaler value */
|
||
688 | TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); |
||
689 | } |
||
690 | else
|
||
691 | { |
||
692 | /* TI2 Configuration */
|
||
693 | TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, |
||
694 | TIM_ICInitStruct->TIM_ICFilter); |
||
695 | /* Set the Input Capture Prescaler value */
|
||
696 | TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); |
||
697 | /* TI1 Configuration */
|
||
698 | TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); |
||
699 | /* Set the Input Capture Prescaler value */
|
||
700 | TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); |
||
701 | } |
||
702 | } |
||
703 | |||
704 | /**
|
||
705 | * @brief Configures the: Break feature, dead time, Lock level, the OSSI,
|
||
706 | * the OSSR State and the AOE(automatic output enable).
|
||
707 | * @param TIMx: where x can be 1 or 8 to select the TIM
|
||
708 | * @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure that
|
||
709 | * contains the BDTR Register configuration information for the TIM peripheral.
|
||
710 | * @retval None
|
||
711 | */
|
||
712 | void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct)
|
||
713 | { |
||
714 | /* Check the parameters */
|
||
715 | assert_param(IS_TIM_LIST2_PERIPH(TIMx)); |
||
716 | assert_param(IS_TIM_OSSR_STATE(TIM_BDTRInitStruct->TIM_OSSRState)); |
||
717 | assert_param(IS_TIM_OSSI_STATE(TIM_BDTRInitStruct->TIM_OSSIState)); |
||
718 | assert_param(IS_TIM_LOCK_LEVEL(TIM_BDTRInitStruct->TIM_LOCKLevel)); |
||
719 | assert_param(IS_TIM_BREAK_STATE(TIM_BDTRInitStruct->TIM_Break)); |
||
720 | assert_param(IS_TIM_BREAK_POLARITY(TIM_BDTRInitStruct->TIM_BreakPolarity)); |
||
721 | assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(TIM_BDTRInitStruct->TIM_AutomaticOutput)); |
||
722 | /* Set the Lock level, the Break enable Bit and the Ploarity, the OSSR State,
|
||
723 | the OSSI State, the dead time value and the Automatic Output Enable Bit */
|
||
724 | TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState | |
||
725 | TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime | |
||
726 | TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity | |
||
727 | TIM_BDTRInitStruct->TIM_AutomaticOutput; |
||
728 | } |
||
729 | |||
730 | /**
|
||
731 | * @brief Fills each TIM_TimeBaseInitStruct member with its default value.
|
||
732 | * @param TIM_TimeBaseInitStruct : pointer to a TIM_TimeBaseInitTypeDef
|
||
733 | * structure which will be initialized.
|
||
734 | * @retval None
|
||
735 | */
|
||
736 | void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
|
||
737 | { |
||
738 | /* Set the default configuration */
|
||
739 | TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF;
|
||
740 | TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000;
|
||
741 | TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1; |
||
742 | TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up; |
||
743 | TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000;
|
||
744 | } |
||
745 | |||
746 | /**
|
||
747 | * @brief Fills each TIM_OCInitStruct member with its default value.
|
||
748 | * @param TIM_OCInitStruct : pointer to a TIM_OCInitTypeDef structure which will
|
||
749 | * be initialized.
|
||
750 | * @retval None
|
||
751 | */
|
||
752 | void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)
|
||
753 | { |
||
754 | /* Set the default configuration */
|
||
755 | TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing; |
||
756 | TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable; |
||
757 | TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable; |
||
758 | TIM_OCInitStruct->TIM_Pulse = 0x0000;
|
||
759 | TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High; |
||
760 | TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High; |
||
761 | TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset; |
||
762 | TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset; |
||
763 | } |
||
764 | |||
765 | /**
|
||
766 | * @brief Fills each TIM_ICInitStruct member with its default value.
|
||
767 | * @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure which will
|
||
768 | * be initialized.
|
||
769 | * @retval None
|
||
770 | */
|
||
771 | void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct)
|
||
772 | { |
||
773 | /* Set the default configuration */
|
||
774 | TIM_ICInitStruct->TIM_Channel = TIM_Channel_1; |
||
775 | TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising; |
||
776 | TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI; |
||
777 | TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1; |
||
778 | TIM_ICInitStruct->TIM_ICFilter = 0x00;
|
||
779 | } |
||
780 | |||
781 | /**
|
||
782 | * @brief Fills each TIM_BDTRInitStruct member with its default value.
|
||
783 | * @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure which
|
||
784 | * will be initialized.
|
||
785 | * @retval None
|
||
786 | */
|
||
787 | void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct)
|
||
788 | { |
||
789 | /* Set the default configuration */
|
||
790 | TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable; |
||
791 | TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable; |
||
792 | TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF; |
||
793 | TIM_BDTRInitStruct->TIM_DeadTime = 0x00;
|
||
794 | TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable; |
||
795 | TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low; |
||
796 | TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; |
||
797 | } |
||
798 | |||
799 | /**
|
||
800 | * @brief Enables or disables the specified TIM peripheral.
|
||
801 | * @param TIMx: where x can be 1 to 17 to select the TIMx peripheral.
|
||
802 | * @param NewState: new state of the TIMx peripheral.
|
||
803 | * This parameter can be: ENABLE or DISABLE.
|
||
804 | * @retval None
|
||
805 | */
|
||
806 | void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
|
||
807 | { |
||
808 | /* Check the parameters */
|
||
809 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
810 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
811 | |||
812 | if (NewState != DISABLE)
|
||
813 | { |
||
814 | /* Enable the TIM Counter */
|
||
815 | TIMx->CR1 |= TIM_CR1_CEN; |
||
816 | } |
||
817 | else
|
||
818 | { |
||
819 | /* Disable the TIM Counter */
|
||
820 | TIMx->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN)); |
||
821 | } |
||
822 | } |
||
823 | |||
824 | /**
|
||
825 | * @brief Enables or disables the TIM peripheral Main Outputs.
|
||
826 | * @param TIMx: where x can be 1, 8, 15, 16 or 17 to select the TIMx peripheral.
|
||
827 | * @param NewState: new state of the TIM peripheral Main Outputs.
|
||
828 | * This parameter can be: ENABLE or DISABLE.
|
||
829 | * @retval None
|
||
830 | */
|
||
831 | void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)
|
||
832 | { |
||
833 | /* Check the parameters */
|
||
834 | assert_param(IS_TIM_LIST2_PERIPH(TIMx)); |
||
835 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
836 | if (NewState != DISABLE)
|
||
837 | { |
||
838 | /* Enable the TIM Main Output */
|
||
839 | TIMx->BDTR |= TIM_BDTR_MOE; |
||
840 | } |
||
841 | else
|
||
842 | { |
||
843 | /* Disable the TIM Main Output */
|
||
844 | TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE)); |
||
845 | } |
||
846 | } |
||
847 | |||
848 | /**
|
||
849 | * @brief Enables or disables the specified TIM interrupts.
|
||
850 | * @param TIMx: where x can be 1 to 17 to select the TIMx peripheral.
|
||
851 | * @param TIM_IT: specifies the TIM interrupts sources to be enabled or disabled.
|
||
852 | * This parameter can be any combination of the following values:
|
||
853 | * @arg TIM_IT_Update: TIM update Interrupt source
|
||
854 | * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source
|
||
855 | * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source
|
||
856 | * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source
|
||
857 | * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source
|
||
858 | * @arg TIM_IT_COM: TIM Commutation Interrupt source
|
||
859 | * @arg TIM_IT_Trigger: TIM Trigger Interrupt source
|
||
860 | * @arg TIM_IT_Break: TIM Break Interrupt source
|
||
861 | * @note
|
||
862 | * - TIM6 and TIM7 can only generate an update interrupt.
|
||
863 | * - TIM9, TIM12 and TIM15 can have only TIM_IT_Update, TIM_IT_CC1,
|
||
864 | * TIM_IT_CC2 or TIM_IT_Trigger.
|
||
865 | * - TIM10, TIM11, TIM13, TIM14, TIM16 and TIM17 can have TIM_IT_Update or TIM_IT_CC1.
|
||
866 | * - TIM_IT_Break is used only with TIM1, TIM8 and TIM15.
|
||
867 | * - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
|
||
868 | * @param NewState: new state of the TIM interrupts.
|
||
869 | * This parameter can be: ENABLE or DISABLE.
|
||
870 | * @retval None
|
||
871 | */
|
||
872 | void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
|
||
873 | { |
||
874 | /* Check the parameters */
|
||
875 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
876 | assert_param(IS_TIM_IT(TIM_IT)); |
||
877 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
878 | |||
879 | if (NewState != DISABLE)
|
||
880 | { |
||
881 | /* Enable the Interrupt sources */
|
||
882 | TIMx->DIER |= TIM_IT; |
||
883 | } |
||
884 | else
|
||
885 | { |
||
886 | /* Disable the Interrupt sources */
|
||
887 | TIMx->DIER &= (uint16_t)~TIM_IT; |
||
888 | } |
||
889 | } |
||
890 | |||
891 | /**
|
||
892 | * @brief Configures the TIMx event to be generate by software.
|
||
893 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
894 | * @param TIM_EventSource: specifies the event source.
|
||
895 | * This parameter can be one or more of the following values:
|
||
896 | * @arg TIM_EventSource_Update: Timer update Event source
|
||
897 | * @arg TIM_EventSource_CC1: Timer Capture Compare 1 Event source
|
||
898 | * @arg TIM_EventSource_CC2: Timer Capture Compare 2 Event source
|
||
899 | * @arg TIM_EventSource_CC3: Timer Capture Compare 3 Event source
|
||
900 | * @arg TIM_EventSource_CC4: Timer Capture Compare 4 Event source
|
||
901 | * @arg TIM_EventSource_COM: Timer COM event source
|
||
902 | * @arg TIM_EventSource_Trigger: Timer Trigger Event source
|
||
903 | * @arg TIM_EventSource_Break: Timer Break event source
|
||
904 | * @note
|
||
905 | * - TIM6 and TIM7 can only generate an update event.
|
||
906 | * - TIM_EventSource_COM and TIM_EventSource_Break are used only with TIM1 and TIM8.
|
||
907 | * @retval None
|
||
908 | */
|
||
909 | void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource)
|
||
910 | { |
||
911 | /* Check the parameters */
|
||
912 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
913 | assert_param(IS_TIM_EVENT_SOURCE(TIM_EventSource)); |
||
914 | |||
915 | /* Set the event sources */
|
||
916 | TIMx->EGR = TIM_EventSource; |
||
917 | } |
||
918 | |||
919 | /**
|
||
920 | * @brief Configures the TIMx's DMA interface.
|
||
921 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 15, 16 or 17 to select
|
||
922 | * the TIM peripheral.
|
||
923 | * @param TIM_DMABase: DMA Base address.
|
||
924 | * This parameter can be one of the following values:
|
||
925 | * @arg TIM_DMABase_CR, TIM_DMABase_CR2, TIM_DMABase_SMCR,
|
||
926 | * TIM_DMABase_DIER, TIM1_DMABase_SR, TIM_DMABase_EGR,
|
||
927 | * TIM_DMABase_CCMR1, TIM_DMABase_CCMR2, TIM_DMABase_CCER,
|
||
928 | * TIM_DMABase_CNT, TIM_DMABase_PSC, TIM_DMABase_ARR,
|
||
929 | * TIM_DMABase_RCR, TIM_DMABase_CCR1, TIM_DMABase_CCR2,
|
||
930 | * TIM_DMABase_CCR3, TIM_DMABase_CCR4, TIM_DMABase_BDTR,
|
||
931 | * TIM_DMABase_DCR.
|
||
932 | * @param TIM_DMABurstLength: DMA Burst length.
|
||
933 | * This parameter can be one value between:
|
||
934 | * TIM_DMABurstLength_1Transfer and TIM_DMABurstLength_18Transfers.
|
||
935 | * @retval None
|
||
936 | */
|
||
937 | void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength)
|
||
938 | { |
||
939 | /* Check the parameters */
|
||
940 | assert_param(IS_TIM_LIST4_PERIPH(TIMx)); |
||
941 | assert_param(IS_TIM_DMA_BASE(TIM_DMABase)); |
||
942 | assert_param(IS_TIM_DMA_LENGTH(TIM_DMABurstLength)); |
||
943 | /* Set the DMA Base and the DMA Burst Length */
|
||
944 | TIMx->DCR = TIM_DMABase | TIM_DMABurstLength; |
||
945 | } |
||
946 | |||
947 | /**
|
||
948 | * @brief Enables or disables the TIMx's DMA Requests.
|
||
949 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 6, 7, 8, 15, 16 or 17
|
||
950 | * to select the TIM peripheral.
|
||
951 | * @param TIM_DMASource: specifies the DMA Request sources.
|
||
952 | * This parameter can be any combination of the following values:
|
||
953 | * @arg TIM_DMA_Update: TIM update Interrupt source
|
||
954 | * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source
|
||
955 | * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source
|
||
956 | * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source
|
||
957 | * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source
|
||
958 | * @arg TIM_DMA_COM: TIM Commutation DMA source
|
||
959 | * @arg TIM_DMA_Trigger: TIM Trigger DMA source
|
||
960 | * @param NewState: new state of the DMA Request sources.
|
||
961 | * This parameter can be: ENABLE or DISABLE.
|
||
962 | * @retval None
|
||
963 | */
|
||
964 | void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState)
|
||
965 | { |
||
966 | /* Check the parameters */
|
||
967 | assert_param(IS_TIM_LIST9_PERIPH(TIMx)); |
||
968 | assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource)); |
||
969 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
970 | |||
971 | if (NewState != DISABLE)
|
||
972 | { |
||
973 | /* Enable the DMA sources */
|
||
974 | TIMx->DIER |= TIM_DMASource; |
||
975 | } |
||
976 | else
|
||
977 | { |
||
978 | /* Disable the DMA sources */
|
||
979 | TIMx->DIER &= (uint16_t)~TIM_DMASource; |
||
980 | } |
||
981 | } |
||
982 | |||
983 | /**
|
||
984 | * @brief Configures the TIMx internal Clock
|
||
985 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15
|
||
986 | * to select the TIM peripheral.
|
||
987 | * @retval None
|
||
988 | */
|
||
989 | void TIM_InternalClockConfig(TIM_TypeDef* TIMx)
|
||
990 | { |
||
991 | /* Check the parameters */
|
||
992 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
993 | /* Disable slave mode to clock the prescaler directly with the internal clock */
|
||
994 | TIMx->SMCR &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS)); |
||
995 | } |
||
996 | |||
997 | /**
|
||
998 | * @brief Configures the TIMx Internal Trigger as External Clock
|
||
999 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 9, 12 or 15 to select the TIM peripheral.
|
||
1000 | * @param TIM_ITRSource: Trigger source.
|
||
1001 | * This parameter can be one of the following values:
|
||
1002 | * @param TIM_TS_ITR0: Internal Trigger 0
|
||
1003 | * @param TIM_TS_ITR1: Internal Trigger 1
|
||
1004 | * @param TIM_TS_ITR2: Internal Trigger 2
|
||
1005 | * @param TIM_TS_ITR3: Internal Trigger 3
|
||
1006 | * @retval None
|
||
1007 | */
|
||
1008 | void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
|
||
1009 | { |
||
1010 | /* Check the parameters */
|
||
1011 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
1012 | assert_param(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource)); |
||
1013 | /* Select the Internal Trigger */
|
||
1014 | TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource); |
||
1015 | /* Select the External clock mode1 */
|
||
1016 | TIMx->SMCR |= TIM_SlaveMode_External1; |
||
1017 | } |
||
1018 | |||
1019 | /**
|
||
1020 | * @brief Configures the TIMx Trigger as External Clock
|
||
1021 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 9, 12 or 15 to select the TIM peripheral.
|
||
1022 | * @param TIM_TIxExternalCLKSource: Trigger source.
|
||
1023 | * This parameter can be one of the following values:
|
||
1024 | * @arg TIM_TIxExternalCLK1Source_TI1ED: TI1 Edge Detector
|
||
1025 | * @arg TIM_TIxExternalCLK1Source_TI1: Filtered Timer Input 1
|
||
1026 | * @arg TIM_TIxExternalCLK1Source_TI2: Filtered Timer Input 2
|
||
1027 | * @param TIM_ICPolarity: specifies the TIx Polarity.
|
||
1028 | * This parameter can be one of the following values:
|
||
1029 | * @arg TIM_ICPolarity_Rising
|
||
1030 | * @arg TIM_ICPolarity_Falling
|
||
1031 | * @param ICFilter : specifies the filter value.
|
||
1032 | * This parameter must be a value between 0x0 and 0xF.
|
||
1033 | * @retval None
|
||
1034 | */
|
||
1035 | void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
|
||
1036 | uint16_t TIM_ICPolarity, uint16_t ICFilter) |
||
1037 | { |
||
1038 | /* Check the parameters */
|
||
1039 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
1040 | assert_param(IS_TIM_TIXCLK_SOURCE(TIM_TIxExternalCLKSource)); |
||
1041 | assert_param(IS_TIM_IC_POLARITY(TIM_ICPolarity)); |
||
1042 | assert_param(IS_TIM_IC_FILTER(ICFilter)); |
||
1043 | /* Configure the Timer Input Clock Source */
|
||
1044 | if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2)
|
||
1045 | { |
||
1046 | TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); |
||
1047 | } |
||
1048 | else
|
||
1049 | { |
||
1050 | TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); |
||
1051 | } |
||
1052 | /* Select the Trigger source */
|
||
1053 | TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource); |
||
1054 | /* Select the External clock mode1 */
|
||
1055 | TIMx->SMCR |= TIM_SlaveMode_External1; |
||
1056 | } |
||
1057 | |||
1058 | /**
|
||
1059 | * @brief Configures the External clock Mode1
|
||
1060 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1061 | * @param TIM_ExtTRGPrescaler: The external Trigger Prescaler.
|
||
1062 | * This parameter can be one of the following values:
|
||
1063 | * @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF.
|
||
1064 | * @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2.
|
||
1065 | * @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4.
|
||
1066 | * @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8.
|
||
1067 | * @param TIM_ExtTRGPolarity: The external Trigger Polarity.
|
||
1068 | * This parameter can be one of the following values:
|
||
1069 | * @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active.
|
||
1070 | * @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active.
|
||
1071 | * @param ExtTRGFilter: External Trigger Filter.
|
||
1072 | * This parameter must be a value between 0x00 and 0x0F
|
||
1073 | * @retval None
|
||
1074 | */
|
||
1075 | void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
|
||
1076 | uint16_t ExtTRGFilter) |
||
1077 | { |
||
1078 | uint16_t tmpsmcr = 0;
|
||
1079 | /* Check the parameters */
|
||
1080 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1081 | assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); |
||
1082 | assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); |
||
1083 | assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); |
||
1084 | /* Configure the ETR Clock source */
|
||
1085 | TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); |
||
1086 | |||
1087 | /* Get the TIMx SMCR register value */
|
||
1088 | tmpsmcr = TIMx->SMCR; |
||
1089 | /* Reset the SMS Bits */
|
||
1090 | tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS)); |
||
1091 | /* Select the External clock mode1 */
|
||
1092 | tmpsmcr |= TIM_SlaveMode_External1; |
||
1093 | /* Select the Trigger selection : ETRF */
|
||
1094 | tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS)); |
||
1095 | tmpsmcr |= TIM_TS_ETRF; |
||
1096 | /* Write to TIMx SMCR */
|
||
1097 | TIMx->SMCR = tmpsmcr; |
||
1098 | } |
||
1099 | |||
1100 | /**
|
||
1101 | * @brief Configures the External clock Mode2
|
||
1102 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1103 | * @param TIM_ExtTRGPrescaler: The external Trigger Prescaler.
|
||
1104 | * This parameter can be one of the following values:
|
||
1105 | * @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF.
|
||
1106 | * @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2.
|
||
1107 | * @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4.
|
||
1108 | * @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8.
|
||
1109 | * @param TIM_ExtTRGPolarity: The external Trigger Polarity.
|
||
1110 | * This parameter can be one of the following values:
|
||
1111 | * @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active.
|
||
1112 | * @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active.
|
||
1113 | * @param ExtTRGFilter: External Trigger Filter.
|
||
1114 | * This parameter must be a value between 0x00 and 0x0F
|
||
1115 | * @retval None
|
||
1116 | */
|
||
1117 | void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,
|
||
1118 | uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter) |
||
1119 | { |
||
1120 | /* Check the parameters */
|
||
1121 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1122 | assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); |
||
1123 | assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); |
||
1124 | assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); |
||
1125 | /* Configure the ETR Clock source */
|
||
1126 | TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); |
||
1127 | /* Enable the External clock mode2 */
|
||
1128 | TIMx->SMCR |= TIM_SMCR_ECE; |
||
1129 | } |
||
1130 | |||
1131 | /**
|
||
1132 | * @brief Configures the TIMx External Trigger (ETR).
|
||
1133 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1134 | * @param TIM_ExtTRGPrescaler: The external Trigger Prescaler.
|
||
1135 | * This parameter can be one of the following values:
|
||
1136 | * @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF.
|
||
1137 | * @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2.
|
||
1138 | * @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4.
|
||
1139 | * @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8.
|
||
1140 | * @param TIM_ExtTRGPolarity: The external Trigger Polarity.
|
||
1141 | * This parameter can be one of the following values:
|
||
1142 | * @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active.
|
||
1143 | * @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active.
|
||
1144 | * @param ExtTRGFilter: External Trigger Filter.
|
||
1145 | * This parameter must be a value between 0x00 and 0x0F
|
||
1146 | * @retval None
|
||
1147 | */
|
||
1148 | void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
|
||
1149 | uint16_t ExtTRGFilter) |
||
1150 | { |
||
1151 | uint16_t tmpsmcr = 0;
|
||
1152 | /* Check the parameters */
|
||
1153 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1154 | assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); |
||
1155 | assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); |
||
1156 | assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); |
||
1157 | tmpsmcr = TIMx->SMCR; |
||
1158 | /* Reset the ETR Bits */
|
||
1159 | tmpsmcr &= SMCR_ETR_Mask; |
||
1160 | /* Set the Prescaler, the Filter value and the Polarity */
|
||
1161 | tmpsmcr |= (uint16_t)(TIM_ExtTRGPrescaler | (uint16_t)(TIM_ExtTRGPolarity | (uint16_t)(ExtTRGFilter << (uint16_t)8)));
|
||
1162 | /* Write to TIMx SMCR */
|
||
1163 | TIMx->SMCR = tmpsmcr; |
||
1164 | } |
||
1165 | |||
1166 | /**
|
||
1167 | * @brief Configures the TIMx Prescaler.
|
||
1168 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
1169 | * @param Prescaler: specifies the Prescaler Register value
|
||
1170 | * @param TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode
|
||
1171 | * This parameter can be one of the following values:
|
||
1172 | * @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event.
|
||
1173 | * @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediately.
|
||
1174 | * @retval None
|
||
1175 | */
|
||
1176 | void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)
|
||
1177 | { |
||
1178 | /* Check the parameters */
|
||
1179 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
1180 | assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode)); |
||
1181 | /* Set the Prescaler value */
|
||
1182 | TIMx->PSC = Prescaler; |
||
1183 | /* Set or reset the UG Bit */
|
||
1184 | TIMx->EGR = TIM_PSCReloadMode; |
||
1185 | } |
||
1186 | |||
1187 | /**
|
||
1188 | * @brief Specifies the TIMx Counter Mode to be used.
|
||
1189 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1190 | * @param TIM_CounterMode: specifies the Counter Mode to be used
|
||
1191 | * This parameter can be one of the following values:
|
||
1192 | * @arg TIM_CounterMode_Up: TIM Up Counting Mode
|
||
1193 | * @arg TIM_CounterMode_Down: TIM Down Counting Mode
|
||
1194 | * @arg TIM_CounterMode_CenterAligned1: TIM Center Aligned Mode1
|
||
1195 | * @arg TIM_CounterMode_CenterAligned2: TIM Center Aligned Mode2
|
||
1196 | * @arg TIM_CounterMode_CenterAligned3: TIM Center Aligned Mode3
|
||
1197 | * @retval None
|
||
1198 | */
|
||
1199 | void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode)
|
||
1200 | { |
||
1201 | uint16_t tmpcr1 = 0;
|
||
1202 | /* Check the parameters */
|
||
1203 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1204 | assert_param(IS_TIM_COUNTER_MODE(TIM_CounterMode)); |
||
1205 | tmpcr1 = TIMx->CR1; |
||
1206 | /* Reset the CMS and DIR Bits */
|
||
1207 | tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS))); |
||
1208 | /* Set the Counter Mode */
|
||
1209 | tmpcr1 |= TIM_CounterMode; |
||
1210 | /* Write to TIMx CR1 register */
|
||
1211 | TIMx->CR1 = tmpcr1; |
||
1212 | } |
||
1213 | |||
1214 | /**
|
||
1215 | * @brief Selects the Input Trigger source
|
||
1216 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
1217 | * @param TIM_InputTriggerSource: The Input Trigger source.
|
||
1218 | * This parameter can be one of the following values:
|
||
1219 | * @arg TIM_TS_ITR0: Internal Trigger 0
|
||
1220 | * @arg TIM_TS_ITR1: Internal Trigger 1
|
||
1221 | * @arg TIM_TS_ITR2: Internal Trigger 2
|
||
1222 | * @arg TIM_TS_ITR3: Internal Trigger 3
|
||
1223 | * @arg TIM_TS_TI1F_ED: TI1 Edge Detector
|
||
1224 | * @arg TIM_TS_TI1FP1: Filtered Timer Input 1
|
||
1225 | * @arg TIM_TS_TI2FP2: Filtered Timer Input 2
|
||
1226 | * @arg TIM_TS_ETRF: External Trigger input
|
||
1227 | * @retval None
|
||
1228 | */
|
||
1229 | void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
|
||
1230 | { |
||
1231 | uint16_t tmpsmcr = 0;
|
||
1232 | /* Check the parameters */
|
||
1233 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
1234 | assert_param(IS_TIM_TRIGGER_SELECTION(TIM_InputTriggerSource)); |
||
1235 | /* Get the TIMx SMCR register value */
|
||
1236 | tmpsmcr = TIMx->SMCR; |
||
1237 | /* Reset the TS Bits */
|
||
1238 | tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS)); |
||
1239 | /* Set the Input Trigger source */
|
||
1240 | tmpsmcr |= TIM_InputTriggerSource; |
||
1241 | /* Write to TIMx SMCR */
|
||
1242 | TIMx->SMCR = tmpsmcr; |
||
1243 | } |
||
1244 | |||
1245 | /**
|
||
1246 | * @brief Configures the TIMx Encoder Interface.
|
||
1247 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1248 | * @param TIM_EncoderMode: specifies the TIMx Encoder Mode.
|
||
1249 | * This parameter can be one of the following values:
|
||
1250 | * @arg TIM_EncoderMode_TI1: Counter counts on TI1FP1 edge depending on TI2FP2 level.
|
||
1251 | * @arg TIM_EncoderMode_TI2: Counter counts on TI2FP2 edge depending on TI1FP1 level.
|
||
1252 | * @arg TIM_EncoderMode_TI12: Counter counts on both TI1FP1 and TI2FP2 edges depending
|
||
1253 | * on the level of the other input.
|
||
1254 | * @param TIM_IC1Polarity: specifies the IC1 Polarity
|
||
1255 | * This parameter can be one of the following values:
|
||
1256 | * @arg TIM_ICPolarity_Falling: IC Falling edge.
|
||
1257 | * @arg TIM_ICPolarity_Rising: IC Rising edge.
|
||
1258 | * @param TIM_IC2Polarity: specifies the IC2 Polarity
|
||
1259 | * This parameter can be one of the following values:
|
||
1260 | * @arg TIM_ICPolarity_Falling: IC Falling edge.
|
||
1261 | * @arg TIM_ICPolarity_Rising: IC Rising edge.
|
||
1262 | * @retval None
|
||
1263 | */
|
||
1264 | void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,
|
||
1265 | uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity) |
||
1266 | { |
||
1267 | uint16_t tmpsmcr = 0;
|
||
1268 | uint16_t tmpccmr1 = 0;
|
||
1269 | uint16_t tmpccer = 0;
|
||
1270 | |||
1271 | /* Check the parameters */
|
||
1272 | assert_param(IS_TIM_LIST5_PERIPH(TIMx)); |
||
1273 | assert_param(IS_TIM_ENCODER_MODE(TIM_EncoderMode)); |
||
1274 | assert_param(IS_TIM_IC_POLARITY(TIM_IC1Polarity)); |
||
1275 | assert_param(IS_TIM_IC_POLARITY(TIM_IC2Polarity)); |
||
1276 | |||
1277 | /* Get the TIMx SMCR register value */
|
||
1278 | tmpsmcr = TIMx->SMCR; |
||
1279 | |||
1280 | /* Get the TIMx CCMR1 register value */
|
||
1281 | tmpccmr1 = TIMx->CCMR1; |
||
1282 | |||
1283 | /* Get the TIMx CCER register value */
|
||
1284 | tmpccer = TIMx->CCER; |
||
1285 | |||
1286 | /* Set the encoder Mode */
|
||
1287 | tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS)); |
||
1288 | tmpsmcr |= TIM_EncoderMode; |
||
1289 | |||
1290 | /* Select the Capture Compare 1 and the Capture Compare 2 as input */
|
||
1291 | tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S))); |
||
1292 | tmpccmr1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0; |
||
1293 | |||
1294 | /* Set the TI1 and the TI2 Polarities */
|
||
1295 | tmpccer &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCER_CC1P)) & ((uint16_t)~((uint16_t)TIM_CCER_CC2P))); |
||
1296 | tmpccer |= (uint16_t)(TIM_IC1Polarity | (uint16_t)(TIM_IC2Polarity << (uint16_t)4));
|
||
1297 | |||
1298 | /* Write to TIMx SMCR */
|
||
1299 | TIMx->SMCR = tmpsmcr; |
||
1300 | /* Write to TIMx CCMR1 */
|
||
1301 | TIMx->CCMR1 = tmpccmr1; |
||
1302 | /* Write to TIMx CCER */
|
||
1303 | TIMx->CCER = tmpccer; |
||
1304 | } |
||
1305 | |||
1306 | /**
|
||
1307 | * @brief Forces the TIMx output 1 waveform to active or inactive level.
|
||
1308 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
1309 | * @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform.
|
||
1310 | * This parameter can be one of the following values:
|
||
1311 | * @arg TIM_ForcedAction_Active: Force active level on OC1REF
|
||
1312 | * @arg TIM_ForcedAction_InActive: Force inactive level on OC1REF.
|
||
1313 | * @retval None
|
||
1314 | */
|
||
1315 | void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
|
||
1316 | { |
||
1317 | uint16_t tmpccmr1 = 0;
|
||
1318 | /* Check the parameters */
|
||
1319 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
1320 | assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); |
||
1321 | tmpccmr1 = TIMx->CCMR1; |
||
1322 | /* Reset the OC1M Bits */
|
||
1323 | tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1M); |
||
1324 | /* Configure The Forced output Mode */
|
||
1325 | tmpccmr1 |= TIM_ForcedAction; |
||
1326 | /* Write to TIMx CCMR1 register */
|
||
1327 | TIMx->CCMR1 = tmpccmr1; |
||
1328 | } |
||
1329 | |||
1330 | /**
|
||
1331 | * @brief Forces the TIMx output 2 waveform to active or inactive level.
|
||
1332 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
1333 | * @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform.
|
||
1334 | * This parameter can be one of the following values:
|
||
1335 | * @arg TIM_ForcedAction_Active: Force active level on OC2REF
|
||
1336 | * @arg TIM_ForcedAction_InActive: Force inactive level on OC2REF.
|
||
1337 | * @retval None
|
||
1338 | */
|
||
1339 | void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
|
||
1340 | { |
||
1341 | uint16_t tmpccmr1 = 0;
|
||
1342 | /* Check the parameters */
|
||
1343 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
1344 | assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); |
||
1345 | tmpccmr1 = TIMx->CCMR1; |
||
1346 | /* Reset the OC2M Bits */
|
||
1347 | tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2M); |
||
1348 | /* Configure The Forced output Mode */
|
||
1349 | tmpccmr1 |= (uint16_t)(TIM_ForcedAction << 8);
|
||
1350 | /* Write to TIMx CCMR1 register */
|
||
1351 | TIMx->CCMR1 = tmpccmr1; |
||
1352 | } |
||
1353 | |||
1354 | /**
|
||
1355 | * @brief Forces the TIMx output 3 waveform to active or inactive level.
|
||
1356 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1357 | * @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform.
|
||
1358 | * This parameter can be one of the following values:
|
||
1359 | * @arg TIM_ForcedAction_Active: Force active level on OC3REF
|
||
1360 | * @arg TIM_ForcedAction_InActive: Force inactive level on OC3REF.
|
||
1361 | * @retval None
|
||
1362 | */
|
||
1363 | void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
|
||
1364 | { |
||
1365 | uint16_t tmpccmr2 = 0;
|
||
1366 | /* Check the parameters */
|
||
1367 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1368 | assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); |
||
1369 | tmpccmr2 = TIMx->CCMR2; |
||
1370 | /* Reset the OC1M Bits */
|
||
1371 | tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3M); |
||
1372 | /* Configure The Forced output Mode */
|
||
1373 | tmpccmr2 |= TIM_ForcedAction; |
||
1374 | /* Write to TIMx CCMR2 register */
|
||
1375 | TIMx->CCMR2 = tmpccmr2; |
||
1376 | } |
||
1377 | |||
1378 | /**
|
||
1379 | * @brief Forces the TIMx output 4 waveform to active or inactive level.
|
||
1380 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1381 | * @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform.
|
||
1382 | * This parameter can be one of the following values:
|
||
1383 | * @arg TIM_ForcedAction_Active: Force active level on OC4REF
|
||
1384 | * @arg TIM_ForcedAction_InActive: Force inactive level on OC4REF.
|
||
1385 | * @retval None
|
||
1386 | */
|
||
1387 | void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
|
||
1388 | { |
||
1389 | uint16_t tmpccmr2 = 0;
|
||
1390 | /* Check the parameters */
|
||
1391 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1392 | assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); |
||
1393 | tmpccmr2 = TIMx->CCMR2; |
||
1394 | /* Reset the OC2M Bits */
|
||
1395 | tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4M); |
||
1396 | /* Configure The Forced output Mode */
|
||
1397 | tmpccmr2 |= (uint16_t)(TIM_ForcedAction << 8);
|
||
1398 | /* Write to TIMx CCMR2 register */
|
||
1399 | TIMx->CCMR2 = tmpccmr2; |
||
1400 | } |
||
1401 | |||
1402 | /**
|
||
1403 | * @brief Enables or disables TIMx peripheral Preload register on ARR.
|
||
1404 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
1405 | * @param NewState: new state of the TIMx peripheral Preload register
|
||
1406 | * This parameter can be: ENABLE or DISABLE.
|
||
1407 | * @retval None
|
||
1408 | */
|
||
1409 | void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
|
||
1410 | { |
||
1411 | /* Check the parameters */
|
||
1412 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
1413 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
1414 | if (NewState != DISABLE)
|
||
1415 | { |
||
1416 | /* Set the ARR Preload Bit */
|
||
1417 | TIMx->CR1 |= TIM_CR1_ARPE; |
||
1418 | } |
||
1419 | else
|
||
1420 | { |
||
1421 | /* Reset the ARR Preload Bit */
|
||
1422 | TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE); |
||
1423 | } |
||
1424 | } |
||
1425 | |||
1426 | /**
|
||
1427 | * @brief Selects the TIM peripheral Commutation event.
|
||
1428 | * @param TIMx: where x can be 1, 8, 15, 16 or 17 to select the TIMx peripheral
|
||
1429 | * @param NewState: new state of the Commutation event.
|
||
1430 | * This parameter can be: ENABLE or DISABLE.
|
||
1431 | * @retval None
|
||
1432 | */
|
||
1433 | void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState)
|
||
1434 | { |
||
1435 | /* Check the parameters */
|
||
1436 | assert_param(IS_TIM_LIST2_PERIPH(TIMx)); |
||
1437 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
1438 | if (NewState != DISABLE)
|
||
1439 | { |
||
1440 | /* Set the COM Bit */
|
||
1441 | TIMx->CR2 |= TIM_CR2_CCUS; |
||
1442 | } |
||
1443 | else
|
||
1444 | { |
||
1445 | /* Reset the COM Bit */
|
||
1446 | TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCUS); |
||
1447 | } |
||
1448 | } |
||
1449 | |||
1450 | /**
|
||
1451 | * @brief Selects the TIMx peripheral Capture Compare DMA source.
|
||
1452 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 15, 16 or 17 to select
|
||
1453 | * the TIM peripheral.
|
||
1454 | * @param NewState: new state of the Capture Compare DMA source
|
||
1455 | * This parameter can be: ENABLE or DISABLE.
|
||
1456 | * @retval None
|
||
1457 | */
|
||
1458 | void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState)
|
||
1459 | { |
||
1460 | /* Check the parameters */
|
||
1461 | assert_param(IS_TIM_LIST4_PERIPH(TIMx)); |
||
1462 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
1463 | if (NewState != DISABLE)
|
||
1464 | { |
||
1465 | /* Set the CCDS Bit */
|
||
1466 | TIMx->CR2 |= TIM_CR2_CCDS; |
||
1467 | } |
||
1468 | else
|
||
1469 | { |
||
1470 | /* Reset the CCDS Bit */
|
||
1471 | TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCDS); |
||
1472 | } |
||
1473 | } |
||
1474 | |||
1475 | /**
|
||
1476 | * @brief Sets or Resets the TIM peripheral Capture Compare Preload Control bit.
|
||
1477 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8 or 15
|
||
1478 | * to select the TIMx peripheral
|
||
1479 | * @param NewState: new state of the Capture Compare Preload Control bit
|
||
1480 | * This parameter can be: ENABLE or DISABLE.
|
||
1481 | * @retval None
|
||
1482 | */
|
||
1483 | void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState)
|
||
1484 | { |
||
1485 | /* Check the parameters */
|
||
1486 | assert_param(IS_TIM_LIST5_PERIPH(TIMx)); |
||
1487 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
1488 | if (NewState != DISABLE)
|
||
1489 | { |
||
1490 | /* Set the CCPC Bit */
|
||
1491 | TIMx->CR2 |= TIM_CR2_CCPC; |
||
1492 | } |
||
1493 | else
|
||
1494 | { |
||
1495 | /* Reset the CCPC Bit */
|
||
1496 | TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCPC); |
||
1497 | } |
||
1498 | } |
||
1499 | |||
1500 | /**
|
||
1501 | * @brief Enables or disables the TIMx peripheral Preload register on CCR1.
|
||
1502 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
1503 | * @param TIM_OCPreload: new state of the TIMx peripheral Preload register
|
||
1504 | * This parameter can be one of the following values:
|
||
1505 | * @arg TIM_OCPreload_Enable
|
||
1506 | * @arg TIM_OCPreload_Disable
|
||
1507 | * @retval None
|
||
1508 | */
|
||
1509 | void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
|
||
1510 | { |
||
1511 | uint16_t tmpccmr1 = 0;
|
||
1512 | /* Check the parameters */
|
||
1513 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
1514 | assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); |
||
1515 | tmpccmr1 = TIMx->CCMR1; |
||
1516 | /* Reset the OC1PE Bit */
|
||
1517 | tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1PE); |
||
1518 | /* Enable or Disable the Output Compare Preload feature */
|
||
1519 | tmpccmr1 |= TIM_OCPreload; |
||
1520 | /* Write to TIMx CCMR1 register */
|
||
1521 | TIMx->CCMR1 = tmpccmr1; |
||
1522 | } |
||
1523 | |||
1524 | /**
|
||
1525 | * @brief Enables or disables the TIMx peripheral Preload register on CCR2.
|
||
1526 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select
|
||
1527 | * the TIM peripheral.
|
||
1528 | * @param TIM_OCPreload: new state of the TIMx peripheral Preload register
|
||
1529 | * This parameter can be one of the following values:
|
||
1530 | * @arg TIM_OCPreload_Enable
|
||
1531 | * @arg TIM_OCPreload_Disable
|
||
1532 | * @retval None
|
||
1533 | */
|
||
1534 | void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
|
||
1535 | { |
||
1536 | uint16_t tmpccmr1 = 0;
|
||
1537 | /* Check the parameters */
|
||
1538 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
1539 | assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); |
||
1540 | tmpccmr1 = TIMx->CCMR1; |
||
1541 | /* Reset the OC2PE Bit */
|
||
1542 | tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2PE); |
||
1543 | /* Enable or Disable the Output Compare Preload feature */
|
||
1544 | tmpccmr1 |= (uint16_t)(TIM_OCPreload << 8);
|
||
1545 | /* Write to TIMx CCMR1 register */
|
||
1546 | TIMx->CCMR1 = tmpccmr1; |
||
1547 | } |
||
1548 | |||
1549 | /**
|
||
1550 | * @brief Enables or disables the TIMx peripheral Preload register on CCR3.
|
||
1551 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1552 | * @param TIM_OCPreload: new state of the TIMx peripheral Preload register
|
||
1553 | * This parameter can be one of the following values:
|
||
1554 | * @arg TIM_OCPreload_Enable
|
||
1555 | * @arg TIM_OCPreload_Disable
|
||
1556 | * @retval None
|
||
1557 | */
|
||
1558 | void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
|
||
1559 | { |
||
1560 | uint16_t tmpccmr2 = 0;
|
||
1561 | /* Check the parameters */
|
||
1562 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1563 | assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); |
||
1564 | tmpccmr2 = TIMx->CCMR2; |
||
1565 | /* Reset the OC3PE Bit */
|
||
1566 | tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3PE); |
||
1567 | /* Enable or Disable the Output Compare Preload feature */
|
||
1568 | tmpccmr2 |= TIM_OCPreload; |
||
1569 | /* Write to TIMx CCMR2 register */
|
||
1570 | TIMx->CCMR2 = tmpccmr2; |
||
1571 | } |
||
1572 | |||
1573 | /**
|
||
1574 | * @brief Enables or disables the TIMx peripheral Preload register on CCR4.
|
||
1575 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1576 | * @param TIM_OCPreload: new state of the TIMx peripheral Preload register
|
||
1577 | * This parameter can be one of the following values:
|
||
1578 | * @arg TIM_OCPreload_Enable
|
||
1579 | * @arg TIM_OCPreload_Disable
|
||
1580 | * @retval None
|
||
1581 | */
|
||
1582 | void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
|
||
1583 | { |
||
1584 | uint16_t tmpccmr2 = 0;
|
||
1585 | /* Check the parameters */
|
||
1586 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1587 | assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); |
||
1588 | tmpccmr2 = TIMx->CCMR2; |
||
1589 | /* Reset the OC4PE Bit */
|
||
1590 | tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4PE); |
||
1591 | /* Enable or Disable the Output Compare Preload feature */
|
||
1592 | tmpccmr2 |= (uint16_t)(TIM_OCPreload << 8);
|
||
1593 | /* Write to TIMx CCMR2 register */
|
||
1594 | TIMx->CCMR2 = tmpccmr2; |
||
1595 | } |
||
1596 | |||
1597 | /**
|
||
1598 | * @brief Configures the TIMx Output Compare 1 Fast feature.
|
||
1599 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
1600 | * @param TIM_OCFast: new state of the Output Compare Fast Enable Bit.
|
||
1601 | * This parameter can be one of the following values:
|
||
1602 | * @arg TIM_OCFast_Enable: TIM output compare fast enable
|
||
1603 | * @arg TIM_OCFast_Disable: TIM output compare fast disable
|
||
1604 | * @retval None
|
||
1605 | */
|
||
1606 | void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
|
||
1607 | { |
||
1608 | uint16_t tmpccmr1 = 0;
|
||
1609 | /* Check the parameters */
|
||
1610 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
1611 | assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); |
||
1612 | /* Get the TIMx CCMR1 register value */
|
||
1613 | tmpccmr1 = TIMx->CCMR1; |
||
1614 | /* Reset the OC1FE Bit */
|
||
1615 | tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1FE); |
||
1616 | /* Enable or Disable the Output Compare Fast Bit */
|
||
1617 | tmpccmr1 |= TIM_OCFast; |
||
1618 | /* Write to TIMx CCMR1 */
|
||
1619 | TIMx->CCMR1 = tmpccmr1; |
||
1620 | } |
||
1621 | |||
1622 | /**
|
||
1623 | * @brief Configures the TIMx Output Compare 2 Fast feature.
|
||
1624 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select
|
||
1625 | * the TIM peripheral.
|
||
1626 | * @param TIM_OCFast: new state of the Output Compare Fast Enable Bit.
|
||
1627 | * This parameter can be one of the following values:
|
||
1628 | * @arg TIM_OCFast_Enable: TIM output compare fast enable
|
||
1629 | * @arg TIM_OCFast_Disable: TIM output compare fast disable
|
||
1630 | * @retval None
|
||
1631 | */
|
||
1632 | void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
|
||
1633 | { |
||
1634 | uint16_t tmpccmr1 = 0;
|
||
1635 | /* Check the parameters */
|
||
1636 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
1637 | assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); |
||
1638 | /* Get the TIMx CCMR1 register value */
|
||
1639 | tmpccmr1 = TIMx->CCMR1; |
||
1640 | /* Reset the OC2FE Bit */
|
||
1641 | tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2FE); |
||
1642 | /* Enable or Disable the Output Compare Fast Bit */
|
||
1643 | tmpccmr1 |= (uint16_t)(TIM_OCFast << 8);
|
||
1644 | /* Write to TIMx CCMR1 */
|
||
1645 | TIMx->CCMR1 = tmpccmr1; |
||
1646 | } |
||
1647 | |||
1648 | /**
|
||
1649 | * @brief Configures the TIMx Output Compare 3 Fast feature.
|
||
1650 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1651 | * @param TIM_OCFast: new state of the Output Compare Fast Enable Bit.
|
||
1652 | * This parameter can be one of the following values:
|
||
1653 | * @arg TIM_OCFast_Enable: TIM output compare fast enable
|
||
1654 | * @arg TIM_OCFast_Disable: TIM output compare fast disable
|
||
1655 | * @retval None
|
||
1656 | */
|
||
1657 | void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
|
||
1658 | { |
||
1659 | uint16_t tmpccmr2 = 0;
|
||
1660 | /* Check the parameters */
|
||
1661 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1662 | assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); |
||
1663 | /* Get the TIMx CCMR2 register value */
|
||
1664 | tmpccmr2 = TIMx->CCMR2; |
||
1665 | /* Reset the OC3FE Bit */
|
||
1666 | tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3FE); |
||
1667 | /* Enable or Disable the Output Compare Fast Bit */
|
||
1668 | tmpccmr2 |= TIM_OCFast; |
||
1669 | /* Write to TIMx CCMR2 */
|
||
1670 | TIMx->CCMR2 = tmpccmr2; |
||
1671 | } |
||
1672 | |||
1673 | /**
|
||
1674 | * @brief Configures the TIMx Output Compare 4 Fast feature.
|
||
1675 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1676 | * @param TIM_OCFast: new state of the Output Compare Fast Enable Bit.
|
||
1677 | * This parameter can be one of the following values:
|
||
1678 | * @arg TIM_OCFast_Enable: TIM output compare fast enable
|
||
1679 | * @arg TIM_OCFast_Disable: TIM output compare fast disable
|
||
1680 | * @retval None
|
||
1681 | */
|
||
1682 | void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
|
||
1683 | { |
||
1684 | uint16_t tmpccmr2 = 0;
|
||
1685 | /* Check the parameters */
|
||
1686 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1687 | assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); |
||
1688 | /* Get the TIMx CCMR2 register value */
|
||
1689 | tmpccmr2 = TIMx->CCMR2; |
||
1690 | /* Reset the OC4FE Bit */
|
||
1691 | tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4FE); |
||
1692 | /* Enable or Disable the Output Compare Fast Bit */
|
||
1693 | tmpccmr2 |= (uint16_t)(TIM_OCFast << 8);
|
||
1694 | /* Write to TIMx CCMR2 */
|
||
1695 | TIMx->CCMR2 = tmpccmr2; |
||
1696 | } |
||
1697 | |||
1698 | /**
|
||
1699 | * @brief Clears or safeguards the OCREF1 signal on an external event
|
||
1700 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1701 | * @param TIM_OCClear: new state of the Output Compare Clear Enable Bit.
|
||
1702 | * This parameter can be one of the following values:
|
||
1703 | * @arg TIM_OCClear_Enable: TIM Output clear enable
|
||
1704 | * @arg TIM_OCClear_Disable: TIM Output clear disable
|
||
1705 | * @retval None
|
||
1706 | */
|
||
1707 | void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
|
||
1708 | { |
||
1709 | uint16_t tmpccmr1 = 0;
|
||
1710 | /* Check the parameters */
|
||
1711 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1712 | assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); |
||
1713 | |||
1714 | tmpccmr1 = TIMx->CCMR1; |
||
1715 | |||
1716 | /* Reset the OC1CE Bit */
|
||
1717 | tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1CE); |
||
1718 | /* Enable or Disable the Output Compare Clear Bit */
|
||
1719 | tmpccmr1 |= TIM_OCClear; |
||
1720 | /* Write to TIMx CCMR1 register */
|
||
1721 | TIMx->CCMR1 = tmpccmr1; |
||
1722 | } |
||
1723 | |||
1724 | /**
|
||
1725 | * @brief Clears or safeguards the OCREF2 signal on an external event
|
||
1726 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1727 | * @param TIM_OCClear: new state of the Output Compare Clear Enable Bit.
|
||
1728 | * This parameter can be one of the following values:
|
||
1729 | * @arg TIM_OCClear_Enable: TIM Output clear enable
|
||
1730 | * @arg TIM_OCClear_Disable: TIM Output clear disable
|
||
1731 | * @retval None
|
||
1732 | */
|
||
1733 | void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
|
||
1734 | { |
||
1735 | uint16_t tmpccmr1 = 0;
|
||
1736 | /* Check the parameters */
|
||
1737 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1738 | assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); |
||
1739 | tmpccmr1 = TIMx->CCMR1; |
||
1740 | /* Reset the OC2CE Bit */
|
||
1741 | tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2CE); |
||
1742 | /* Enable or Disable the Output Compare Clear Bit */
|
||
1743 | tmpccmr1 |= (uint16_t)(TIM_OCClear << 8);
|
||
1744 | /* Write to TIMx CCMR1 register */
|
||
1745 | TIMx->CCMR1 = tmpccmr1; |
||
1746 | } |
||
1747 | |||
1748 | /**
|
||
1749 | * @brief Clears or safeguards the OCREF3 signal on an external event
|
||
1750 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1751 | * @param TIM_OCClear: new state of the Output Compare Clear Enable Bit.
|
||
1752 | * This parameter can be one of the following values:
|
||
1753 | * @arg TIM_OCClear_Enable: TIM Output clear enable
|
||
1754 | * @arg TIM_OCClear_Disable: TIM Output clear disable
|
||
1755 | * @retval None
|
||
1756 | */
|
||
1757 | void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
|
||
1758 | { |
||
1759 | uint16_t tmpccmr2 = 0;
|
||
1760 | /* Check the parameters */
|
||
1761 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1762 | assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); |
||
1763 | tmpccmr2 = TIMx->CCMR2; |
||
1764 | /* Reset the OC3CE Bit */
|
||
1765 | tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3CE); |
||
1766 | /* Enable or Disable the Output Compare Clear Bit */
|
||
1767 | tmpccmr2 |= TIM_OCClear; |
||
1768 | /* Write to TIMx CCMR2 register */
|
||
1769 | TIMx->CCMR2 = tmpccmr2; |
||
1770 | } |
||
1771 | |||
1772 | /**
|
||
1773 | * @brief Clears or safeguards the OCREF4 signal on an external event
|
||
1774 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1775 | * @param TIM_OCClear: new state of the Output Compare Clear Enable Bit.
|
||
1776 | * This parameter can be one of the following values:
|
||
1777 | * @arg TIM_OCClear_Enable: TIM Output clear enable
|
||
1778 | * @arg TIM_OCClear_Disable: TIM Output clear disable
|
||
1779 | * @retval None
|
||
1780 | */
|
||
1781 | void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
|
||
1782 | { |
||
1783 | uint16_t tmpccmr2 = 0;
|
||
1784 | /* Check the parameters */
|
||
1785 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1786 | assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); |
||
1787 | tmpccmr2 = TIMx->CCMR2; |
||
1788 | /* Reset the OC4CE Bit */
|
||
1789 | tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4CE); |
||
1790 | /* Enable or Disable the Output Compare Clear Bit */
|
||
1791 | tmpccmr2 |= (uint16_t)(TIM_OCClear << 8);
|
||
1792 | /* Write to TIMx CCMR2 register */
|
||
1793 | TIMx->CCMR2 = tmpccmr2; |
||
1794 | } |
||
1795 | |||
1796 | /**
|
||
1797 | * @brief Configures the TIMx channel 1 polarity.
|
||
1798 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
1799 | * @param TIM_OCPolarity: specifies the OC1 Polarity
|
||
1800 | * This parameter can be one of the following values:
|
||
1801 | * @arg TIM_OCPolarity_High: Output Compare active high
|
||
1802 | * @arg TIM_OCPolarity_Low: Output Compare active low
|
||
1803 | * @retval None
|
||
1804 | */
|
||
1805 | void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
|
||
1806 | { |
||
1807 | uint16_t tmpccer = 0;
|
||
1808 | /* Check the parameters */
|
||
1809 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
1810 | assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); |
||
1811 | tmpccer = TIMx->CCER; |
||
1812 | /* Set or Reset the CC1P Bit */
|
||
1813 | tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1P); |
||
1814 | tmpccer |= TIM_OCPolarity; |
||
1815 | /* Write to TIMx CCER register */
|
||
1816 | TIMx->CCER = tmpccer; |
||
1817 | } |
||
1818 | |||
1819 | /**
|
||
1820 | * @brief Configures the TIMx Channel 1N polarity.
|
||
1821 | * @param TIMx: where x can be 1, 8, 15, 16 or 17 to select the TIM peripheral.
|
||
1822 | * @param TIM_OCNPolarity: specifies the OC1N Polarity
|
||
1823 | * This parameter can be one of the following values:
|
||
1824 | * @arg TIM_OCNPolarity_High: Output Compare active high
|
||
1825 | * @arg TIM_OCNPolarity_Low: Output Compare active low
|
||
1826 | * @retval None
|
||
1827 | */
|
||
1828 | void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
|
||
1829 | { |
||
1830 | uint16_t tmpccer = 0;
|
||
1831 | /* Check the parameters */
|
||
1832 | assert_param(IS_TIM_LIST2_PERIPH(TIMx)); |
||
1833 | assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); |
||
1834 | |||
1835 | tmpccer = TIMx->CCER; |
||
1836 | /* Set or Reset the CC1NP Bit */
|
||
1837 | tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1NP); |
||
1838 | tmpccer |= TIM_OCNPolarity; |
||
1839 | /* Write to TIMx CCER register */
|
||
1840 | TIMx->CCER = tmpccer; |
||
1841 | } |
||
1842 | |||
1843 | /**
|
||
1844 | * @brief Configures the TIMx channel 2 polarity.
|
||
1845 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
1846 | * @param TIM_OCPolarity: specifies the OC2 Polarity
|
||
1847 | * This parameter can be one of the following values:
|
||
1848 | * @arg TIM_OCPolarity_High: Output Compare active high
|
||
1849 | * @arg TIM_OCPolarity_Low: Output Compare active low
|
||
1850 | * @retval None
|
||
1851 | */
|
||
1852 | void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
|
||
1853 | { |
||
1854 | uint16_t tmpccer = 0;
|
||
1855 | /* Check the parameters */
|
||
1856 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
1857 | assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); |
||
1858 | tmpccer = TIMx->CCER; |
||
1859 | /* Set or Reset the CC2P Bit */
|
||
1860 | tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC2P); |
||
1861 | tmpccer |= (uint16_t)(TIM_OCPolarity << 4);
|
||
1862 | /* Write to TIMx CCER register */
|
||
1863 | TIMx->CCER = tmpccer; |
||
1864 | } |
||
1865 | |||
1866 | /**
|
||
1867 | * @brief Configures the TIMx Channel 2N polarity.
|
||
1868 | * @param TIMx: where x can be 1 or 8 to select the TIM peripheral.
|
||
1869 | * @param TIM_OCNPolarity: specifies the OC2N Polarity
|
||
1870 | * This parameter can be one of the following values:
|
||
1871 | * @arg TIM_OCNPolarity_High: Output Compare active high
|
||
1872 | * @arg TIM_OCNPolarity_Low: Output Compare active low
|
||
1873 | * @retval None
|
||
1874 | */
|
||
1875 | void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
|
||
1876 | { |
||
1877 | uint16_t tmpccer = 0;
|
||
1878 | /* Check the parameters */
|
||
1879 | assert_param(IS_TIM_LIST1_PERIPH(TIMx)); |
||
1880 | assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); |
||
1881 | |||
1882 | tmpccer = TIMx->CCER; |
||
1883 | /* Set or Reset the CC2NP Bit */
|
||
1884 | tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC2NP); |
||
1885 | tmpccer |= (uint16_t)(TIM_OCNPolarity << 4);
|
||
1886 | /* Write to TIMx CCER register */
|
||
1887 | TIMx->CCER = tmpccer; |
||
1888 | } |
||
1889 | |||
1890 | /**
|
||
1891 | * @brief Configures the TIMx channel 3 polarity.
|
||
1892 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1893 | * @param TIM_OCPolarity: specifies the OC3 Polarity
|
||
1894 | * This parameter can be one of the following values:
|
||
1895 | * @arg TIM_OCPolarity_High: Output Compare active high
|
||
1896 | * @arg TIM_OCPolarity_Low: Output Compare active low
|
||
1897 | * @retval None
|
||
1898 | */
|
||
1899 | void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
|
||
1900 | { |
||
1901 | uint16_t tmpccer = 0;
|
||
1902 | /* Check the parameters */
|
||
1903 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1904 | assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); |
||
1905 | tmpccer = TIMx->CCER; |
||
1906 | /* Set or Reset the CC3P Bit */
|
||
1907 | tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC3P); |
||
1908 | tmpccer |= (uint16_t)(TIM_OCPolarity << 8);
|
||
1909 | /* Write to TIMx CCER register */
|
||
1910 | TIMx->CCER = tmpccer; |
||
1911 | } |
||
1912 | |||
1913 | /**
|
||
1914 | * @brief Configures the TIMx Channel 3N polarity.
|
||
1915 | * @param TIMx: where x can be 1 or 8 to select the TIM peripheral.
|
||
1916 | * @param TIM_OCNPolarity: specifies the OC3N Polarity
|
||
1917 | * This parameter can be one of the following values:
|
||
1918 | * @arg TIM_OCNPolarity_High: Output Compare active high
|
||
1919 | * @arg TIM_OCNPolarity_Low: Output Compare active low
|
||
1920 | * @retval None
|
||
1921 | */
|
||
1922 | void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
|
||
1923 | { |
||
1924 | uint16_t tmpccer = 0;
|
||
1925 | |||
1926 | /* Check the parameters */
|
||
1927 | assert_param(IS_TIM_LIST1_PERIPH(TIMx)); |
||
1928 | assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); |
||
1929 | |||
1930 | tmpccer = TIMx->CCER; |
||
1931 | /* Set or Reset the CC3NP Bit */
|
||
1932 | tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC3NP); |
||
1933 | tmpccer |= (uint16_t)(TIM_OCNPolarity << 8);
|
||
1934 | /* Write to TIMx CCER register */
|
||
1935 | TIMx->CCER = tmpccer; |
||
1936 | } |
||
1937 | |||
1938 | /**
|
||
1939 | * @brief Configures the TIMx channel 4 polarity.
|
||
1940 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
1941 | * @param TIM_OCPolarity: specifies the OC4 Polarity
|
||
1942 | * This parameter can be one of the following values:
|
||
1943 | * @arg TIM_OCPolarity_High: Output Compare active high
|
||
1944 | * @arg TIM_OCPolarity_Low: Output Compare active low
|
||
1945 | * @retval None
|
||
1946 | */
|
||
1947 | void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
|
||
1948 | { |
||
1949 | uint16_t tmpccer = 0;
|
||
1950 | /* Check the parameters */
|
||
1951 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
1952 | assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); |
||
1953 | tmpccer = TIMx->CCER; |
||
1954 | /* Set or Reset the CC4P Bit */
|
||
1955 | tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC4P); |
||
1956 | tmpccer |= (uint16_t)(TIM_OCPolarity << 12);
|
||
1957 | /* Write to TIMx CCER register */
|
||
1958 | TIMx->CCER = tmpccer; |
||
1959 | } |
||
1960 | |||
1961 | /**
|
||
1962 | * @brief Enables or disables the TIM Capture Compare Channel x.
|
||
1963 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
1964 | * @param TIM_Channel: specifies the TIM Channel
|
||
1965 | * This parameter can be one of the following values:
|
||
1966 | * @arg TIM_Channel_1: TIM Channel 1
|
||
1967 | * @arg TIM_Channel_2: TIM Channel 2
|
||
1968 | * @arg TIM_Channel_3: TIM Channel 3
|
||
1969 | * @arg TIM_Channel_4: TIM Channel 4
|
||
1970 | * @param TIM_CCx: specifies the TIM Channel CCxE bit new state.
|
||
1971 | * This parameter can be: TIM_CCx_Enable or TIM_CCx_Disable.
|
||
1972 | * @retval None
|
||
1973 | */
|
||
1974 | void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx)
|
||
1975 | { |
||
1976 | uint16_t tmp = 0;
|
||
1977 | |||
1978 | /* Check the parameters */
|
||
1979 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
1980 | assert_param(IS_TIM_CHANNEL(TIM_Channel)); |
||
1981 | assert_param(IS_TIM_CCX(TIM_CCx)); |
||
1982 | |||
1983 | tmp = CCER_CCE_Set << TIM_Channel; |
||
1984 | |||
1985 | /* Reset the CCxE Bit */
|
||
1986 | TIMx->CCER &= (uint16_t)~ tmp; |
||
1987 | |||
1988 | /* Set or reset the CCxE Bit */
|
||
1989 | TIMx->CCER |= (uint16_t)(TIM_CCx << TIM_Channel); |
||
1990 | } |
||
1991 | |||
1992 | /**
|
||
1993 | * @brief Enables or disables the TIM Capture Compare Channel xN.
|
||
1994 | * @param TIMx: where x can be 1, 8, 15, 16 or 17 to select the TIM peripheral.
|
||
1995 | * @param TIM_Channel: specifies the TIM Channel
|
||
1996 | * This parameter can be one of the following values:
|
||
1997 | * @arg TIM_Channel_1: TIM Channel 1
|
||
1998 | * @arg TIM_Channel_2: TIM Channel 2
|
||
1999 | * @arg TIM_Channel_3: TIM Channel 3
|
||
2000 | * @param TIM_CCxN: specifies the TIM Channel CCxNE bit new state.
|
||
2001 | * This parameter can be: TIM_CCxN_Enable or TIM_CCxN_Disable.
|
||
2002 | * @retval None
|
||
2003 | */
|
||
2004 | void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN)
|
||
2005 | { |
||
2006 | uint16_t tmp = 0;
|
||
2007 | |||
2008 | /* Check the parameters */
|
||
2009 | assert_param(IS_TIM_LIST2_PERIPH(TIMx)); |
||
2010 | assert_param(IS_TIM_COMPLEMENTARY_CHANNEL(TIM_Channel)); |
||
2011 | assert_param(IS_TIM_CCXN(TIM_CCxN)); |
||
2012 | |||
2013 | tmp = CCER_CCNE_Set << TIM_Channel; |
||
2014 | |||
2015 | /* Reset the CCxNE Bit */
|
||
2016 | TIMx->CCER &= (uint16_t) ~tmp; |
||
2017 | |||
2018 | /* Set or reset the CCxNE Bit */
|
||
2019 | TIMx->CCER |= (uint16_t)(TIM_CCxN << TIM_Channel); |
||
2020 | } |
||
2021 | |||
2022 | /**
|
||
2023 | * @brief Selects the TIM Output Compare Mode.
|
||
2024 | * @note This function disables the selected channel before changing the Output
|
||
2025 | * Compare Mode.
|
||
2026 | * User has to enable this channel using TIM_CCxCmd and TIM_CCxNCmd functions.
|
||
2027 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
2028 | * @param TIM_Channel: specifies the TIM Channel
|
||
2029 | * This parameter can be one of the following values:
|
||
2030 | * @arg TIM_Channel_1: TIM Channel 1
|
||
2031 | * @arg TIM_Channel_2: TIM Channel 2
|
||
2032 | * @arg TIM_Channel_3: TIM Channel 3
|
||
2033 | * @arg TIM_Channel_4: TIM Channel 4
|
||
2034 | * @param TIM_OCMode: specifies the TIM Output Compare Mode.
|
||
2035 | * This parameter can be one of the following values:
|
||
2036 | * @arg TIM_OCMode_Timing
|
||
2037 | * @arg TIM_OCMode_Active
|
||
2038 | * @arg TIM_OCMode_Toggle
|
||
2039 | * @arg TIM_OCMode_PWM1
|
||
2040 | * @arg TIM_OCMode_PWM2
|
||
2041 | * @arg TIM_ForcedAction_Active
|
||
2042 | * @arg TIM_ForcedAction_InActive
|
||
2043 | * @retval None
|
||
2044 | */
|
||
2045 | void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode)
|
||
2046 | { |
||
2047 | uint32_t tmp = 0;
|
||
2048 | uint16_t tmp1 = 0;
|
||
2049 | |||
2050 | /* Check the parameters */
|
||
2051 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
2052 | assert_param(IS_TIM_CHANNEL(TIM_Channel)); |
||
2053 | assert_param(IS_TIM_OCM(TIM_OCMode)); |
||
2054 | |||
2055 | tmp = (uint32_t) TIMx; |
||
2056 | tmp += CCMR_Offset; |
||
2057 | |||
2058 | tmp1 = CCER_CCE_Set << (uint16_t)TIM_Channel; |
||
2059 | |||
2060 | /* Disable the Channel: Reset the CCxE Bit */
|
||
2061 | TIMx->CCER &= (uint16_t) ~tmp1; |
||
2062 | |||
2063 | if((TIM_Channel == TIM_Channel_1) ||(TIM_Channel == TIM_Channel_3))
|
||
2064 | { |
||
2065 | tmp += (TIM_Channel>>1);
|
||
2066 | |||
2067 | /* Reset the OCxM bits in the CCMRx register */
|
||
2068 | *(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_CCMR1_OC1M); |
||
2069 | |||
2070 | /* Configure the OCxM bits in the CCMRx register */
|
||
2071 | *(__IO uint32_t *) tmp |= TIM_OCMode; |
||
2072 | } |
||
2073 | else
|
||
2074 | { |
||
2075 | tmp += (uint16_t)(TIM_Channel - (uint16_t)4)>> (uint16_t)1; |
||
2076 | |||
2077 | /* Reset the OCxM bits in the CCMRx register */
|
||
2078 | *(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_CCMR1_OC2M); |
||
2079 | |||
2080 | /* Configure the OCxM bits in the CCMRx register */
|
||
2081 | *(__IO uint32_t *) tmp |= (uint16_t)(TIM_OCMode << 8);
|
||
2082 | } |
||
2083 | } |
||
2084 | |||
2085 | /**
|
||
2086 | * @brief Enables or Disables the TIMx Update event.
|
||
2087 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2088 | * @param NewState: new state of the TIMx UDIS bit
|
||
2089 | * This parameter can be: ENABLE or DISABLE.
|
||
2090 | * @retval None
|
||
2091 | */
|
||
2092 | void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
|
||
2093 | { |
||
2094 | /* Check the parameters */
|
||
2095 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2096 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
2097 | if (NewState != DISABLE)
|
||
2098 | { |
||
2099 | /* Set the Update Disable Bit */
|
||
2100 | TIMx->CR1 |= TIM_CR1_UDIS; |
||
2101 | } |
||
2102 | else
|
||
2103 | { |
||
2104 | /* Reset the Update Disable Bit */
|
||
2105 | TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_UDIS); |
||
2106 | } |
||
2107 | } |
||
2108 | |||
2109 | /**
|
||
2110 | * @brief Configures the TIMx Update Request Interrupt source.
|
||
2111 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2112 | * @param TIM_UpdateSource: specifies the Update source.
|
||
2113 | * This parameter can be one of the following values:
|
||
2114 | * @arg TIM_UpdateSource_Regular: Source of update is the counter overflow/underflow
|
||
2115 | or the setting of UG bit, or an update generation
|
||
2116 | through the slave mode controller.
|
||
2117 | * @arg TIM_UpdateSource_Global: Source of update is counter overflow/underflow.
|
||
2118 | * @retval None
|
||
2119 | */
|
||
2120 | void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource)
|
||
2121 | { |
||
2122 | /* Check the parameters */
|
||
2123 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2124 | assert_param(IS_TIM_UPDATE_SOURCE(TIM_UpdateSource)); |
||
2125 | if (TIM_UpdateSource != TIM_UpdateSource_Global)
|
||
2126 | { |
||
2127 | /* Set the URS Bit */
|
||
2128 | TIMx->CR1 |= TIM_CR1_URS; |
||
2129 | } |
||
2130 | else
|
||
2131 | { |
||
2132 | /* Reset the URS Bit */
|
||
2133 | TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_URS); |
||
2134 | } |
||
2135 | } |
||
2136 | |||
2137 | /**
|
||
2138 | * @brief Enables or disables the TIMx's Hall sensor interface.
|
||
2139 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2140 | * @param NewState: new state of the TIMx Hall sensor interface.
|
||
2141 | * This parameter can be: ENABLE or DISABLE.
|
||
2142 | * @retval None
|
||
2143 | */
|
||
2144 | void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState)
|
||
2145 | { |
||
2146 | /* Check the parameters */
|
||
2147 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
2148 | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
||
2149 | if (NewState != DISABLE)
|
||
2150 | { |
||
2151 | /* Set the TI1S Bit */
|
||
2152 | TIMx->CR2 |= TIM_CR2_TI1S; |
||
2153 | } |
||
2154 | else
|
||
2155 | { |
||
2156 | /* Reset the TI1S Bit */
|
||
2157 | TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_TI1S); |
||
2158 | } |
||
2159 | } |
||
2160 | |||
2161 | /**
|
||
2162 | * @brief Selects the TIMx's One Pulse Mode.
|
||
2163 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2164 | * @param TIM_OPMode: specifies the OPM Mode to be used.
|
||
2165 | * This parameter can be one of the following values:
|
||
2166 | * @arg TIM_OPMode_Single
|
||
2167 | * @arg TIM_OPMode_Repetitive
|
||
2168 | * @retval None
|
||
2169 | */
|
||
2170 | void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode)
|
||
2171 | { |
||
2172 | /* Check the parameters */
|
||
2173 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2174 | assert_param(IS_TIM_OPM_MODE(TIM_OPMode)); |
||
2175 | /* Reset the OPM Bit */
|
||
2176 | TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_OPM); |
||
2177 | /* Configure the OPM Mode */
|
||
2178 | TIMx->CR1 |= TIM_OPMode; |
||
2179 | } |
||
2180 | |||
2181 | /**
|
||
2182 | * @brief Selects the TIMx Trigger Output Mode.
|
||
2183 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 6, 7, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
2184 | * @param TIM_TRGOSource: specifies the Trigger Output source.
|
||
2185 | * This paramter can be one of the following values:
|
||
2186 | *
|
||
2187 | * - For all TIMx
|
||
2188 | * @arg TIM_TRGOSource_Reset: The UG bit in the TIM_EGR register is used as the trigger output (TRGO).
|
||
2189 | * @arg TIM_TRGOSource_Enable: The Counter Enable CEN is used as the trigger output (TRGO).
|
||
2190 | * @arg TIM_TRGOSource_Update: The update event is selected as the trigger output (TRGO).
|
||
2191 | *
|
||
2192 | * - For all TIMx except TIM6 and TIM7
|
||
2193 | * @arg TIM_TRGOSource_OC1: The trigger output sends a positive pulse when the CC1IF flag
|
||
2194 | * is to be set, as soon as a capture or compare match occurs (TRGO).
|
||
2195 | * @arg TIM_TRGOSource_OC1Ref: OC1REF signal is used as the trigger output (TRGO).
|
||
2196 | * @arg TIM_TRGOSource_OC2Ref: OC2REF signal is used as the trigger output (TRGO).
|
||
2197 | * @arg TIM_TRGOSource_OC3Ref: OC3REF signal is used as the trigger output (TRGO).
|
||
2198 | * @arg TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output (TRGO).
|
||
2199 | *
|
||
2200 | * @retval None
|
||
2201 | */
|
||
2202 | void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource)
|
||
2203 | { |
||
2204 | /* Check the parameters */
|
||
2205 | assert_param(IS_TIM_LIST7_PERIPH(TIMx)); |
||
2206 | assert_param(IS_TIM_TRGO_SOURCE(TIM_TRGOSource)); |
||
2207 | /* Reset the MMS Bits */
|
||
2208 | TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_MMS); |
||
2209 | /* Select the TRGO source */
|
||
2210 | TIMx->CR2 |= TIM_TRGOSource; |
||
2211 | } |
||
2212 | |||
2213 | /**
|
||
2214 | * @brief Selects the TIMx Slave Mode.
|
||
2215 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
2216 | * @param TIM_SlaveMode: specifies the Timer Slave Mode.
|
||
2217 | * This parameter can be one of the following values:
|
||
2218 | * @arg TIM_SlaveMode_Reset: Rising edge of the selected trigger signal (TRGI) re-initializes
|
||
2219 | * the counter and triggers an update of the registers.
|
||
2220 | * @arg TIM_SlaveMode_Gated: The counter clock is enabled when the trigger signal (TRGI) is high.
|
||
2221 | * @arg TIM_SlaveMode_Trigger: The counter starts at a rising edge of the trigger TRGI.
|
||
2222 | * @arg TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter.
|
||
2223 | * @retval None
|
||
2224 | */
|
||
2225 | void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode)
|
||
2226 | { |
||
2227 | /* Check the parameters */
|
||
2228 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
2229 | assert_param(IS_TIM_SLAVE_MODE(TIM_SlaveMode)); |
||
2230 | /* Reset the SMS Bits */
|
||
2231 | TIMx->SMCR &= (uint16_t)~((uint16_t)TIM_SMCR_SMS); |
||
2232 | /* Select the Slave Mode */
|
||
2233 | TIMx->SMCR |= TIM_SlaveMode; |
||
2234 | } |
||
2235 | |||
2236 | /**
|
||
2237 | * @brief Sets or Resets the TIMx Master/Slave Mode.
|
||
2238 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
2239 | * @param TIM_MasterSlaveMode: specifies the Timer Master Slave Mode.
|
||
2240 | * This parameter can be one of the following values:
|
||
2241 | * @arg TIM_MasterSlaveMode_Enable: synchronization between the current timer
|
||
2242 | * and its slaves (through TRGO).
|
||
2243 | * @arg TIM_MasterSlaveMode_Disable: No action
|
||
2244 | * @retval None
|
||
2245 | */
|
||
2246 | void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode)
|
||
2247 | { |
||
2248 | /* Check the parameters */
|
||
2249 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
2250 | assert_param(IS_TIM_MSM_STATE(TIM_MasterSlaveMode)); |
||
2251 | /* Reset the MSM Bit */
|
||
2252 | TIMx->SMCR &= (uint16_t)~((uint16_t)TIM_SMCR_MSM); |
||
2253 | |||
2254 | /* Set or Reset the MSM Bit */
|
||
2255 | TIMx->SMCR |= TIM_MasterSlaveMode; |
||
2256 | } |
||
2257 | |||
2258 | /**
|
||
2259 | * @brief Sets the TIMx Counter Register value
|
||
2260 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2261 | * @param Counter: specifies the Counter register new value.
|
||
2262 | * @retval None
|
||
2263 | */
|
||
2264 | void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter)
|
||
2265 | { |
||
2266 | /* Check the parameters */
|
||
2267 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2268 | /* Set the Counter Register value */
|
||
2269 | TIMx->CNT = Counter; |
||
2270 | } |
||
2271 | |||
2272 | /**
|
||
2273 | * @brief Sets the TIMx Autoreload Register value
|
||
2274 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2275 | * @param Autoreload: specifies the Autoreload register new value.
|
||
2276 | * @retval None
|
||
2277 | */
|
||
2278 | void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload)
|
||
2279 | { |
||
2280 | /* Check the parameters */
|
||
2281 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2282 | /* Set the Autoreload Register value */
|
||
2283 | TIMx->ARR = Autoreload; |
||
2284 | } |
||
2285 | |||
2286 | /**
|
||
2287 | * @brief Sets the TIMx Capture Compare1 Register value
|
||
2288 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
2289 | * @param Compare1: specifies the Capture Compare1 register new value.
|
||
2290 | * @retval None
|
||
2291 | */
|
||
2292 | void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)
|
||
2293 | { |
||
2294 | /* Check the parameters */
|
||
2295 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
2296 | /* Set the Capture Compare1 Register value */
|
||
2297 | TIMx->CCR1 = Compare1; |
||
2298 | } |
||
2299 | |||
2300 | /**
|
||
2301 | * @brief Sets the TIMx Capture Compare2 Register value
|
||
2302 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
2303 | * @param Compare2: specifies the Capture Compare2 register new value.
|
||
2304 | * @retval None
|
||
2305 | */
|
||
2306 | void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)
|
||
2307 | { |
||
2308 | /* Check the parameters */
|
||
2309 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
2310 | /* Set the Capture Compare2 Register value */
|
||
2311 | TIMx->CCR2 = Compare2; |
||
2312 | } |
||
2313 | |||
2314 | /**
|
||
2315 | * @brief Sets the TIMx Capture Compare3 Register value
|
||
2316 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2317 | * @param Compare3: specifies the Capture Compare3 register new value.
|
||
2318 | * @retval None
|
||
2319 | */
|
||
2320 | void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3)
|
||
2321 | { |
||
2322 | /* Check the parameters */
|
||
2323 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
2324 | /* Set the Capture Compare3 Register value */
|
||
2325 | TIMx->CCR3 = Compare3; |
||
2326 | } |
||
2327 | |||
2328 | /**
|
||
2329 | * @brief Sets the TIMx Capture Compare4 Register value
|
||
2330 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2331 | * @param Compare4: specifies the Capture Compare4 register new value.
|
||
2332 | * @retval None
|
||
2333 | */
|
||
2334 | void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4)
|
||
2335 | { |
||
2336 | /* Check the parameters */
|
||
2337 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
2338 | /* Set the Capture Compare4 Register value */
|
||
2339 | TIMx->CCR4 = Compare4; |
||
2340 | } |
||
2341 | |||
2342 | /**
|
||
2343 | * @brief Sets the TIMx Input Capture 1 prescaler.
|
||
2344 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
2345 | * @param TIM_ICPSC: specifies the Input Capture1 prescaler new value.
|
||
2346 | * This parameter can be one of the following values:
|
||
2347 | * @arg TIM_ICPSC_DIV1: no prescaler
|
||
2348 | * @arg TIM_ICPSC_DIV2: capture is done once every 2 events
|
||
2349 | * @arg TIM_ICPSC_DIV4: capture is done once every 4 events
|
||
2350 | * @arg TIM_ICPSC_DIV8: capture is done once every 8 events
|
||
2351 | * @retval None
|
||
2352 | */
|
||
2353 | void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
|
||
2354 | { |
||
2355 | /* Check the parameters */
|
||
2356 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
2357 | assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); |
||
2358 | /* Reset the IC1PSC Bits */
|
||
2359 | TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC1PSC); |
||
2360 | /* Set the IC1PSC value */
|
||
2361 | TIMx->CCMR1 |= TIM_ICPSC; |
||
2362 | } |
||
2363 | |||
2364 | /**
|
||
2365 | * @brief Sets the TIMx Input Capture 2 prescaler.
|
||
2366 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
2367 | * @param TIM_ICPSC: specifies the Input Capture2 prescaler new value.
|
||
2368 | * This parameter can be one of the following values:
|
||
2369 | * @arg TIM_ICPSC_DIV1: no prescaler
|
||
2370 | * @arg TIM_ICPSC_DIV2: capture is done once every 2 events
|
||
2371 | * @arg TIM_ICPSC_DIV4: capture is done once every 4 events
|
||
2372 | * @arg TIM_ICPSC_DIV8: capture is done once every 8 events
|
||
2373 | * @retval None
|
||
2374 | */
|
||
2375 | void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
|
||
2376 | { |
||
2377 | /* Check the parameters */
|
||
2378 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
2379 | assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); |
||
2380 | /* Reset the IC2PSC Bits */
|
||
2381 | TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC2PSC); |
||
2382 | /* Set the IC2PSC value */
|
||
2383 | TIMx->CCMR1 |= (uint16_t)(TIM_ICPSC << 8);
|
||
2384 | } |
||
2385 | |||
2386 | /**
|
||
2387 | * @brief Sets the TIMx Input Capture 3 prescaler.
|
||
2388 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2389 | * @param TIM_ICPSC: specifies the Input Capture3 prescaler new value.
|
||
2390 | * This parameter can be one of the following values:
|
||
2391 | * @arg TIM_ICPSC_DIV1: no prescaler
|
||
2392 | * @arg TIM_ICPSC_DIV2: capture is done once every 2 events
|
||
2393 | * @arg TIM_ICPSC_DIV4: capture is done once every 4 events
|
||
2394 | * @arg TIM_ICPSC_DIV8: capture is done once every 8 events
|
||
2395 | * @retval None
|
||
2396 | */
|
||
2397 | void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
|
||
2398 | { |
||
2399 | /* Check the parameters */
|
||
2400 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
2401 | assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); |
||
2402 | /* Reset the IC3PSC Bits */
|
||
2403 | TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC3PSC); |
||
2404 | /* Set the IC3PSC value */
|
||
2405 | TIMx->CCMR2 |= TIM_ICPSC; |
||
2406 | } |
||
2407 | |||
2408 | /**
|
||
2409 | * @brief Sets the TIMx Input Capture 4 prescaler.
|
||
2410 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2411 | * @param TIM_ICPSC: specifies the Input Capture4 prescaler new value.
|
||
2412 | * This parameter can be one of the following values:
|
||
2413 | * @arg TIM_ICPSC_DIV1: no prescaler
|
||
2414 | * @arg TIM_ICPSC_DIV2: capture is done once every 2 events
|
||
2415 | * @arg TIM_ICPSC_DIV4: capture is done once every 4 events
|
||
2416 | * @arg TIM_ICPSC_DIV8: capture is done once every 8 events
|
||
2417 | * @retval None
|
||
2418 | */
|
||
2419 | void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
|
||
2420 | { |
||
2421 | /* Check the parameters */
|
||
2422 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
2423 | assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); |
||
2424 | /* Reset the IC4PSC Bits */
|
||
2425 | TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC4PSC); |
||
2426 | /* Set the IC4PSC value */
|
||
2427 | TIMx->CCMR2 |= (uint16_t)(TIM_ICPSC << 8);
|
||
2428 | } |
||
2429 | |||
2430 | /**
|
||
2431 | * @brief Sets the TIMx Clock Division value.
|
||
2432 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select
|
||
2433 | * the TIM peripheral.
|
||
2434 | * @param TIM_CKD: specifies the clock division value.
|
||
2435 | * This parameter can be one of the following value:
|
||
2436 | * @arg TIM_CKD_DIV1: TDTS = Tck_tim
|
||
2437 | * @arg TIM_CKD_DIV2: TDTS = 2*Tck_tim
|
||
2438 | * @arg TIM_CKD_DIV4: TDTS = 4*Tck_tim
|
||
2439 | * @retval None
|
||
2440 | */
|
||
2441 | void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD)
|
||
2442 | { |
||
2443 | /* Check the parameters */
|
||
2444 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
2445 | assert_param(IS_TIM_CKD_DIV(TIM_CKD)); |
||
2446 | /* Reset the CKD Bits */
|
||
2447 | TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_CKD); |
||
2448 | /* Set the CKD value */
|
||
2449 | TIMx->CR1 |= TIM_CKD; |
||
2450 | } |
||
2451 | |||
2452 | /**
|
||
2453 | * @brief Gets the TIMx Input Capture 1 value.
|
||
2454 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
2455 | * @retval Capture Compare 1 Register value.
|
||
2456 | */
|
||
2457 | uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx) |
||
2458 | { |
||
2459 | /* Check the parameters */
|
||
2460 | assert_param(IS_TIM_LIST8_PERIPH(TIMx)); |
||
2461 | /* Get the Capture 1 Register value */
|
||
2462 | return TIMx->CCR1;
|
||
2463 | } |
||
2464 | |||
2465 | /**
|
||
2466 | * @brief Gets the TIMx Input Capture 2 value.
|
||
2467 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
2468 | * @retval Capture Compare 2 Register value.
|
||
2469 | */
|
||
2470 | uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx) |
||
2471 | { |
||
2472 | /* Check the parameters */
|
||
2473 | assert_param(IS_TIM_LIST6_PERIPH(TIMx)); |
||
2474 | /* Get the Capture 2 Register value */
|
||
2475 | return TIMx->CCR2;
|
||
2476 | } |
||
2477 | |||
2478 | /**
|
||
2479 | * @brief Gets the TIMx Input Capture 3 value.
|
||
2480 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2481 | * @retval Capture Compare 3 Register value.
|
||
2482 | */
|
||
2483 | uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx) |
||
2484 | { |
||
2485 | /* Check the parameters */
|
||
2486 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
2487 | /* Get the Capture 3 Register value */
|
||
2488 | return TIMx->CCR3;
|
||
2489 | } |
||
2490 | |||
2491 | /**
|
||
2492 | * @brief Gets the TIMx Input Capture 4 value.
|
||
2493 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2494 | * @retval Capture Compare 4 Register value.
|
||
2495 | */
|
||
2496 | uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx) |
||
2497 | { |
||
2498 | /* Check the parameters */
|
||
2499 | assert_param(IS_TIM_LIST3_PERIPH(TIMx)); |
||
2500 | /* Get the Capture 4 Register value */
|
||
2501 | return TIMx->CCR4;
|
||
2502 | } |
||
2503 | |||
2504 | /**
|
||
2505 | * @brief Gets the TIMx Counter value.
|
||
2506 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2507 | * @retval Counter Register value.
|
||
2508 | */
|
||
2509 | uint16_t TIM_GetCounter(TIM_TypeDef* TIMx) |
||
2510 | { |
||
2511 | /* Check the parameters */
|
||
2512 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2513 | /* Get the Counter Register value */
|
||
2514 | return TIMx->CNT;
|
||
2515 | } |
||
2516 | |||
2517 | /**
|
||
2518 | * @brief Gets the TIMx Prescaler value.
|
||
2519 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2520 | * @retval Prescaler Register value.
|
||
2521 | */
|
||
2522 | uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx) |
||
2523 | { |
||
2524 | /* Check the parameters */
|
||
2525 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2526 | /* Get the Prescaler Register value */
|
||
2527 | return TIMx->PSC;
|
||
2528 | } |
||
2529 | |||
2530 | /**
|
||
2531 | * @brief Checks whether the specified TIM flag is set or not.
|
||
2532 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2533 | * @param TIM_FLAG: specifies the flag to check.
|
||
2534 | * This parameter can be one of the following values:
|
||
2535 | * @arg TIM_FLAG_Update: TIM update Flag
|
||
2536 | * @arg TIM_FLAG_CC1: TIM Capture Compare 1 Flag
|
||
2537 | * @arg TIM_FLAG_CC2: TIM Capture Compare 2 Flag
|
||
2538 | * @arg TIM_FLAG_CC3: TIM Capture Compare 3 Flag
|
||
2539 | * @arg TIM_FLAG_CC4: TIM Capture Compare 4 Flag
|
||
2540 | * @arg TIM_FLAG_COM: TIM Commutation Flag
|
||
2541 | * @arg TIM_FLAG_Trigger: TIM Trigger Flag
|
||
2542 | * @arg TIM_FLAG_Break: TIM Break Flag
|
||
2543 | * @arg TIM_FLAG_CC1OF: TIM Capture Compare 1 overcapture Flag
|
||
2544 | * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 overcapture Flag
|
||
2545 | * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 overcapture Flag
|
||
2546 | * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 overcapture Flag
|
||
2547 | * @note
|
||
2548 | * - TIM6 and TIM7 can have only one update flag.
|
||
2549 | * - TIM9, TIM12 and TIM15 can have only TIM_FLAG_Update, TIM_FLAG_CC1,
|
||
2550 | * TIM_FLAG_CC2 or TIM_FLAG_Trigger.
|
||
2551 | * - TIM10, TIM11, TIM13, TIM14, TIM16 and TIM17 can have TIM_FLAG_Update or TIM_FLAG_CC1.
|
||
2552 | * - TIM_FLAG_Break is used only with TIM1, TIM8 and TIM15.
|
||
2553 | * - TIM_FLAG_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
|
||
2554 | * @retval The new state of TIM_FLAG (SET or RESET).
|
||
2555 | */
|
||
2556 | FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) |
||
2557 | { |
||
2558 | ITStatus bitstatus = RESET; |
||
2559 | /* Check the parameters */
|
||
2560 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2561 | assert_param(IS_TIM_GET_FLAG(TIM_FLAG)); |
||
2562 | |||
2563 | if ((TIMx->SR & TIM_FLAG) != (uint16_t)RESET)
|
||
2564 | { |
||
2565 | bitstatus = SET; |
||
2566 | } |
||
2567 | else
|
||
2568 | { |
||
2569 | bitstatus = RESET; |
||
2570 | } |
||
2571 | return bitstatus;
|
||
2572 | } |
||
2573 | |||
2574 | /**
|
||
2575 | * @brief Clears the TIMx's pending flags.
|
||
2576 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2577 | * @param TIM_FLAG: specifies the flag bit to clear.
|
||
2578 | * This parameter can be any combination of the following values:
|
||
2579 | * @arg TIM_FLAG_Update: TIM update Flag
|
||
2580 | * @arg TIM_FLAG_CC1: TIM Capture Compare 1 Flag
|
||
2581 | * @arg TIM_FLAG_CC2: TIM Capture Compare 2 Flag
|
||
2582 | * @arg TIM_FLAG_CC3: TIM Capture Compare 3 Flag
|
||
2583 | * @arg TIM_FLAG_CC4: TIM Capture Compare 4 Flag
|
||
2584 | * @arg TIM_FLAG_COM: TIM Commutation Flag
|
||
2585 | * @arg TIM_FLAG_Trigger: TIM Trigger Flag
|
||
2586 | * @arg TIM_FLAG_Break: TIM Break Flag
|
||
2587 | * @arg TIM_FLAG_CC1OF: TIM Capture Compare 1 overcapture Flag
|
||
2588 | * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 overcapture Flag
|
||
2589 | * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 overcapture Flag
|
||
2590 | * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 overcapture Flag
|
||
2591 | * @note
|
||
2592 | * - TIM6 and TIM7 can have only one update flag.
|
||
2593 | * - TIM9, TIM12 and TIM15 can have only TIM_FLAG_Update, TIM_FLAG_CC1,
|
||
2594 | * TIM_FLAG_CC2 or TIM_FLAG_Trigger.
|
||
2595 | * - TIM10, TIM11, TIM13, TIM14, TIM16 and TIM17 can have TIM_FLAG_Update or TIM_FLAG_CC1.
|
||
2596 | * - TIM_FLAG_Break is used only with TIM1, TIM8 and TIM15.
|
||
2597 | * - TIM_FLAG_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
|
||
2598 | * @retval None
|
||
2599 | */
|
||
2600 | void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
|
||
2601 | { |
||
2602 | /* Check the parameters */
|
||
2603 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2604 | assert_param(IS_TIM_CLEAR_FLAG(TIM_FLAG)); |
||
2605 | |||
2606 | /* Clear the flags */
|
||
2607 | TIMx->SR = (uint16_t)~TIM_FLAG; |
||
2608 | } |
||
2609 | |||
2610 | /**
|
||
2611 | * @brief Checks whether the TIM interrupt has occurred or not.
|
||
2612 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2613 | * @param TIM_IT: specifies the TIM interrupt source to check.
|
||
2614 | * This parameter can be one of the following values:
|
||
2615 | * @arg TIM_IT_Update: TIM update Interrupt source
|
||
2616 | * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source
|
||
2617 | * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source
|
||
2618 | * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source
|
||
2619 | * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source
|
||
2620 | * @arg TIM_IT_COM: TIM Commutation Interrupt source
|
||
2621 | * @arg TIM_IT_Trigger: TIM Trigger Interrupt source
|
||
2622 | * @arg TIM_IT_Break: TIM Break Interrupt source
|
||
2623 | * @note
|
||
2624 | * - TIM6 and TIM7 can generate only an update interrupt.
|
||
2625 | * - TIM9, TIM12 and TIM15 can have only TIM_IT_Update, TIM_IT_CC1,
|
||
2626 | * TIM_IT_CC2 or TIM_IT_Trigger.
|
||
2627 | * - TIM10, TIM11, TIM13, TIM14, TIM16 and TIM17 can have TIM_IT_Update or TIM_IT_CC1.
|
||
2628 | * - TIM_IT_Break is used only with TIM1, TIM8 and TIM15.
|
||
2629 | * - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
|
||
2630 | * @retval The new state of the TIM_IT(SET or RESET).
|
||
2631 | */
|
||
2632 | ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT) |
||
2633 | { |
||
2634 | ITStatus bitstatus = RESET; |
||
2635 | uint16_t itstatus = 0x0, itenable = 0x0; |
||
2636 | /* Check the parameters */
|
||
2637 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2638 | assert_param(IS_TIM_GET_IT(TIM_IT)); |
||
2639 | |||
2640 | itstatus = TIMx->SR & TIM_IT; |
||
2641 | |||
2642 | itenable = TIMx->DIER & TIM_IT; |
||
2643 | if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET))
|
||
2644 | { |
||
2645 | bitstatus = SET; |
||
2646 | } |
||
2647 | else
|
||
2648 | { |
||
2649 | bitstatus = RESET; |
||
2650 | } |
||
2651 | return bitstatus;
|
||
2652 | } |
||
2653 | |||
2654 | /**
|
||
2655 | * @brief Clears the TIMx's interrupt pending bits.
|
||
2656 | * @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
|
||
2657 | * @param TIM_IT: specifies the pending bit to clear.
|
||
2658 | * This parameter can be any combination of the following values:
|
||
2659 | * @arg TIM_IT_Update: TIM1 update Interrupt source
|
||
2660 | * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source
|
||
2661 | * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source
|
||
2662 | * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source
|
||
2663 | * @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source
|
||
2664 | * @arg TIM_IT_COM: TIM Commutation Interrupt source
|
||
2665 | * @arg TIM_IT_Trigger: TIM Trigger Interrupt source
|
||
2666 | * @arg TIM_IT_Break: TIM Break Interrupt source
|
||
2667 | * @note
|
||
2668 | * - TIM6 and TIM7 can generate only an update interrupt.
|
||
2669 | * - TIM9, TIM12 and TIM15 can have only TIM_IT_Update, TIM_IT_CC1,
|
||
2670 | * TIM_IT_CC2 or TIM_IT_Trigger.
|
||
2671 | * - TIM10, TIM11, TIM13, TIM14, TIM16 and TIM17 can have TIM_IT_Update or TIM_IT_CC1.
|
||
2672 | * - TIM_IT_Break is used only with TIM1, TIM8 and TIM15.
|
||
2673 | * - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
|
||
2674 | * @retval None
|
||
2675 | */
|
||
2676 | void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
|
||
2677 | { |
||
2678 | /* Check the parameters */
|
||
2679 | assert_param(IS_TIM_ALL_PERIPH(TIMx)); |
||
2680 | assert_param(IS_TIM_IT(TIM_IT)); |
||
2681 | /* Clear the IT pending Bit */
|
||
2682 | TIMx->SR = (uint16_t)~TIM_IT; |
||
2683 | } |
||
2684 | |||
2685 | /**
|
||
2686 | * @brief Configure the TI1 as Input.
|
||
2687 | * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
|
||
2688 | * @param TIM_ICPolarity : The Input Polarity.
|
||
2689 | * This parameter can be one of the following values:
|
||
2690 | * @arg TIM_ICPolarity_Rising
|
||
2691 | * @arg TIM_ICPolarity_Falling
|
||
2692 | * @param TIM_ICSelection: specifies the input to be used.
|
||
2693 | * This parameter can be one of the following values:
|
||
2694 | * @arg TIM_ICSelection_DirectTI: TIM Input 1 is selected to be connected to IC1.
|
||
2695 | * @arg TIM_ICSelection_IndirectTI: TIM Input 1 is selected to be connected to IC2.
|
||
2696 | * @arg TIM_ICSelection_TRC: TIM Input 1 is selected to be connected to TRC.
|
||
2697 | * @param TIM_ICFilter: Specifies the Input Capture Filter.
|
||
2698 | * This parameter must be a value between 0x00 and 0x0F.
|
||
2699 | * @retval None
|
||
2700 | */
|
||
2701 | static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, |
||
2702 | uint16_t TIM_ICFilter) |
||
2703 | { |
||
2704 | uint16_t tmpccmr1 = 0, tmpccer = 0; |
||
2705 | /* Disable the Channel 1: Reset the CC1E Bit */
|
||
2706 | TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC1E); |
||
2707 | tmpccmr1 = TIMx->CCMR1; |
||
2708 | tmpccer = TIMx->CCER; |
||
2709 | /* Select the Input and set the filter */
|
||
2710 | tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC1F))); |
||
2711 | tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
|
||
2712 | |||
2713 | if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
|
||
2714 | (TIMx == TIM4) ||(TIMx == TIM5)) |
||
2715 | { |
||
2716 | /* Select the Polarity and set the CC1E Bit */
|
||
2717 | tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P)); |
||
2718 | tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E); |
||
2719 | } |
||
2720 | else
|
||
2721 | { |
||
2722 | /* Select the Polarity and set the CC1E Bit */
|
||
2723 | tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P | TIM_CCER_CC1NP)); |
||
2724 | tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E); |
||
2725 | } |
||
2726 | |||
2727 | /* Write to TIMx CCMR1 and CCER registers */
|
||
2728 | TIMx->CCMR1 = tmpccmr1; |
||
2729 | TIMx->CCER = tmpccer; |
||
2730 | } |
||
2731 | |||
2732 | /**
|
||
2733 | * @brief Configure the TI2 as Input.
|
||
2734 | * @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
|
||
2735 | * @param TIM_ICPolarity : The Input Polarity.
|
||
2736 | * This parameter can be one of the following values:
|
||
2737 | * @arg TIM_ICPolarity_Rising
|
||
2738 | * @arg TIM_ICPolarity_Falling
|
||
2739 | * @param TIM_ICSelection: specifies the input to be used.
|
||
2740 | * This parameter can be one of the following values:
|
||
2741 | * @arg TIM_ICSelection_DirectTI: TIM Input 2 is selected to be connected to IC2.
|
||
2742 | * @arg TIM_ICSelection_IndirectTI: TIM Input 2 is selected to be connected to IC1.
|
||
2743 | * @arg TIM_ICSelection_TRC: TIM Input 2 is selected to be connected to TRC.
|
||
2744 | * @param TIM_ICFilter: Specifies the Input Capture Filter.
|
||
2745 | * This parameter must be a value between 0x00 and 0x0F.
|
||
2746 | * @retval None
|
||
2747 | */
|
||
2748 | static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, |
||
2749 | uint16_t TIM_ICFilter) |
||
2750 | { |
||
2751 | uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0; |
||
2752 | /* Disable the Channel 2: Reset the CC2E Bit */
|
||
2753 | TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC2E); |
||
2754 | tmpccmr1 = TIMx->CCMR1; |
||
2755 | tmpccer = TIMx->CCER; |
||
2756 | tmp = (uint16_t)(TIM_ICPolarity << 4);
|
||
2757 | /* Select the Input and set the filter */
|
||
2758 | tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC2S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC2F))); |
||
2759 | tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12);
|
||
2760 | tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8);
|
||
2761 | |||
2762 | if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
|
||
2763 | (TIMx == TIM4) ||(TIMx == TIM5)) |
||
2764 | { |
||
2765 | /* Select the Polarity and set the CC2E Bit */
|
||
2766 | tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P)); |
||
2767 | tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E); |
||
2768 | } |
||
2769 | else
|
||
2770 | { |
||
2771 | /* Select the Polarity and set the CC2E Bit */
|
||
2772 | tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P | TIM_CCER_CC2NP)); |
||
2773 | tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC2E); |
||
2774 | } |
||
2775 | |||
2776 | /* Write to TIMx CCMR1 and CCER registers */
|
||
2777 | TIMx->CCMR1 = tmpccmr1 ; |
||
2778 | TIMx->CCER = tmpccer; |
||
2779 | } |
||
2780 | |||
2781 | /**
|
||
2782 | * @brief Configure the TI3 as Input.
|
||
2783 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2784 | * @param TIM_ICPolarity : The Input Polarity.
|
||
2785 | * This parameter can be one of the following values:
|
||
2786 | * @arg TIM_ICPolarity_Rising
|
||
2787 | * @arg TIM_ICPolarity_Falling
|
||
2788 | * @param TIM_ICSelection: specifies the input to be used.
|
||
2789 | * This parameter can be one of the following values:
|
||
2790 | * @arg TIM_ICSelection_DirectTI: TIM Input 3 is selected to be connected to IC3.
|
||
2791 | * @arg TIM_ICSelection_IndirectTI: TIM Input 3 is selected to be connected to IC4.
|
||
2792 | * @arg TIM_ICSelection_TRC: TIM Input 3 is selected to be connected to TRC.
|
||
2793 | * @param TIM_ICFilter: Specifies the Input Capture Filter.
|
||
2794 | * This parameter must be a value between 0x00 and 0x0F.
|
||
2795 | * @retval None
|
||
2796 | */
|
||
2797 | static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, |
||
2798 | uint16_t TIM_ICFilter) |
||
2799 | { |
||
2800 | uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; |
||
2801 | /* Disable the Channel 3: Reset the CC3E Bit */
|
||
2802 | TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC3E); |
||
2803 | tmpccmr2 = TIMx->CCMR2; |
||
2804 | tmpccer = TIMx->CCER; |
||
2805 | tmp = (uint16_t)(TIM_ICPolarity << 8);
|
||
2806 | /* Select the Input and set the filter */
|
||
2807 | tmpccmr2 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR2_CC3S)) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC3F))); |
||
2808 | tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
|
||
2809 | |||
2810 | if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
|
||
2811 | (TIMx == TIM4) ||(TIMx == TIM5)) |
||
2812 | { |
||
2813 | /* Select the Polarity and set the CC3E Bit */
|
||
2814 | tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P)); |
||
2815 | tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E); |
||
2816 | } |
||
2817 | else
|
||
2818 | { |
||
2819 | /* Select the Polarity and set the CC3E Bit */
|
||
2820 | tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC3NP)); |
||
2821 | tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC3E); |
||
2822 | } |
||
2823 | |||
2824 | /* Write to TIMx CCMR2 and CCER registers */
|
||
2825 | TIMx->CCMR2 = tmpccmr2; |
||
2826 | TIMx->CCER = tmpccer; |
||
2827 | } |
||
2828 | |||
2829 | /**
|
||
2830 | * @brief Configure the TI4 as Input.
|
||
2831 | * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
|
||
2832 | * @param TIM_ICPolarity : The Input Polarity.
|
||
2833 | * This parameter can be one of the following values:
|
||
2834 | * @arg TIM_ICPolarity_Rising
|
||
2835 | * @arg TIM_ICPolarity_Falling
|
||
2836 | * @param TIM_ICSelection: specifies the input to be used.
|
||
2837 | * This parameter can be one of the following values:
|
||
2838 | * @arg TIM_ICSelection_DirectTI: TIM Input 4 is selected to be connected to IC4.
|
||
2839 | * @arg TIM_ICSelection_IndirectTI: TIM Input 4 is selected to be connected to IC3.
|
||
2840 | * @arg TIM_ICSelection_TRC: TIM Input 4 is selected to be connected to TRC.
|
||
2841 | * @param TIM_ICFilter: Specifies the Input Capture Filter.
|
||
2842 | * This parameter must be a value between 0x00 and 0x0F.
|
||
2843 | * @retval None
|
||
2844 | */
|
||
2845 | static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, |
||
2846 | uint16_t TIM_ICFilter) |
||
2847 | { |
||
2848 | uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; |
||
2849 | |||
2850 | /* Disable the Channel 4: Reset the CC4E Bit */
|
||
2851 | TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC4E); |
||
2852 | tmpccmr2 = TIMx->CCMR2; |
||
2853 | tmpccer = TIMx->CCER; |
||
2854 | tmp = (uint16_t)(TIM_ICPolarity << 12);
|
||
2855 | /* Select the Input and set the filter */
|
||
2856 | tmpccmr2 &= (uint16_t)((uint16_t)(~(uint16_t)TIM_CCMR2_CC4S) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC4F))); |
||
2857 | tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8);
|
||
2858 | tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12);
|
||
2859 | |||
2860 | if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
|
||
2861 | (TIMx == TIM4) ||(TIMx == TIM5)) |
||
2862 | { |
||
2863 | /* Select the Polarity and set the CC4E Bit */
|
||
2864 | tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC4P)); |
||
2865 | tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E); |
||
2866 | } |
||
2867 | else
|
||
2868 | { |
||
2869 | /* Select the Polarity and set the CC4E Bit */
|
||
2870 | tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC4NP)); |
||
2871 | tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC4E); |
||
2872 | } |
||
2873 | /* Write to TIMx CCMR2 and CCER registers */
|
||
2874 | TIMx->CCMR2 = tmpccmr2; |
||
2875 | TIMx->CCER = tmpccer; |
||
2876 | } |
||
2877 | |||
2878 | /**
|
||
2879 | * @}
|
||
2880 | */
|
||
2881 | |||
2882 | /**
|
||
2883 | * @}
|
||
2884 | */
|
||
2885 | |||
2886 | /**
|
||
2887 | * @}
|
||
2888 | */
|
||
2889 | |||
2890 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|