Mercurial > pub > halpp
comparison f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c @ 2:0c59e7a7782a
Working on GPIO and RCC
author | cin |
---|---|
date | Mon, 16 Jan 2017 11:04:47 +0300 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1:a0b14b11ad9f | 2:0c59e7a7782a |
---|---|
1 /** | |
2 ****************************************************************************** | |
3 * @file stm32f1xx_hal_tim_ex.c | |
4 * @author MCD Application Team | |
5 * @version V1.0.4 | |
6 * @date 29-April-2016 | |
7 * @brief TIM HAL module driver. | |
8 * This file provides firmware functions to manage the following | |
9 * functionalities of the Timer Extended peripheral: | |
10 * + Time Hall Sensor Interface Initialization | |
11 * + Time Hall Sensor Interface Start | |
12 * + Time Complementary signal bread and dead time configuration | |
13 * + Time Master and Slave synchronization configuration | |
14 * + Timer remapping capabilities configuration | |
15 @verbatim | |
16 ============================================================================== | |
17 ##### TIMER Extended features ##### | |
18 ============================================================================== | |
19 [..] | |
20 The Timer Extended features include: | |
21 (#) Complementary outputs with programmable dead-time for : | |
22 (++) Output Compare | |
23 (++) PWM generation (Edge and Center-aligned Mode) | |
24 (++) One-pulse mode output | |
25 (#) Synchronization circuit to control the timer with external signals and to | |
26 interconnect several timers together. | |
27 (#) Break input to put the timer output signals in reset state or in a known state. | |
28 (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for | |
29 positioning purposes | |
30 | |
31 ##### How to use this driver ##### | |
32 ============================================================================== | |
33 [..] | |
34 (#) Initialize the TIM low level resources by implementing the following functions | |
35 depending from feature used : | |
36 (++) Complementary Output Compare : HAL_TIM_OC_MspInit() | |
37 (++) Complementary PWM generation : HAL_TIM_PWM_MspInit() | |
38 (++) Complementary One-pulse mode output : HAL_TIM_OnePulse_MspInit() | |
39 (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit() | |
40 | |
41 (#) Initialize the TIM low level resources : | |
42 (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); | |
43 (##) TIM pins configuration | |
44 (+++) Enable the clock for the TIM GPIOs using the following function: | |
45 __HAL_RCC_GPIOx_CLK_ENABLE(); | |
46 (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); | |
47 | |
48 (#) The external Clock can be configured, if needed (the default clock is the | |
49 internal clock from the APBx), using the following function: | |
50 HAL_TIM_ConfigClockSource, the clock configuration should be done before | |
51 any start function. | |
52 | |
53 (#) Configure the TIM in the desired functioning mode using one of the | |
54 initialization function of this driver: | |
55 (++) HAL_TIMEx_HallSensor_Init and HAL_TIMEx_ConfigCommutationEvent: to use the | |
56 Timer Hall Sensor Interface and the commutation event with the corresponding | |
57 Interrupt and DMA request if needed (Note that One Timer is used to interface | |
58 with the Hall sensor Interface and another Timer should be used to use | |
59 the commutation event). | |
60 | |
61 (#) Activate the TIM peripheral using one of the start functions: | |
62 (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), HAL_TIMEx_OCN_Start_IT() | |
63 (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), HAL_TIMEx_PWMN_Start_IT() | |
64 (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT() | |
65 (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), HAL_TIMEx_HallSensor_Start_IT(). | |
66 | |
67 | |
68 @endverbatim | |
69 ****************************************************************************** | |
70 * @attention | |
71 * | |
72 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |
73 * | |
74 * Redistribution and use in source and binary forms, with or without modification, | |
75 * are permitted provided that the following conditions are met: | |
76 * 1. Redistributions of source code must retain the above copyright notice, | |
77 * this list of conditions and the following disclaimer. | |
78 * 2. Redistributions in binary form must reproduce the above copyright notice, | |
79 * this list of conditions and the following disclaimer in the documentation | |
80 * and/or other materials provided with the distribution. | |
81 * 3. Neither the name of STMicroelectronics nor the names of its contributors | |
82 * may be used to endorse or promote products derived from this software | |
83 * without specific prior written permission. | |
84 * | |
85 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
86 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
87 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
88 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
89 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
90 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
91 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
92 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
93 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
94 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
95 * | |
96 ****************************************************************************** | |
97 */ | |
98 | |
99 /* Includes ------------------------------------------------------------------*/ | |
100 #include "stm32f1xx_hal.h" | |
101 | |
102 /** @addtogroup STM32F1xx_HAL_Driver | |
103 * @{ | |
104 */ | |
105 | |
106 /** @defgroup TIMEx TIMEx | |
107 * @brief TIM Extended HAL module driver | |
108 * @{ | |
109 */ | |
110 | |
111 #ifdef HAL_TIM_MODULE_ENABLED | |
112 | |
113 /* Private typedef -----------------------------------------------------------*/ | |
114 /* Private define ------------------------------------------------------------*/ | |
115 /* Private macro -------------------------------------------------------------*/ | |
116 /* Private variables ---------------------------------------------------------*/ | |
117 /* Private function prototypes -----------------------------------------------*/ | |
118 | |
119 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
120 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
121 defined (STM32F105xC) || defined (STM32F107xC) | |
122 /** @defgroup TIMEx_Private_Functions TIMEx Private Functions | |
123 * @{ | |
124 */ | |
125 static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelNState); | |
126 /** | |
127 * @} | |
128 */ | |
129 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
130 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
131 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
132 | |
133 /* Exported functions ---------------------------------------------------------*/ | |
134 | |
135 /** @defgroup TIMEx_Exported_Functions TIMEx Exported Functions | |
136 * @{ | |
137 */ | |
138 | |
139 | |
140 /** @defgroup TIMEx_Exported_Functions_Group1 Timer Hall Sensor functions | |
141 * @brief Timer Hall Sensor functions | |
142 * | |
143 @verbatim | |
144 ============================================================================== | |
145 ##### Timer Hall Sensor functions ##### | |
146 ============================================================================== | |
147 [..] | |
148 This section provides functions allowing to: | |
149 (+) Initialize and configure TIM HAL Sensor. | |
150 (+) De-initialize TIM HAL Sensor. | |
151 (+) Start the Hall Sensor Interface. | |
152 (+) Stop the Hall Sensor Interface. | |
153 (+) Start the Hall Sensor Interface and enable interrupts. | |
154 (+) Stop the Hall Sensor Interface and disable interrupts. | |
155 (+) Start the Hall Sensor Interface and enable DMA transfers. | |
156 (+) Stop the Hall Sensor Interface and disable DMA transfers. | |
157 | |
158 @endverbatim | |
159 * @{ | |
160 */ | |
161 /** | |
162 * @brief Initializes the TIM Hall Sensor Interface and create the associated handle. | |
163 * @param htim : TIM Encoder Interface handle | |
164 * @param sConfig : TIM Hall Sensor configuration structure | |
165 * @retval HAL status | |
166 */ | |
167 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef* sConfig) | |
168 { | |
169 TIM_OC_InitTypeDef OC_Config; | |
170 | |
171 /* Check the TIM handle allocation */ | |
172 if(htim == NULL) | |
173 { | |
174 return HAL_ERROR; | |
175 } | |
176 | |
177 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
178 assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); | |
179 assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); | |
180 assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); | |
181 assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); | |
182 assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); | |
183 | |
184 if(htim->State == HAL_TIM_STATE_RESET) | |
185 { | |
186 /* Allocate lock resource and initialize it */ | |
187 htim->Lock = HAL_UNLOCKED; | |
188 | |
189 /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ | |
190 HAL_TIMEx_HallSensor_MspInit(htim); | |
191 } | |
192 | |
193 /* Set the TIM state */ | |
194 htim->State= HAL_TIM_STATE_BUSY; | |
195 | |
196 /* Configure the Time base in the Encoder Mode */ | |
197 TIM_Base_SetConfig(htim->Instance, &htim->Init); | |
198 | |
199 /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the Hall sensor */ | |
200 TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter); | |
201 | |
202 /* Reset the IC1PSC Bits */ | |
203 htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; | |
204 /* Set the IC1PSC value */ | |
205 htim->Instance->CCMR1 |= sConfig->IC1Prescaler; | |
206 | |
207 /* Enable the Hall sensor interface (XOR function of the three inputs) */ | |
208 htim->Instance->CR2 |= TIM_CR2_TI1S; | |
209 | |
210 /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */ | |
211 htim->Instance->SMCR &= ~TIM_SMCR_TS; | |
212 htim->Instance->SMCR |= TIM_TS_TI1F_ED; | |
213 | |
214 /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */ | |
215 htim->Instance->SMCR &= ~TIM_SMCR_SMS; | |
216 htim->Instance->SMCR |= TIM_SLAVEMODE_RESET; | |
217 | |
218 /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/ | |
219 OC_Config.OCFastMode = TIM_OCFAST_DISABLE; | |
220 OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET; | |
221 OC_Config.OCMode = TIM_OCMODE_PWM2; | |
222 OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET; | |
223 OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH; | |
224 OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH; | |
225 OC_Config.Pulse = sConfig->Commutation_Delay; | |
226 | |
227 TIM_OC2_SetConfig(htim->Instance, &OC_Config); | |
228 | |
229 /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2 | |
230 register to 101 */ | |
231 htim->Instance->CR2 &= ~TIM_CR2_MMS; | |
232 htim->Instance->CR2 |= TIM_TRGO_OC2REF; | |
233 | |
234 /* Initialize the TIM state*/ | |
235 htim->State= HAL_TIM_STATE_READY; | |
236 | |
237 return HAL_OK; | |
238 } | |
239 | |
240 /** | |
241 * @brief DeInitializes the TIM Hall Sensor interface | |
242 * @param htim : TIM Hall Sensor handle | |
243 * @retval HAL status | |
244 */ | |
245 HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) | |
246 { | |
247 /* Check the parameters */ | |
248 assert_param(IS_TIM_INSTANCE(htim->Instance)); | |
249 | |
250 htim->State = HAL_TIM_STATE_BUSY; | |
251 | |
252 /* Disable the TIM Peripheral Clock */ | |
253 __HAL_TIM_DISABLE(htim); | |
254 | |
255 /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ | |
256 HAL_TIMEx_HallSensor_MspDeInit(htim); | |
257 | |
258 /* Change TIM state */ | |
259 htim->State = HAL_TIM_STATE_RESET; | |
260 | |
261 /* Release Lock */ | |
262 __HAL_UNLOCK(htim); | |
263 | |
264 return HAL_OK; | |
265 } | |
266 | |
267 /** | |
268 * @brief Initializes the TIM Hall Sensor MSP. | |
269 * @param htim : TIM handle | |
270 * @retval None | |
271 */ | |
272 __weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) | |
273 { | |
274 /* Prevent unused argument(s) compilation warning */ | |
275 UNUSED(htim); | |
276 /* NOTE : This function Should not be modified, when the callback is needed, | |
277 the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file | |
278 */ | |
279 } | |
280 | |
281 /** | |
282 * @brief DeInitializes TIM Hall Sensor MSP. | |
283 * @param htim : TIM handle | |
284 * @retval None | |
285 */ | |
286 __weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) | |
287 { | |
288 /* Prevent unused argument(s) compilation warning */ | |
289 UNUSED(htim); | |
290 /* NOTE : This function Should not be modified, when the callback is needed, | |
291 the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file | |
292 */ | |
293 } | |
294 | |
295 /** | |
296 * @brief Starts the TIM Hall Sensor Interface. | |
297 * @param htim : TIM Hall Sensor handle | |
298 * @retval HAL status | |
299 */ | |
300 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) | |
301 { | |
302 /* Check the parameters */ | |
303 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
304 | |
305 /* Enable the Input Capture channel 1 | |
306 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
307 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); | |
308 | |
309 /* Enable the Peripheral */ | |
310 __HAL_TIM_ENABLE(htim); | |
311 | |
312 /* Return function status */ | |
313 return HAL_OK; | |
314 } | |
315 | |
316 /** | |
317 * @brief Stops the TIM Hall sensor Interface. | |
318 * @param htim : TIM Hall Sensor handle | |
319 * @retval HAL status | |
320 */ | |
321 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) | |
322 { | |
323 /* Check the parameters */ | |
324 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
325 | |
326 /* Disable the Input Capture channel 1 | |
327 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
328 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); | |
329 | |
330 /* Disable the Peripheral */ | |
331 __HAL_TIM_DISABLE(htim); | |
332 | |
333 /* Return function status */ | |
334 return HAL_OK; | |
335 } | |
336 | |
337 /** | |
338 * @brief Starts the TIM Hall Sensor Interface in interrupt mode. | |
339 * @param htim : TIM Hall Sensor handle | |
340 * @retval HAL status | |
341 */ | |
342 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) | |
343 { | |
344 /* Check the parameters */ | |
345 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
346 | |
347 /* Enable the capture compare Interrupts 1 event */ | |
348 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); | |
349 | |
350 /* Enable the Input Capture channel 1 | |
351 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
352 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); | |
353 | |
354 /* Enable the Peripheral */ | |
355 __HAL_TIM_ENABLE(htim); | |
356 | |
357 /* Return function status */ | |
358 return HAL_OK; | |
359 } | |
360 | |
361 /** | |
362 * @brief Stops the TIM Hall Sensor Interface in interrupt mode. | |
363 * @param htim : TIM handle | |
364 * @retval HAL status | |
365 */ | |
366 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) | |
367 { | |
368 /* Check the parameters */ | |
369 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
370 | |
371 /* Disable the Input Capture channel 1 | |
372 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
373 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); | |
374 | |
375 /* Disable the capture compare Interrupts event */ | |
376 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); | |
377 | |
378 /* Disable the Peripheral */ | |
379 __HAL_TIM_DISABLE(htim); | |
380 | |
381 /* Return function status */ | |
382 return HAL_OK; | |
383 } | |
384 | |
385 /** | |
386 * @brief Starts the TIM Hall Sensor Interface in DMA mode. | |
387 * @param htim : TIM Hall Sensor handle | |
388 * @param pData : The destination Buffer address. | |
389 * @param Length : The length of data to be transferred from TIM peripheral to memory. | |
390 * @retval HAL status | |
391 */ | |
392 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) | |
393 { | |
394 /* Check the parameters */ | |
395 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
396 | |
397 if((htim->State == HAL_TIM_STATE_BUSY)) | |
398 { | |
399 return HAL_BUSY; | |
400 } | |
401 else if((htim->State == HAL_TIM_STATE_READY)) | |
402 { | |
403 if(((uint32_t)pData == 0 ) && (Length > 0)) | |
404 { | |
405 return HAL_ERROR; | |
406 } | |
407 else | |
408 { | |
409 htim->State = HAL_TIM_STATE_BUSY; | |
410 } | |
411 } | |
412 /* Enable the Input Capture channel 1 | |
413 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
414 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); | |
415 | |
416 /* Set the DMA Input Capture 1 Callback */ | |
417 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; | |
418 /* Set the DMA error callback */ | |
419 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; | |
420 | |
421 /* Enable the DMA channel for Capture 1*/ | |
422 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length); | |
423 | |
424 /* Enable the capture compare 1 Interrupt */ | |
425 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); | |
426 | |
427 /* Enable the Peripheral */ | |
428 __HAL_TIM_ENABLE(htim); | |
429 | |
430 /* Return function status */ | |
431 return HAL_OK; | |
432 } | |
433 | |
434 /** | |
435 * @brief Stops the TIM Hall Sensor Interface in DMA mode. | |
436 * @param htim : TIM handle | |
437 * @retval HAL status | |
438 */ | |
439 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) | |
440 { | |
441 /* Check the parameters */ | |
442 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
443 | |
444 /* Disable the Input Capture channel 1 | |
445 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
446 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); | |
447 | |
448 | |
449 /* Disable the capture compare Interrupts 1 event */ | |
450 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); | |
451 | |
452 /* Disable the Peripheral */ | |
453 __HAL_TIM_DISABLE(htim); | |
454 | |
455 /* Return function status */ | |
456 return HAL_OK; | |
457 } | |
458 | |
459 /** | |
460 * @} | |
461 */ | |
462 | |
463 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
464 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
465 defined (STM32F105xC) || defined (STM32F107xC) | |
466 | |
467 /** @defgroup TIMEx_Exported_Functions_Group2 Timer Complementary Output Compare functions | |
468 * @brief Timer Complementary Output Compare functions | |
469 * | |
470 @verbatim | |
471 ============================================================================== | |
472 ##### Timer Complementary Output Compare functions ##### | |
473 ============================================================================== | |
474 [..] | |
475 This section provides functions allowing to: | |
476 (+) Start the Complementary Output Compare/PWM. | |
477 (+) Stop the Complementary Output Compare/PWM. | |
478 (+) Start the Complementary Output Compare/PWM and enable interrupts. | |
479 (+) Stop the Complementary Output Compare/PWM and disable interrupts. | |
480 (+) Start the Complementary Output Compare/PWM and enable DMA transfers. | |
481 (+) Stop the Complementary Output Compare/PWM and disable DMA transfers. | |
482 | |
483 @endverbatim | |
484 * @{ | |
485 */ | |
486 | |
487 /** | |
488 * @brief Starts the TIM Output Compare signal generation on the complementary | |
489 * output. | |
490 * @param htim : TIM Output Compare handle | |
491 * @param Channel : TIM Channel to be enabled | |
492 * This parameter can be one of the following values: | |
493 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
494 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
495 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
496 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
497 * @retval HAL status | |
498 */ | |
499 HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) | |
500 { | |
501 /* Check the parameters */ | |
502 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
503 | |
504 /* Enable the Capture compare channel N */ | |
505 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
506 | |
507 /* Enable the Main Ouput */ | |
508 __HAL_TIM_MOE_ENABLE(htim); | |
509 | |
510 /* Enable the Peripheral */ | |
511 __HAL_TIM_ENABLE(htim); | |
512 | |
513 /* Return function status */ | |
514 return HAL_OK; | |
515 } | |
516 | |
517 /** | |
518 * @brief Stops the TIM Output Compare signal generation on the complementary | |
519 * output. | |
520 * @param htim : TIM handle | |
521 * @param Channel : TIM Channel to be disabled | |
522 * This parameter can be one of the following values: | |
523 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
524 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
525 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
526 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
527 * @retval HAL status | |
528 */ | |
529 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) | |
530 { | |
531 /* Check the parameters */ | |
532 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
533 | |
534 /* Disable the Capture compare channel N */ | |
535 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
536 | |
537 /* Disable the Main Ouput */ | |
538 __HAL_TIM_MOE_DISABLE(htim); | |
539 | |
540 /* Disable the Peripheral */ | |
541 __HAL_TIM_DISABLE(htim); | |
542 | |
543 /* Return function status */ | |
544 return HAL_OK; | |
545 } | |
546 | |
547 /** | |
548 * @brief Starts the TIM Output Compare signal generation in interrupt mode | |
549 * on the complementary output. | |
550 * @param htim : TIM OC handle | |
551 * @param Channel : TIM Channel to be enabled | |
552 * This parameter can be one of the following values: | |
553 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
554 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
555 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
556 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
557 * @retval HAL status | |
558 */ | |
559 HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) | |
560 { | |
561 /* Check the parameters */ | |
562 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
563 | |
564 switch (Channel) | |
565 { | |
566 case TIM_CHANNEL_1: | |
567 { | |
568 /* Enable the TIM Output Compare interrupt */ | |
569 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); | |
570 } | |
571 break; | |
572 | |
573 case TIM_CHANNEL_2: | |
574 { | |
575 /* Enable the TIM Output Compare interrupt */ | |
576 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); | |
577 } | |
578 break; | |
579 | |
580 case TIM_CHANNEL_3: | |
581 { | |
582 /* Enable the TIM Output Compare interrupt */ | |
583 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); | |
584 } | |
585 break; | |
586 | |
587 case TIM_CHANNEL_4: | |
588 { | |
589 /* Enable the TIM Output Compare interrupt */ | |
590 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); | |
591 } | |
592 break; | |
593 | |
594 default: | |
595 break; | |
596 } | |
597 | |
598 /* Enable the TIM Break interrupt */ | |
599 __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); | |
600 | |
601 /* Enable the Capture compare channel N */ | |
602 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
603 | |
604 /* Enable the Main Ouput */ | |
605 __HAL_TIM_MOE_ENABLE(htim); | |
606 | |
607 /* Enable the Peripheral */ | |
608 __HAL_TIM_ENABLE(htim); | |
609 | |
610 /* Return function status */ | |
611 return HAL_OK; | |
612 } | |
613 | |
614 /** | |
615 * @brief Stops the TIM Output Compare signal generation in interrupt mode | |
616 * on the complementary output. | |
617 * @param htim : TIM Output Compare handle | |
618 * @param Channel : TIM Channel to be disabled | |
619 * This parameter can be one of the following values: | |
620 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
621 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
622 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
623 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
624 * @retval HAL status | |
625 */ | |
626 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) | |
627 { | |
628 uint32_t tmpccer = 0; | |
629 | |
630 /* Check the parameters */ | |
631 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
632 | |
633 switch (Channel) | |
634 { | |
635 case TIM_CHANNEL_1: | |
636 { | |
637 /* Disable the TIM Output Compare interrupt */ | |
638 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); | |
639 } | |
640 break; | |
641 | |
642 case TIM_CHANNEL_2: | |
643 { | |
644 /* Disable the TIM Output Compare interrupt */ | |
645 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); | |
646 } | |
647 break; | |
648 | |
649 case TIM_CHANNEL_3: | |
650 { | |
651 /* Disable the TIM Output Compare interrupt */ | |
652 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); | |
653 } | |
654 break; | |
655 | |
656 case TIM_CHANNEL_4: | |
657 { | |
658 /* Disable the TIM Output Compare interrupt */ | |
659 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); | |
660 } | |
661 break; | |
662 | |
663 default: | |
664 break; | |
665 } | |
666 | |
667 /* Disable the Capture compare channel N */ | |
668 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
669 | |
670 /* Disable the TIM Break interrupt (only if no more channel is active) */ | |
671 tmpccer = htim->Instance->CCER; | |
672 if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET) | |
673 { | |
674 __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); | |
675 } | |
676 | |
677 /* Disable the Main Ouput */ | |
678 __HAL_TIM_MOE_DISABLE(htim); | |
679 | |
680 /* Disable the Peripheral */ | |
681 __HAL_TIM_DISABLE(htim); | |
682 | |
683 /* Return function status */ | |
684 return HAL_OK; | |
685 } | |
686 | |
687 /** | |
688 * @brief Starts the TIM Output Compare signal generation in DMA mode | |
689 * on the complementary output. | |
690 * @param htim : TIM Output Compare handle | |
691 * @param Channel : TIM Channel to be enabled | |
692 * This parameter can be one of the following values: | |
693 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
694 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
695 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
696 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
697 * @param pData : The source Buffer address. | |
698 * @param Length : The length of data to be transferred from memory to TIM peripheral | |
699 * @retval HAL status | |
700 */ | |
701 HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) | |
702 { | |
703 /* Check the parameters */ | |
704 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
705 | |
706 if((htim->State == HAL_TIM_STATE_BUSY)) | |
707 { | |
708 return HAL_BUSY; | |
709 } | |
710 else if((htim->State == HAL_TIM_STATE_READY)) | |
711 { | |
712 if(((uint32_t)pData == 0 ) && (Length > 0)) | |
713 { | |
714 return HAL_ERROR; | |
715 } | |
716 else | |
717 { | |
718 htim->State = HAL_TIM_STATE_BUSY; | |
719 } | |
720 } | |
721 switch (Channel) | |
722 { | |
723 case TIM_CHANNEL_1: | |
724 { | |
725 /* Set the DMA Period elapsed callback */ | |
726 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
727 | |
728 /* Set the DMA error callback */ | |
729 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; | |
730 | |
731 /* Enable the DMA channel */ | |
732 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length); | |
733 | |
734 /* Enable the TIM Output Compare DMA request */ | |
735 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); | |
736 } | |
737 break; | |
738 | |
739 case TIM_CHANNEL_2: | |
740 { | |
741 /* Set the DMA Period elapsed callback */ | |
742 htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
743 | |
744 /* Set the DMA error callback */ | |
745 htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; | |
746 | |
747 /* Enable the DMA channel */ | |
748 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length); | |
749 | |
750 /* Enable the TIM Output Compare DMA request */ | |
751 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); | |
752 } | |
753 break; | |
754 | |
755 case TIM_CHANNEL_3: | |
756 { | |
757 /* Set the DMA Period elapsed callback */ | |
758 htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
759 | |
760 /* Set the DMA error callback */ | |
761 htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; | |
762 | |
763 /* Enable the DMA channel */ | |
764 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length); | |
765 | |
766 /* Enable the TIM Output Compare DMA request */ | |
767 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); | |
768 } | |
769 break; | |
770 | |
771 case TIM_CHANNEL_4: | |
772 { | |
773 /* Set the DMA Period elapsed callback */ | |
774 htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
775 | |
776 /* Set the DMA error callback */ | |
777 htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; | |
778 | |
779 /* Enable the DMA channel */ | |
780 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length); | |
781 | |
782 /* Enable the TIM Output Compare DMA request */ | |
783 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); | |
784 } | |
785 break; | |
786 | |
787 default: | |
788 break; | |
789 } | |
790 | |
791 /* Enable the Capture compare channel N */ | |
792 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
793 | |
794 /* Enable the Main Ouput */ | |
795 __HAL_TIM_MOE_ENABLE(htim); | |
796 | |
797 /* Enable the Peripheral */ | |
798 __HAL_TIM_ENABLE(htim); | |
799 | |
800 /* Return function status */ | |
801 return HAL_OK; | |
802 } | |
803 | |
804 /** | |
805 * @brief Stops the TIM Output Compare signal generation in DMA mode | |
806 * on the complementary output. | |
807 * @param htim : TIM Output Compare handle | |
808 * @param Channel : TIM Channel to be disabled | |
809 * This parameter can be one of the following values: | |
810 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
811 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
812 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
813 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
814 * @retval HAL status | |
815 */ | |
816 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) | |
817 { | |
818 /* Check the parameters */ | |
819 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
820 | |
821 switch (Channel) | |
822 { | |
823 case TIM_CHANNEL_1: | |
824 { | |
825 /* Disable the TIM Output Compare DMA request */ | |
826 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); | |
827 } | |
828 break; | |
829 | |
830 case TIM_CHANNEL_2: | |
831 { | |
832 /* Disable the TIM Output Compare DMA request */ | |
833 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); | |
834 } | |
835 break; | |
836 | |
837 case TIM_CHANNEL_3: | |
838 { | |
839 /* Disable the TIM Output Compare DMA request */ | |
840 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); | |
841 } | |
842 break; | |
843 | |
844 case TIM_CHANNEL_4: | |
845 { | |
846 /* Disable the TIM Output Compare interrupt */ | |
847 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); | |
848 } | |
849 break; | |
850 | |
851 default: | |
852 break; | |
853 } | |
854 | |
855 /* Disable the Capture compare channel N */ | |
856 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
857 | |
858 /* Disable the Main Ouput */ | |
859 __HAL_TIM_MOE_DISABLE(htim); | |
860 | |
861 /* Disable the Peripheral */ | |
862 __HAL_TIM_DISABLE(htim); | |
863 | |
864 /* Change the htim state */ | |
865 htim->State = HAL_TIM_STATE_READY; | |
866 | |
867 /* Return function status */ | |
868 return HAL_OK; | |
869 } | |
870 | |
871 /** | |
872 * @} | |
873 */ | |
874 | |
875 /** @defgroup TIMEx_Exported_Functions_Group3 Timer Complementary PWM functions | |
876 * @brief Timer Complementary PWM functions | |
877 * | |
878 @verbatim | |
879 ============================================================================== | |
880 ##### Timer Complementary PWM functions ##### | |
881 ============================================================================== | |
882 [..] | |
883 This section provides functions allowing to: | |
884 (+) Start the Complementary PWM. | |
885 (+) Stop the Complementary PWM. | |
886 (+) Start the Complementary PWM and enable interrupts. | |
887 (+) Stop the Complementary PWM and disable interrupts. | |
888 (+) Start the Complementary PWM and enable DMA transfers. | |
889 (+) Stop the Complementary PWM and disable DMA transfers. | |
890 (+) Start the Complementary Input Capture measurement. | |
891 (+) Stop the Complementary Input Capture. | |
892 (+) Start the Complementary Input Capture and enable interrupts. | |
893 (+) Stop the Complementary Input Capture and disable interrupts. | |
894 (+) Start the Complementary Input Capture and enable DMA transfers. | |
895 (+) Stop the Complementary Input Capture and disable DMA transfers. | |
896 (+) Start the Complementary One Pulse generation. | |
897 (+) Stop the Complementary One Pulse. | |
898 (+) Start the Complementary One Pulse and enable interrupts. | |
899 (+) Stop the Complementary One Pulse and disable interrupts. | |
900 | |
901 @endverbatim | |
902 * @{ | |
903 */ | |
904 | |
905 /** | |
906 * @brief Starts the PWM signal generation on the complementary output. | |
907 * @param htim : TIM handle | |
908 * @param Channel : TIM Channel to be enabled | |
909 * This parameter can be one of the following values: | |
910 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
911 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
912 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
913 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
914 * @retval HAL status | |
915 */ | |
916 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) | |
917 { | |
918 /* Check the parameters */ | |
919 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
920 | |
921 /* Enable the complementary PWM output */ | |
922 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
923 | |
924 /* Enable the Main Ouput */ | |
925 __HAL_TIM_MOE_ENABLE(htim); | |
926 | |
927 /* Enable the Peripheral */ | |
928 __HAL_TIM_ENABLE(htim); | |
929 | |
930 /* Return function status */ | |
931 return HAL_OK; | |
932 } | |
933 | |
934 /** | |
935 * @brief Stops the PWM signal generation on the complementary output. | |
936 * @param htim : TIM handle | |
937 * @param Channel : TIM Channel to be disabled | |
938 * This parameter can be one of the following values: | |
939 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
940 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
941 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
942 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
943 * @retval HAL status | |
944 */ | |
945 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) | |
946 { | |
947 /* Check the parameters */ | |
948 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
949 | |
950 /* Disable the complementary PWM output */ | |
951 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
952 | |
953 /* Disable the Main Ouput */ | |
954 __HAL_TIM_MOE_DISABLE(htim); | |
955 | |
956 /* Disable the Peripheral */ | |
957 __HAL_TIM_DISABLE(htim); | |
958 | |
959 /* Return function status */ | |
960 return HAL_OK; | |
961 } | |
962 | |
963 /** | |
964 * @brief Starts the PWM signal generation in interrupt mode on the | |
965 * complementary output. | |
966 * @param htim : TIM handle | |
967 * @param Channel : TIM Channel to be disabled | |
968 * This parameter can be one of the following values: | |
969 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
970 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
971 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
972 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
973 * @retval HAL status | |
974 */ | |
975 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) | |
976 { | |
977 /* Check the parameters */ | |
978 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
979 | |
980 switch (Channel) | |
981 { | |
982 case TIM_CHANNEL_1: | |
983 { | |
984 /* Enable the TIM Capture/Compare 1 interrupt */ | |
985 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); | |
986 } | |
987 break; | |
988 | |
989 case TIM_CHANNEL_2: | |
990 { | |
991 /* Enable the TIM Capture/Compare 2 interrupt */ | |
992 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); | |
993 } | |
994 break; | |
995 | |
996 case TIM_CHANNEL_3: | |
997 { | |
998 /* Enable the TIM Capture/Compare 3 interrupt */ | |
999 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); | |
1000 } | |
1001 break; | |
1002 | |
1003 case TIM_CHANNEL_4: | |
1004 { | |
1005 /* Enable the TIM Capture/Compare 4 interrupt */ | |
1006 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); | |
1007 } | |
1008 break; | |
1009 | |
1010 default: | |
1011 break; | |
1012 } | |
1013 | |
1014 /* Enable the TIM Break interrupt */ | |
1015 __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); | |
1016 | |
1017 /* Enable the complementary PWM output */ | |
1018 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
1019 | |
1020 /* Enable the Main Ouput */ | |
1021 __HAL_TIM_MOE_ENABLE(htim); | |
1022 | |
1023 /* Enable the Peripheral */ | |
1024 __HAL_TIM_ENABLE(htim); | |
1025 | |
1026 /* Return function status */ | |
1027 return HAL_OK; | |
1028 } | |
1029 | |
1030 /** | |
1031 * @brief Stops the PWM signal generation in interrupt mode on the | |
1032 * complementary output. | |
1033 * @param htim : TIM handle | |
1034 * @param Channel : TIM Channel to be disabled | |
1035 * This parameter can be one of the following values: | |
1036 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
1037 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
1038 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
1039 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
1040 * @retval HAL status | |
1041 */ | |
1042 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel) | |
1043 { | |
1044 uint32_t tmpccer = 0; | |
1045 | |
1046 /* Check the parameters */ | |
1047 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
1048 | |
1049 switch (Channel) | |
1050 { | |
1051 case TIM_CHANNEL_1: | |
1052 { | |
1053 /* Disable the TIM Capture/Compare 1 interrupt */ | |
1054 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); | |
1055 } | |
1056 break; | |
1057 | |
1058 case TIM_CHANNEL_2: | |
1059 { | |
1060 /* Disable the TIM Capture/Compare 2 interrupt */ | |
1061 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); | |
1062 } | |
1063 break; | |
1064 | |
1065 case TIM_CHANNEL_3: | |
1066 { | |
1067 /* Disable the TIM Capture/Compare 3 interrupt */ | |
1068 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); | |
1069 } | |
1070 break; | |
1071 | |
1072 case TIM_CHANNEL_4: | |
1073 { | |
1074 /* Disable the TIM Capture/Compare 3 interrupt */ | |
1075 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); | |
1076 } | |
1077 break; | |
1078 | |
1079 default: | |
1080 break; | |
1081 } | |
1082 | |
1083 /* Disable the complementary PWM output */ | |
1084 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
1085 | |
1086 /* Disable the TIM Break interrupt (only if no more channel is active) */ | |
1087 tmpccer = htim->Instance->CCER; | |
1088 if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET) | |
1089 { | |
1090 __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); | |
1091 } | |
1092 | |
1093 /* Disable the Main Ouput */ | |
1094 __HAL_TIM_MOE_DISABLE(htim); | |
1095 | |
1096 /* Disable the Peripheral */ | |
1097 __HAL_TIM_DISABLE(htim); | |
1098 | |
1099 /* Return function status */ | |
1100 return HAL_OK; | |
1101 } | |
1102 | |
1103 /** | |
1104 * @brief Starts the TIM PWM signal generation in DMA mode on the | |
1105 * complementary output | |
1106 * @param htim : TIM handle | |
1107 * @param Channel : TIM Channel to be enabled | |
1108 * This parameter can be one of the following values: | |
1109 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
1110 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
1111 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
1112 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
1113 * @param pData : The source Buffer address. | |
1114 * @param Length : The length of data to be transferred from memory to TIM peripheral | |
1115 * @retval HAL status | |
1116 */ | |
1117 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) | |
1118 { | |
1119 /* Check the parameters */ | |
1120 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
1121 | |
1122 if((htim->State == HAL_TIM_STATE_BUSY)) | |
1123 { | |
1124 return HAL_BUSY; | |
1125 } | |
1126 else if((htim->State == HAL_TIM_STATE_READY)) | |
1127 { | |
1128 if(((uint32_t)pData == 0 ) && (Length > 0)) | |
1129 { | |
1130 return HAL_ERROR; | |
1131 } | |
1132 else | |
1133 { | |
1134 htim->State = HAL_TIM_STATE_BUSY; | |
1135 } | |
1136 } | |
1137 switch (Channel) | |
1138 { | |
1139 case TIM_CHANNEL_1: | |
1140 { | |
1141 /* Set the DMA Period elapsed callback */ | |
1142 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
1143 | |
1144 /* Set the DMA error callback */ | |
1145 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; | |
1146 | |
1147 /* Enable the DMA channel */ | |
1148 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length); | |
1149 | |
1150 /* Enable the TIM Capture/Compare 1 DMA request */ | |
1151 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); | |
1152 } | |
1153 break; | |
1154 | |
1155 case TIM_CHANNEL_2: | |
1156 { | |
1157 /* Set the DMA Period elapsed callback */ | |
1158 htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
1159 | |
1160 /* Set the DMA error callback */ | |
1161 htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; | |
1162 | |
1163 /* Enable the DMA channel */ | |
1164 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length); | |
1165 | |
1166 /* Enable the TIM Capture/Compare 2 DMA request */ | |
1167 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); | |
1168 } | |
1169 break; | |
1170 | |
1171 case TIM_CHANNEL_3: | |
1172 { | |
1173 /* Set the DMA Period elapsed callback */ | |
1174 htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
1175 | |
1176 /* Set the DMA error callback */ | |
1177 htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; | |
1178 | |
1179 /* Enable the DMA channel */ | |
1180 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length); | |
1181 | |
1182 /* Enable the TIM Capture/Compare 3 DMA request */ | |
1183 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); | |
1184 } | |
1185 break; | |
1186 | |
1187 case TIM_CHANNEL_4: | |
1188 { | |
1189 /* Set the DMA Period elapsed callback */ | |
1190 htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
1191 | |
1192 /* Set the DMA error callback */ | |
1193 htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; | |
1194 | |
1195 /* Enable the DMA channel */ | |
1196 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length); | |
1197 | |
1198 /* Enable the TIM Capture/Compare 4 DMA request */ | |
1199 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); | |
1200 } | |
1201 break; | |
1202 | |
1203 default: | |
1204 break; | |
1205 } | |
1206 | |
1207 /* Enable the complementary PWM output */ | |
1208 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
1209 | |
1210 /* Enable the Main Ouput */ | |
1211 __HAL_TIM_MOE_ENABLE(htim); | |
1212 | |
1213 /* Enable the Peripheral */ | |
1214 __HAL_TIM_ENABLE(htim); | |
1215 | |
1216 /* Return function status */ | |
1217 return HAL_OK; | |
1218 } | |
1219 | |
1220 /** | |
1221 * @brief Stops the TIM PWM signal generation in DMA mode on the complementary | |
1222 * output | |
1223 * @param htim : TIM handle | |
1224 * @param Channel : TIM Channel to be disabled | |
1225 * This parameter can be one of the following values: | |
1226 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
1227 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
1228 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
1229 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
1230 * @retval HAL status | |
1231 */ | |
1232 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) | |
1233 { | |
1234 /* Check the parameters */ | |
1235 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
1236 | |
1237 switch (Channel) | |
1238 { | |
1239 case TIM_CHANNEL_1: | |
1240 { | |
1241 /* Disable the TIM Capture/Compare 1 DMA request */ | |
1242 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); | |
1243 } | |
1244 break; | |
1245 | |
1246 case TIM_CHANNEL_2: | |
1247 { | |
1248 /* Disable the TIM Capture/Compare 2 DMA request */ | |
1249 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); | |
1250 } | |
1251 break; | |
1252 | |
1253 case TIM_CHANNEL_3: | |
1254 { | |
1255 /* Disable the TIM Capture/Compare 3 DMA request */ | |
1256 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); | |
1257 } | |
1258 break; | |
1259 | |
1260 case TIM_CHANNEL_4: | |
1261 { | |
1262 /* Disable the TIM Capture/Compare 4 DMA request */ | |
1263 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); | |
1264 } | |
1265 break; | |
1266 | |
1267 default: | |
1268 break; | |
1269 } | |
1270 | |
1271 /* Disable the complementary PWM output */ | |
1272 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
1273 | |
1274 /* Disable the Main Ouput */ | |
1275 __HAL_TIM_MOE_DISABLE(htim); | |
1276 | |
1277 /* Disable the Peripheral */ | |
1278 __HAL_TIM_DISABLE(htim); | |
1279 | |
1280 /* Change the htim state */ | |
1281 htim->State = HAL_TIM_STATE_READY; | |
1282 | |
1283 /* Return function status */ | |
1284 return HAL_OK; | |
1285 } | |
1286 | |
1287 /** | |
1288 * @} | |
1289 */ | |
1290 | |
1291 /** @defgroup TIMEx_Exported_Functions_Group4 Timer Complementary One Pulse functions | |
1292 * @brief Timer Complementary One Pulse functions | |
1293 * | |
1294 @verbatim | |
1295 ============================================================================== | |
1296 ##### Timer Complementary One Pulse functions ##### | |
1297 ============================================================================== | |
1298 [..] | |
1299 This section provides functions allowing to: | |
1300 (+) Start the Complementary One Pulse generation. | |
1301 (+) Stop the Complementary One Pulse. | |
1302 (+) Start the Complementary One Pulse and enable interrupts. | |
1303 (+) Stop the Complementary One Pulse and disable interrupts. | |
1304 | |
1305 @endverbatim | |
1306 * @{ | |
1307 */ | |
1308 | |
1309 /** | |
1310 * @brief Starts the TIM One Pulse signal generation on the complemetary | |
1311 * output. | |
1312 * @param htim : TIM One Pulse handle | |
1313 * @param OutputChannel : TIM Channel to be enabled | |
1314 * This parameter can be one of the following values: | |
1315 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
1316 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
1317 * @retval HAL status | |
1318 */ | |
1319 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) | |
1320 { | |
1321 /* Check the parameters */ | |
1322 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); | |
1323 | |
1324 /* Enable the complementary One Pulse output */ | |
1325 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); | |
1326 | |
1327 /* Enable the Main Ouput */ | |
1328 __HAL_TIM_MOE_ENABLE(htim); | |
1329 | |
1330 /* Return function status */ | |
1331 return HAL_OK; | |
1332 } | |
1333 | |
1334 /** | |
1335 * @brief Stops the TIM One Pulse signal generation on the complementary | |
1336 * output. | |
1337 * @param htim : TIM One Pulse handle | |
1338 * @param OutputChannel : TIM Channel to be disabled | |
1339 * This parameter can be one of the following values: | |
1340 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
1341 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
1342 * @retval HAL status | |
1343 */ | |
1344 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) | |
1345 { | |
1346 | |
1347 /* Check the parameters */ | |
1348 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); | |
1349 | |
1350 /* Disable the complementary One Pulse output */ | |
1351 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); | |
1352 | |
1353 /* Disable the Main Ouput */ | |
1354 __HAL_TIM_MOE_DISABLE(htim); | |
1355 | |
1356 /* Disable the Peripheral */ | |
1357 __HAL_TIM_DISABLE(htim); | |
1358 | |
1359 /* Return function status */ | |
1360 return HAL_OK; | |
1361 } | |
1362 | |
1363 /** | |
1364 * @brief Starts the TIM One Pulse signal generation in interrupt mode on the | |
1365 * complementary channel. | |
1366 * @param htim : TIM One Pulse handle | |
1367 * @param OutputChannel : TIM Channel to be enabled | |
1368 * This parameter can be one of the following values: | |
1369 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
1370 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
1371 * @retval HAL status | |
1372 */ | |
1373 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) | |
1374 { | |
1375 /* Check the parameters */ | |
1376 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); | |
1377 | |
1378 /* Enable the TIM Capture/Compare 1 interrupt */ | |
1379 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); | |
1380 | |
1381 /* Enable the TIM Capture/Compare 2 interrupt */ | |
1382 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); | |
1383 | |
1384 /* Enable the complementary One Pulse output */ | |
1385 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); | |
1386 | |
1387 /* Enable the Main Ouput */ | |
1388 __HAL_TIM_MOE_ENABLE(htim); | |
1389 | |
1390 /* Return function status */ | |
1391 return HAL_OK; | |
1392 } | |
1393 | |
1394 /** | |
1395 * @brief Stops the TIM One Pulse signal generation in interrupt mode on the | |
1396 * complementary channel. | |
1397 * @param htim : TIM One Pulse handle | |
1398 * @param OutputChannel : TIM Channel to be disabled | |
1399 * This parameter can be one of the following values: | |
1400 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
1401 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
1402 * @retval HAL status | |
1403 */ | |
1404 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) | |
1405 { | |
1406 /* Check the parameters */ | |
1407 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); | |
1408 | |
1409 /* Disable the TIM Capture/Compare 1 interrupt */ | |
1410 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); | |
1411 | |
1412 /* Disable the TIM Capture/Compare 2 interrupt */ | |
1413 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); | |
1414 | |
1415 /* Disable the complementary One Pulse output */ | |
1416 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); | |
1417 | |
1418 /* Disable the Main Ouput */ | |
1419 __HAL_TIM_MOE_DISABLE(htim); | |
1420 | |
1421 /* Disable the Peripheral */ | |
1422 __HAL_TIM_DISABLE(htim); | |
1423 | |
1424 /* Return function status */ | |
1425 return HAL_OK; | |
1426 } | |
1427 | |
1428 /** | |
1429 * @} | |
1430 */ | |
1431 | |
1432 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
1433 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
1434 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
1435 | |
1436 /** @defgroup TIMEx_Exported_Functions_Group5 Peripheral Control functions | |
1437 * @brief Peripheral Control functions | |
1438 * | |
1439 @verbatim | |
1440 ============================================================================== | |
1441 ##### Peripheral Control functions ##### | |
1442 ============================================================================== | |
1443 [..] | |
1444 This section provides functions allowing to: | |
1445 (+) Configure the commutation event in case of use of the Hall sensor interface. | |
1446 (+) Configure Complementary channels, break features and dead time. | |
1447 (+) Configure Master synchronization. | |
1448 | |
1449 @endverbatim | |
1450 * @{ | |
1451 */ | |
1452 | |
1453 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
1454 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
1455 defined (STM32F105xC) || defined (STM32F107xC) | |
1456 | |
1457 /** | |
1458 * @brief Configure the TIM commutation event sequence. | |
1459 * @note: this function is mandatory to use the commutation event in order to | |
1460 * update the configuration at each commutation detection on the TRGI input of the Timer, | |
1461 * the typical use of this feature is with the use of another Timer(interface Timer) | |
1462 * configured in Hall sensor interface, this interface Timer will generate the | |
1463 * commutation at its TRGO output (connected to Timer used in this function) each time | |
1464 * the TI1 of the Interface Timer detect a commutation at its input TI1. | |
1465 * @param htim : TIM handle | |
1466 * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor | |
1467 * This parameter can be one of the following values: | |
1468 * @arg TIM_TS_ITR0: Internal trigger 0 selected | |
1469 * @arg TIM_TS_ITR1: Internal trigger 1 selected | |
1470 * @arg TIM_TS_ITR2: Internal trigger 2 selected | |
1471 * @arg TIM_TS_ITR3: Internal trigger 3 selected | |
1472 * @arg TIM_TS_NONE: No trigger is needed | |
1473 * @param CommutationSource : the Commutation Event source | |
1474 * This parameter can be one of the following values: | |
1475 * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer | |
1476 * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit | |
1477 * @retval HAL status | |
1478 */ | |
1479 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) | |
1480 { | |
1481 /* Check the parameters */ | |
1482 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); | |
1483 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); | |
1484 | |
1485 __HAL_LOCK(htim); | |
1486 | |
1487 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || | |
1488 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) | |
1489 { | |
1490 /* Select the Input trigger */ | |
1491 htim->Instance->SMCR &= ~TIM_SMCR_TS; | |
1492 htim->Instance->SMCR |= InputTrigger; | |
1493 } | |
1494 | |
1495 /* Select the Capture Compare preload feature */ | |
1496 htim->Instance->CR2 |= TIM_CR2_CCPC; | |
1497 /* Select the Commutation event source */ | |
1498 htim->Instance->CR2 &= ~TIM_CR2_CCUS; | |
1499 htim->Instance->CR2 |= CommutationSource; | |
1500 | |
1501 __HAL_UNLOCK(htim); | |
1502 | |
1503 return HAL_OK; | |
1504 } | |
1505 | |
1506 /** | |
1507 * @brief Configure the TIM commutation event sequence with interrupt. | |
1508 * @note: this function is mandatory to use the commutation event in order to | |
1509 * update the configuration at each commutation detection on the TRGI input of the Timer, | |
1510 * the typical use of this feature is with the use of another Timer(interface Timer) | |
1511 * configured in Hall sensor interface, this interface Timer will generate the | |
1512 * commutation at its TRGO output (connected to Timer used in this function) each time | |
1513 * the TI1 of the Interface Timer detect a commutation at its input TI1. | |
1514 * @param htim : TIM handle | |
1515 * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor | |
1516 * This parameter can be one of the following values: | |
1517 * @arg TIM_TS_ITR0: Internal trigger 0 selected | |
1518 * @arg TIM_TS_ITR1: Internal trigger 1 selected | |
1519 * @arg TIM_TS_ITR2: Internal trigger 2 selected | |
1520 * @arg TIM_TS_ITR3: Internal trigger 3 selected | |
1521 * @arg TIM_TS_NONE: No trigger is needed | |
1522 * @param CommutationSource : the Commutation Event source | |
1523 * This parameter can be one of the following values: | |
1524 * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer | |
1525 * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit | |
1526 * @retval HAL status | |
1527 */ | |
1528 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) | |
1529 { | |
1530 /* Check the parameters */ | |
1531 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); | |
1532 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); | |
1533 | |
1534 __HAL_LOCK(htim); | |
1535 | |
1536 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || | |
1537 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) | |
1538 { | |
1539 /* Select the Input trigger */ | |
1540 htim->Instance->SMCR &= ~TIM_SMCR_TS; | |
1541 htim->Instance->SMCR |= InputTrigger; | |
1542 } | |
1543 | |
1544 /* Select the Capture Compare preload feature */ | |
1545 htim->Instance->CR2 |= TIM_CR2_CCPC; | |
1546 /* Select the Commutation event source */ | |
1547 htim->Instance->CR2 &= ~TIM_CR2_CCUS; | |
1548 htim->Instance->CR2 |= CommutationSource; | |
1549 | |
1550 /* Enable the Commutation Interrupt Request */ | |
1551 __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM); | |
1552 | |
1553 __HAL_UNLOCK(htim); | |
1554 | |
1555 return HAL_OK; | |
1556 } | |
1557 | |
1558 /** | |
1559 * @brief Configure the TIM commutation event sequence with DMA. | |
1560 * @note: this function is mandatory to use the commutation event in order to | |
1561 * update the configuration at each commutation detection on the TRGI input of the Timer, | |
1562 * the typical use of this feature is with the use of another Timer(interface Timer) | |
1563 * configured in Hall sensor interface, this interface Timer will generate the | |
1564 * commutation at its TRGO output (connected to Timer used in this function) each time | |
1565 * the TI1 of the Interface Timer detect a commutation at its input TI1. | |
1566 * @note: The user should configure the DMA in his own software, in This function only the COMDE bit is set | |
1567 * @param htim : TIM handle | |
1568 * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor | |
1569 * This parameter can be one of the following values: | |
1570 * @arg TIM_TS_ITR0: Internal trigger 0 selected | |
1571 * @arg TIM_TS_ITR1: Internal trigger 1 selected | |
1572 * @arg TIM_TS_ITR2: Internal trigger 2 selected | |
1573 * @arg TIM_TS_ITR3: Internal trigger 3 selected | |
1574 * @arg TIM_TS_NONE: No trigger is needed | |
1575 * @param CommutationSource : the Commutation Event source | |
1576 * This parameter can be one of the following values: | |
1577 * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer | |
1578 * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit | |
1579 * @retval HAL status | |
1580 */ | |
1581 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) | |
1582 { | |
1583 /* Check the parameters */ | |
1584 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); | |
1585 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); | |
1586 | |
1587 __HAL_LOCK(htim); | |
1588 | |
1589 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || | |
1590 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) | |
1591 { | |
1592 /* Select the Input trigger */ | |
1593 htim->Instance->SMCR &= ~TIM_SMCR_TS; | |
1594 htim->Instance->SMCR |= InputTrigger; | |
1595 } | |
1596 | |
1597 /* Select the Capture Compare preload feature */ | |
1598 htim->Instance->CR2 |= TIM_CR2_CCPC; | |
1599 /* Select the Commutation event source */ | |
1600 htim->Instance->CR2 &= ~TIM_CR2_CCUS; | |
1601 htim->Instance->CR2 |= CommutationSource; | |
1602 | |
1603 /* Enable the Commutation DMA Request */ | |
1604 /* Set the DMA Commutation Callback */ | |
1605 htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; | |
1606 /* Set the DMA error callback */ | |
1607 htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError; | |
1608 | |
1609 /* Enable the Commutation DMA Request */ | |
1610 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM); | |
1611 | |
1612 __HAL_UNLOCK(htim); | |
1613 | |
1614 return HAL_OK; | |
1615 } | |
1616 | |
1617 /** | |
1618 * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State | |
1619 * and the AOE(automatic output enable). | |
1620 * @param htim : TIM handle | |
1621 * @param sBreakDeadTimeConfig : pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that | |
1622 * contains the BDTR Register configuration information for the TIM peripheral. | |
1623 * @retval HAL status | |
1624 */ | |
1625 HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, | |
1626 TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) | |
1627 { | |
1628 /* Check the parameters */ | |
1629 assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance)); | |
1630 assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode)); | |
1631 assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode)); | |
1632 assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel)); | |
1633 assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime)); | |
1634 assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState)); | |
1635 assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); | |
1636 assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); | |
1637 | |
1638 /* Process Locked */ | |
1639 __HAL_LOCK(htim); | |
1640 | |
1641 htim->State = HAL_TIM_STATE_BUSY; | |
1642 | |
1643 /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, | |
1644 the OSSI State, the dead time value and the Automatic Output Enable Bit */ | |
1645 htim->Instance->BDTR = (uint32_t)sBreakDeadTimeConfig->OffStateRunMode | | |
1646 sBreakDeadTimeConfig->OffStateIDLEMode | | |
1647 sBreakDeadTimeConfig->LockLevel | | |
1648 sBreakDeadTimeConfig->DeadTime | | |
1649 sBreakDeadTimeConfig->BreakState | | |
1650 sBreakDeadTimeConfig->BreakPolarity | | |
1651 sBreakDeadTimeConfig->AutomaticOutput; | |
1652 | |
1653 | |
1654 htim->State = HAL_TIM_STATE_READY; | |
1655 | |
1656 __HAL_UNLOCK(htim); | |
1657 | |
1658 return HAL_OK; | |
1659 } | |
1660 | |
1661 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
1662 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
1663 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
1664 | |
1665 /** | |
1666 * @brief Configures the TIM in master mode. | |
1667 * @param htim : TIM handle. | |
1668 * @param sMasterConfig : pointer to a TIM_MasterConfigTypeDef structure that | |
1669 * contains the selected trigger output (TRGO) and the Master/Slave | |
1670 * mode. | |
1671 * @retval HAL status | |
1672 */ | |
1673 HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef * sMasterConfig) | |
1674 { | |
1675 /* Check the parameters */ | |
1676 assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); | |
1677 assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); | |
1678 assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); | |
1679 | |
1680 __HAL_LOCK(htim); | |
1681 | |
1682 htim->State = HAL_TIM_STATE_BUSY; | |
1683 | |
1684 /* Reset the MMS Bits */ | |
1685 htim->Instance->CR2 &= ~TIM_CR2_MMS; | |
1686 /* Select the TRGO source */ | |
1687 htim->Instance->CR2 |= sMasterConfig->MasterOutputTrigger; | |
1688 | |
1689 /* Reset the MSM Bit */ | |
1690 htim->Instance->SMCR &= ~TIM_SMCR_MSM; | |
1691 /* Set or Reset the MSM Bit */ | |
1692 htim->Instance->SMCR |= sMasterConfig->MasterSlaveMode; | |
1693 | |
1694 htim->State = HAL_TIM_STATE_READY; | |
1695 | |
1696 __HAL_UNLOCK(htim); | |
1697 | |
1698 return HAL_OK; | |
1699 } | |
1700 | |
1701 /** | |
1702 * @} | |
1703 */ | |
1704 | |
1705 /** @defgroup TIMEx_Exported_Functions_Group6 Extension Callbacks functions | |
1706 * @brief Extension Callbacks functions | |
1707 * | |
1708 @verbatim | |
1709 ============================================================================== | |
1710 ##### Extension Callbacks functions ##### | |
1711 ============================================================================== | |
1712 [..] | |
1713 This section provides Extension TIM callback functions: | |
1714 (+) Timer Commutation callback | |
1715 (+) Timer Break callback | |
1716 | |
1717 @endverbatim | |
1718 * @{ | |
1719 */ | |
1720 | |
1721 /** | |
1722 * @brief Hall commutation changed callback in non blocking mode | |
1723 * @param htim : TIM handle | |
1724 * @retval None | |
1725 */ | |
1726 __weak void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim) | |
1727 { | |
1728 /* Prevent unused argument(s) compilation warning */ | |
1729 UNUSED(htim); | |
1730 /* NOTE : This function Should not be modified, when the callback is needed, | |
1731 the HAL_TIMEx_CommutationCallback could be implemented in the user file | |
1732 */ | |
1733 } | |
1734 | |
1735 /** | |
1736 * @brief Hall Break detection callback in non blocking mode | |
1737 * @param htim : TIM handle | |
1738 * @retval None | |
1739 */ | |
1740 __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) | |
1741 { | |
1742 /* Prevent unused argument(s) compilation warning */ | |
1743 UNUSED(htim); | |
1744 /* NOTE : This function Should not be modified, when the callback is needed, | |
1745 the HAL_TIMEx_BreakCallback could be implemented in the user file | |
1746 */ | |
1747 } | |
1748 | |
1749 /** | |
1750 * @brief TIM DMA Commutation callback. | |
1751 * @param hdma : pointer to DMA handle. | |
1752 * @retval None | |
1753 */ | |
1754 void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) | |
1755 { | |
1756 TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; | |
1757 | |
1758 htim->State= HAL_TIM_STATE_READY; | |
1759 | |
1760 HAL_TIMEx_CommutationCallback(htim); | |
1761 } | |
1762 | |
1763 /** | |
1764 * @} | |
1765 */ | |
1766 | |
1767 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
1768 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
1769 defined (STM32F105xC) || defined (STM32F107xC) | |
1770 | |
1771 /** @defgroup TIMEx_Exported_Functions_Group7 Extension Peripheral State functions | |
1772 * @brief Extension Peripheral State functions | |
1773 * | |
1774 @verbatim | |
1775 ============================================================================== | |
1776 ##### Extension Peripheral State functions ##### | |
1777 ============================================================================== | |
1778 [..] | |
1779 This subsection permit to get in run-time the status of the peripheral | |
1780 and the data flow. | |
1781 | |
1782 @endverbatim | |
1783 * @{ | |
1784 */ | |
1785 | |
1786 /** | |
1787 * @brief Return the TIM Hall Sensor interface state | |
1788 * @param htim : TIM Hall Sensor handle | |
1789 * @retval HAL state | |
1790 */ | |
1791 HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) | |
1792 { | |
1793 return htim->State; | |
1794 } | |
1795 | |
1796 /** | |
1797 * @} | |
1798 */ | |
1799 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
1800 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
1801 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
1802 | |
1803 /** | |
1804 * @} | |
1805 */ | |
1806 | |
1807 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
1808 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
1809 defined (STM32F105xC) || defined (STM32F107xC) | |
1810 | |
1811 /** @addtogroup TIMEx_Private_Functions | |
1812 * @{ | |
1813 */ | |
1814 | |
1815 /** | |
1816 * @brief Enables or disables the TIM Capture Compare Channel xN. | |
1817 * @param TIMx to select the TIM peripheral | |
1818 * @param Channel : specifies the TIM Channel | |
1819 * This parameter can be one of the following values: | |
1820 * @arg TIM_Channel_1: TIM Channel 1 | |
1821 * @arg TIM_Channel_2: TIM Channel 2 | |
1822 * @arg TIM_Channel_3: TIM Channel 3 | |
1823 * @param ChannelNState : specifies the TIM Channel CCxNE bit new state. | |
1824 * This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable. | |
1825 * @retval None | |
1826 */ | |
1827 static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelNState) | |
1828 { | |
1829 uint32_t tmp = 0; | |
1830 | |
1831 tmp = TIM_CCER_CC1NE << Channel; | |
1832 | |
1833 /* Reset the CCxNE Bit */ | |
1834 TIMx->CCER &= ~tmp; | |
1835 | |
1836 /* Set or reset the CCxNE Bit */ | |
1837 TIMx->CCER |= (uint32_t)(ChannelNState << Channel); | |
1838 } | |
1839 | |
1840 /** | |
1841 * @} | |
1842 */ | |
1843 | |
1844 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
1845 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
1846 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
1847 | |
1848 #endif /* HAL_TIM_MODULE_ENABLED */ | |
1849 /** | |
1850 * @} | |
1851 */ | |
1852 | |
1853 /** | |
1854 * @} | |
1855 */ | |
1856 | |
1857 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |