STM8L15x Standard Peripherals Drivers
|
stm8l15x_tim5.c
Go to the documentation of this file.
00001 /** 00002 ****************************************************************************** 00003 * @file stm8l15x_tim5.c 00004 * @author MCD Application Team 00005 * @version V1.5.0 00006 * @date 13-May-2011 00007 * @brief This file provides firmware functions to manage the following 00008 * functionalities of the TIM5 peripheral: 00009 * - TimeBase management 00010 * - Output Compare management 00011 * - Input Capture management 00012 * - Interrupts, DMA and flags management 00013 * - Clocks management 00014 * - Synchronization management 00015 * - Specific interface management 00016 * 00017 * @verbatim 00018 * 00019 * =================================================================== 00020 * How to use this driver 00021 * =================================================================== 00022 * This driver provides functions to configure and initialise the TIM5 00023 * peripheral 00024 * These functions are split in 7 groups: 00025 * 00026 * 1. TIM5 TimeBase management: this group includes all needed functions 00027 * to configure the TIM Timebase unit: 00028 * - Set/Get Prescaler 00029 * - Set/Get Autoreload 00030 * - Counter modes configuration 00031 * - Select the One Pulse mode 00032 * - Update Request Configuration 00033 * - Update Disable Configuration 00034 * - Auto-Preload Configuration 00035 * - Enable/Disable the counter 00036 * 00037 * 2. TIM5 Output Compare management: this group includes all needed 00038 * functions to configure the Capture/Compare unit used in Output 00039 * compare mode: 00040 * - Configure each channel, independently, in Output Compare mode 00041 * - Select the output compare modes 00042 * - Select the Polarities of each channel 00043 * - Set/Get the Capture/Compare register values 00044 * - Select the Output Compare Fast mode 00045 * - Select the Output Compare Forced mode 00046 * - Output Compare-Preload Configuration 00047 * - Enable/Disable the Capture/Compare Channels 00048 * 00049 * 3. TIM5 Input Capture management: this group includes all needed 00050 * functions to configure the Capture/Compare unit used in 00051 * Input Capture mode: 00052 * - Configure each channel in input capture mode 00053 * - Configure Channel1/2 in PWM Input mode 00054 * - Set the Input Capture Prescaler 00055 * - Get the Capture/Compare values 00056 * 00057 * 4. TIM5 interrupts, DMA and flags management 00058 * - Enable/Disable interrupt sources 00059 * - Get flags status 00060 * - Clear flags/ Pending bits 00061 * - Enable/Disable DMA requests 00062 * - Select CaptureCompare DMA request 00063 * 00064 * 5. TIM5 clocks management: this group includes all needed functions 00065 * to configure the clock controller unit: 00066 * - Select internal/External clock 00067 * - Select the external clock mode: ETR(Mode1/Mode2) or TIx 00068 * 00069 * 6. TIM5 synchronization management: this group includes all needed 00070 * functions to configure the Synchronization unit: 00071 * - Select Input Trigger 00072 * - Select Output Trigger 00073 * - Select Master Slave Mode 00074 * - ETR Configuration when used as external trigger 00075 * 00076 * 7. TIM5 specific interface management, this group includes all 00077 * needed functions to use the specific TIM5 interface: 00078 * - Encoder Interface Configuration 00079 * - Select Hall Sensor 00080 * 00081 * @endverbatim 00082 * 00083 ****************************************************************************** 00084 * @attention 00085 * 00086 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 00087 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 00088 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 00089 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 00090 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 00091 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 00092 * 00093 * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> 00094 ****************************************************************************** 00095 */ 00096 00097 /* Includes ------------------------------------------------------------------*/ 00098 #include "stm8l15x_TIM5.h" 00099 00100 /** @addtogroup STM8L15x_StdPeriph_Driver 00101 * @{ 00102 */ 00103 00104 /** @defgroup TIM5 00105 * @brief TIM5 driver modules 00106 * @{ 00107 */ 00108 00109 /* Private typedef -----------------------------------------------------------*/ 00110 /* Private define ------------------------------------------------------------*/ 00111 /* Private macro -------------------------------------------------------------*/ 00112 /* Private variables ---------------------------------------------------------*/ 00113 /* Private function prototypes -----------------------------------------------*/ 00114 static void TI1_Config(TIM5_ICPolarity_TypeDef TIM5_ICPolarity, 00115 TIM5_ICSelection_TypeDef TIM5_ICSelection, 00116 uint8_t TIM5_ICFilter); 00117 static void TI2_Config(TIM5_ICPolarity_TypeDef TIM5_ICPolarity, 00118 TIM5_ICSelection_TypeDef TIM5_ICSelection, 00119 uint8_t TIM5_ICFilter); 00120 00121 00122 /** @defgroup TIM5_Private_Functions 00123 * @{ 00124 */ 00125 00126 /** @defgroup TIM5_Group1 TimeBase management functions 00127 * @brief TimeBase management functions 00128 * 00129 @verbatim 00130 =============================================================================== 00131 TimeBase management functions 00132 =============================================================================== 00133 00134 =================================================================== 00135 TIM5 Driver: how to use it in Timing(Time base) Mode 00136 =================================================================== 00137 To use the Timer in Timing(Time base) mode, the following steps are mandatory: 00138 00139 1. Enable TIM5 clock using CLK_PeripheralClockConfig(CLK_Peripheral_TIM5, ENABLE) function. 00140 00141 2. Call TIM5_TimeBaseInit() to configure the Time Base unit with the 00142 corresponding configuration. 00143 00144 3. Enable global interrupts if you need to generate the update interrupt. 00145 00146 4. Enable the corresponding interrupt using the function TIM5_ITConfig(TIM5_IT_Update) 00147 00148 5. Call the TIM5_Cmd(ENABLE) function to enable the TIM5 counter. 00149 00150 Note1: All other functions can be used separately to modify, if needed, 00151 a specific feature of the Timer. 00152 00153 @endverbatim 00154 * @{ 00155 */ 00156 00157 /** 00158 * @brief Deinitialize the TIM5 peripheral registers to their default reset values. 00159 * @param None 00160 * @retval None 00161 */ 00162 void TIM5_DeInit(void) 00163 { 00164 TIM5->CR1 = TIM_CR1_RESET_VALUE; 00165 TIM5->CR2 = TIM_CR2_RESET_VALUE; 00166 TIM5->SMCR = TIM_SMCR_RESET_VALUE; 00167 TIM5->ETR = TIM_ETR_RESET_VALUE; 00168 TIM5->IER = TIM_IER_RESET_VALUE; 00169 TIM5->SR2 = TIM_SR2_RESET_VALUE; 00170 00171 /* Disable channels */ 00172 TIM5->CCER1 = TIM_CCER1_RESET_VALUE; 00173 /* Configure channels as inputs: it is necessary if lock level is equal to 2 or 3 */ 00174 TIM5->CCMR1 = 0x01;/*TIM5_ICxSource_TIxFPx */ 00175 TIM5->CCMR2 = 0x01;/*TIM5_ICxSource_TIxFPx */ 00176 00177 /* Then reset channel registers: it also works if lock level is equal to 2 or 3 */ 00178 TIM5->CCER1 = TIM_CCER1_RESET_VALUE; 00179 TIM5->CCMR1 = TIM_CCMR1_RESET_VALUE; 00180 TIM5->CCMR2 = TIM_CCMR2_RESET_VALUE; 00181 00182 TIM5->CNTRH = TIM_CNTRH_RESET_VALUE; 00183 TIM5->CNTRL = TIM_CNTRL_RESET_VALUE; 00184 00185 TIM5->PSCR = TIM_PSCR_RESET_VALUE; 00186 00187 TIM5->ARRH = TIM_ARRH_RESET_VALUE; 00188 TIM5->ARRL = TIM_ARRL_RESET_VALUE; 00189 00190 TIM5->CCR1H = TIM_CCR1H_RESET_VALUE; 00191 TIM5->CCR1L = TIM_CCR1L_RESET_VALUE; 00192 TIM5->CCR2H = TIM_CCR2H_RESET_VALUE; 00193 TIM5->CCR2L = TIM_CCR2L_RESET_VALUE; 00194 00195 00196 TIM5->OISR = TIM_OISR_RESET_VALUE; 00197 TIM5->EGR = 0x01;/* TIM_EGR_UG */ 00198 TIM5->BKR = TIM_BKR_RESET_VALUE; 00199 TIM5->SR1 = TIM_SR1_RESET_VALUE; 00200 } 00201 00202 /** 00203 * @brief Initializes the TIM5 Time Base Unit according to the specified parameters. 00204 * @param TIM5_Prescaler: Prescaler 00205 * This parameter can be one of the following values: 00206 * @arg TIM5_Prescaler_1: Time base Prescaler = 1 (No effect) 00207 * @arg TIM5_Prescaler_2: Time base Prescaler = 2 00208 * @arg TIM5_Prescaler_4: Time base Prescaler = 4 00209 * @arg TIM5_Prescaler_8: Time base Prescaler = 8 00210 * @arg TIM5_Prescaler_16: Time base Prescaler = 16 00211 * @arg TIM5_Prescaler_32: Time base Prescaler = 32 00212 * @arg TIM5_Prescaler_64: Time base Prescaler = 64 00213 * @arg TIM5_Prescaler_128: Time base Prescaler = 128 00214 * @param TIM5_CounterMode: Counter mode 00215 * This parameter can be one of the following values: 00216 * @arg TIM5_CounterMode_Up: Counter Up Mode 00217 * @arg TIM5_CounterMode_Down: Counter Down Mode 00218 * @arg TIM5_CounterMode_CenterAligned1: Counter Central aligned Mode 1 00219 * @arg TIM5_CounterMode_CenterAligned2: Counter Central aligned Mode 2 00220 * @arg TIM5_CounterMode_CenterAligned3: Counter Central aligned Mode 3 00221 * @param TIM5_Period: This parameter must be a value between 0x0000 and 0xFFFF. 00222 * @retval None 00223 */ 00224 00225 void TIM5_TimeBaseInit(TIM5_Prescaler_TypeDef TIM5_Prescaler, 00226 TIM5_CounterMode_TypeDef TIM5_CounterMode, 00227 uint16_t TIM5_Period) 00228 { 00229 00230 assert_param(IS_TIM5_PRESCALER(TIM5_Prescaler)); 00231 assert_param(IS_TIM5_COUNTER_MODE(TIM5_CounterMode)); 00232 00233 00234 00235 /* Set the Autoreload value */ 00236 TIM5->ARRH = (uint8_t)(TIM5_Period >> 8) ; 00237 TIM5->ARRL = (uint8_t)(TIM5_Period); 00238 00239 /* Set the Prescaler value */ 00240 TIM5->PSCR = (uint8_t)(TIM5_Prescaler); 00241 00242 /* Select the Counter Mode */ 00243 TIM5->CR1 &= (uint8_t)((uint8_t)(~TIM_CR1_CMS)) & ((uint8_t)(~TIM_CR1_DIR)); 00244 TIM5->CR1 |= (uint8_t)(TIM5_CounterMode); 00245 00246 /* Generate an update event to reload the Prescaler value immediately */ 00247 TIM5->EGR = TIM5_EventSource_Update; 00248 } 00249 00250 /** 00251 * @brief Configures the TIM5 Prescaler. 00252 * @param Prescaler: Specifies the Prescaler Register value 00253 * This parameter can be one of the following values: 00254 * @arg TIM5_Prescaler_1: Time base Prescaler = 1 (No effect) 00255 * @arg TIM5_Prescaler_2: Time base Prescaler = 2 00256 * @arg TIM5_Prescaler_4: Time base Prescaler = 4 00257 * @arg TIM5_Prescaler_8: Time base Prescaler = 8 00258 * @arg TIM5_Prescaler_16: Time base Prescaler = 16 00259 * @arg TIM5_Prescaler_32: Time base Prescaler = 32 00260 * @arg TIM5_Prescaler_64: Time base Prescaler = 64 00261 * @arg TIM5_Prescaler_128: Time base Prescaler = 128 00262 * @param TIM5_PSCReloadMode: Specifies the TIM5 Prescaler Reload mode. 00263 * This parameter can be one of the following values: 00264 * @arg TIM5_PSCReloadMode_Update: Prescaler value is reloaded at every update 00265 * @arg TIM5_PSCReloadMode_Immediate: Prescaler value is reloaded at every update 00266 * @retval None 00267 */ 00268 void TIM5_PrescalerConfig(TIM5_Prescaler_TypeDef Prescaler, 00269 TIM5_PSCReloadMode_TypeDef TIM5_PSCReloadMode) 00270 { 00271 /* Check the parameters */ 00272 assert_param(IS_TIM5_PRESCALER(Prescaler)); 00273 assert_param(IS_TIM5_PRESCALER_RELOAD(TIM5_PSCReloadMode)); 00274 00275 /* Set the Prescaler value */ 00276 TIM5->PSCR = (uint8_t)(Prescaler); 00277 00278 /* Set or reset the UG Bit */ 00279 if (TIM5_PSCReloadMode == TIM5_PSCReloadMode_Immediate) 00280 { 00281 TIM5->EGR |= TIM_EGR_UG ; 00282 } 00283 else 00284 { 00285 TIM5->EGR &= (uint8_t)(~TIM_EGR_UG) ; 00286 } 00287 } 00288 00289 /** 00290 * @brief Specifies the TIM5 Counter Mode to be used. 00291 * @param TIM5_CounterMode: Specifies the Counter Mode to be used 00292 * This parameter can be one of the following values: 00293 * @arg TIM5_CounterMode_Up: Counter Up Mode 00294 * @arg TIM5_CounterMode_Down: Counter Down Mode 00295 * @arg TIM5_CounterMode_CenterAligned1: Counter Central aligned Mode 1 00296 * @arg TIM5_CounterMode_CenterAligned2: Counter Central aligned Mode 2 00297 * @arg TIM5_CounterMode_CenterAligned3: Counter Central aligned Mode 3 00298 * @retval None 00299 */ 00300 void TIM5_CounterModeConfig(TIM5_CounterMode_TypeDef TIM5_CounterMode) 00301 { 00302 uint8_t tmpcr1 = 0; 00303 00304 /* Check the parameters */ 00305 assert_param(IS_TIM5_COUNTER_MODE(TIM5_CounterMode)); 00306 00307 tmpcr1 = TIM5->CR1; 00308 00309 /* Reset the CMS and DIR Bits */ 00310 tmpcr1 &= (uint8_t)((uint8_t)(~TIM_CR1_CMS) & (uint8_t)(~TIM_CR1_DIR)); 00311 00312 /* Set the Counter Mode */ 00313 tmpcr1 |= (uint8_t)TIM5_CounterMode; 00314 00315 TIM5->CR1 = tmpcr1; 00316 } 00317 00318 /** 00319 * @brief Sets the TIM5 Counter Register value. 00320 * @param Counter: Specifies the Counter register new value. 00321 * This parameter is between 0x0000 and 0xFFFF. 00322 * @retval None 00323 */ 00324 void TIM5_SetCounter(uint16_t Counter) 00325 { 00326 00327 /* Set the Counter Register value */ 00328 TIM5->CNTRH = (uint8_t)(Counter >> 8); 00329 TIM5->CNTRL = (uint8_t)(Counter); 00330 } 00331 00332 /** 00333 * @brief Sets the TIM5 Autoreload Register value. 00334 * @param Autoreload: Specifies the Autoreload register new value. 00335 * This parameter is between 0x0000 and 0xFFFF. 00336 * @retval None 00337 */ 00338 void TIM5_SetAutoreload(uint16_t Autoreload) 00339 { 00340 /* Set the Autoreload Register value */ 00341 TIM5->ARRH = (uint8_t)(Autoreload >> 8); 00342 TIM5->ARRL = (uint8_t)(Autoreload); 00343 } 00344 00345 /** 00346 * @brief Gets the TIM5 Counter value. 00347 * @param None 00348 * @retval Counter Register value. 00349 */ 00350 uint16_t TIM5_GetCounter(void) 00351 { 00352 uint16_t tmpcnt = 0; 00353 uint8_t tmpcntrl, tmpcntrh; 00354 00355 tmpcntrh = TIM5->CNTRH; 00356 tmpcntrl = TIM5->CNTRL; 00357 00358 tmpcnt = (uint16_t)(tmpcntrl); 00359 tmpcnt |= (uint16_t)((uint16_t)tmpcntrh << 8); 00360 /* Get the Counter Register value */ 00361 return ((uint16_t)tmpcnt); 00362 } 00363 00364 /** 00365 * @brief Gets the TIM5 Prescaler value. 00366 * @param None 00367 * @retval TIM5 Prescaler, it can be one of the following values: 00368 * - TIM5_Prescaler_1: Time base Prescaler = 1 (No effect) 00369 * - TIM5_Prescaler_2: Time base Prescaler = 2 00370 * - TIM5_Prescaler_4: Time base Prescaler = 4 00371 * - TIM5_Prescaler_8: Time base Prescaler = 8 00372 * - TIM5_Prescaler_16: Time base Prescaler = 16 00373 * - TIM5_Prescaler_32: Time base Prescaler = 32 00374 * - TIM5_Prescaler_64: Time base Prescaler = 64 00375 * - TIM5_Prescaler_128: Time base Prescaler = 128 00376 */ 00377 TIM5_Prescaler_TypeDef TIM5_GetPrescaler(void) 00378 { 00379 /* Get the Prescaler Register value */ 00380 return ((TIM5_Prescaler_TypeDef)TIM5->PSCR); 00381 } 00382 00383 /** 00384 * @brief Enables or Disables the TIM5 Update event. 00385 * @param NewState: The new state of the TIM5 peripheral Preload register. 00386 * This parameter can be ENABLE or DISABLE 00387 * @retval None 00388 */ 00389 00390 void TIM5_UpdateDisableConfig(FunctionalState NewState) 00391 { 00392 /* Check the parameters */ 00393 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00394 00395 /* Set or Reset the UDIS Bit */ 00396 if (NewState != DISABLE) 00397 { 00398 TIM5->CR1 |= TIM_CR1_UDIS; 00399 } 00400 else 00401 { 00402 TIM5->CR1 &= (uint8_t)(~TIM_CR1_UDIS); 00403 } 00404 } 00405 00406 /** 00407 * @brief Selects the TIM5 Update Request Interrupt source. 00408 * @param TIM5_UpdateSource: Specifies the Update source. 00409 * This parameter can be one of the following values: 00410 * @arg TIM5_UpdateSource_Global: Global Update request source 00411 * @arg TIM5_UpdateSource_Regular: Regular Update request source 00412 * @retval None 00413 */ 00414 void TIM5_UpdateRequestConfig(TIM5_UpdateSource_TypeDef TIM5_UpdateSource) 00415 { 00416 /* Check the parameters */ 00417 assert_param(IS_TIM5_UPDATE_SOURCE(TIM5_UpdateSource)); 00418 00419 /* Set or Reset the URS Bit */ 00420 if (TIM5_UpdateSource == TIM5_UpdateSource_Regular) 00421 { 00422 TIM5->CR1 |= TIM_CR1_URS ; 00423 } 00424 else 00425 { 00426 TIM5->CR1 &= (uint8_t)(~TIM_CR1_URS); 00427 } 00428 } 00429 00430 /** 00431 * @brief Enables or disables TIM5 peripheral Preload register on ARR. 00432 * @param NewState: The new state of the TIM5 peripheral Preload register. 00433 * This parameter can be ENABLE or DISABLE 00434 * @retval None 00435 */ 00436 void TIM5_ARRPreloadConfig(FunctionalState NewState) 00437 { 00438 /* Check the parameters */ 00439 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00440 00441 /* Set or Reset the ARPE Bit */ 00442 if (NewState != DISABLE) 00443 { 00444 TIM5->CR1 |= TIM_CR1_ARPE; 00445 } 00446 else 00447 { 00448 TIM5->CR1 &= (uint8_t)(~TIM_CR1_ARPE); 00449 } 00450 } 00451 00452 /** 00453 * @brief Selects the TIM�s One Pulse Mode. 00454 * @param TIM5_OPMode: Specifies the OPM Mode to be used. 00455 * This parameter can be one of the following values: 00456 * @arg TIM5_OPMode_Single: Single one Pulse mode (OPM Active) 00457 * @arg TIM5_OPMode_Repetitive: Single one Pulse mode (OPM Active) 00458 * @retval None 00459 */ 00460 void TIM5_SelectOnePulseMode(TIM5_OPMode_TypeDef TIM5_OPMode) 00461 { 00462 /* Check the parameters */ 00463 assert_param(IS_TIM5_OPM_MODE(TIM5_OPMode)); 00464 00465 /* Set or Reset the OPM Bit */ 00466 if (TIM5_OPMode == TIM5_OPMode_Single) 00467 { 00468 TIM5->CR1 |= TIM_CR1_OPM ; 00469 } 00470 else 00471 { 00472 TIM5->CR1 &= (uint8_t)(~TIM_CR1_OPM); 00473 } 00474 } 00475 00476 /** 00477 * @brief Enables or disables the TIM5 peripheral. 00478 * @param NewState: The new state of the TIM5 peripheral. 00479 * This parameter can be ENABLE or DISABLE 00480 * @retval None 00481 */ 00482 void TIM5_Cmd(FunctionalState NewState) 00483 { 00484 /* Check the parameters */ 00485 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00486 00487 /* set or Reset the CEN Bit */ 00488 if (NewState != DISABLE) 00489 { 00490 TIM5->CR1 |= TIM_CR1_CEN; 00491 } 00492 else 00493 { 00494 TIM5->CR1 &= (uint8_t)(~TIM_CR1_CEN); 00495 } 00496 } 00497 00498 /** 00499 * @} 00500 */ 00501 00502 /** @defgroup TIM5_Group2 Output Compare management functions 00503 * @brief Output Compare management functions 00504 * 00505 @verbatim 00506 =============================================================================== 00507 Output Compare management functions 00508 =============================================================================== 00509 00510 =================================================================== 00511 TIM5 Driver: how to use it in Output Compare Mode 00512 =================================================================== 00513 To use the Timer in Output Compare mode, the following steps are mandatory: 00514 00515 1. Enable TIM5 clock using CLK_PeripheralClockConfig(CLK_Peripheral_TIM5, ENABLE) function. 00516 00517 2. Configure the TIM5 pins in output mode by configuring the corresponding GPIO pins 00518 00519 3. Configure the Time base unit as described in the first part of this driver, if needed, 00520 otherwise the Timer will run with the default configuration: 00521 - Autoreload value = 0xFFFF 00522 - Prescaler value = 0x0000 00523 - Counter mode = Up counting 00524 00525 4. Call TIM5_OCxInit() to configure the channel x with the desired parameters 00526 including: 00527 - TIM5 Output Compare mode: TIM5_OCMode 00528 - TIM5 Output State: TIM5_OutputState 00529 - TIM5 Pulse value: TIM5_Pulse 00530 - TIM5 Output Compare Polarity: TIM5_OCPolarity 00531 - TIM5 Output Idle State: TIM5_OCIdleState 00532 00533 5. Call the TIM5_Cmd(ENABLE) function to enable the TIM5 counter. 00534 00535 Note1: All other functions can be used separately to modify, if needed, 00536 a specific feature of the Timer. 00537 00538 Note2: If the corresponding interrupt or DMA request are needed, the user should: 00539 1. Enable global interrupts (or the DMA) to use the TIM5 interrupts (or DMA requests). 00540 2. Enable the corresponding interrupt (or DMA request) using the function 00541 TIM5_ITConfig(TIM5_IT_CCx) (or TIM5_DMACmd(TIM5_DMASource_CCx)) 00542 00543 @endverbatim 00544 * @{ 00545 */ 00546 00547 /** 00548 * @brief Initializes the TIM5 Channel1 according to the specified parameters. 00549 * @param TIM5_OCMode: Output Compare Mode 00550 * This parameter can be one of the following values: 00551 * @arg TIM5_OCMode_Timing: Timing (Frozen) Mode 00552 * @arg TIM5_OCMode_Active: Active Mode 00553 * @arg TIM5_OCMode_Inactive: Inactive Mode 00554 * @arg TIM5_OCMode_Toggle: Toggle Mode 00555 * @arg TIM5_OCMode_PWM1: PWM Mode 1 00556 * @arg TIM5_OCMode_PWM2: PWM Mode 2 00557 * @param TIM5_OutputState: Output state 00558 * This parameter can be one of the following values: 00559 * @arg TIM5_OutputState_Disable: Output compare State disabled (channel output disabled) 00560 * @arg TIM5_OutputState_Enable: Output compare State enabled (channel output enabled) 00561 * @param TIM5_Pulse: This parameter must be a value between 0x0000 and 0xFFFF. 00562 * @param TIM5_OCPolarity: Polarity 00563 * This parameter can be one of the following values: 00564 * @arg TIM5_OCPolarity_High: Output compare polarity = High 00565 * @arg TIM5_OCPolarity_Low: Output compare polarity = Low 00566 * @param TIM5_OCIdleState: Output Compare Idle State 00567 * This parameter can be one of the following values: 00568 * @arg TIM5_OCIdleState_Reset: Output Compare Idle state = Reset 00569 * @arg TIM5_OCIdleState_Set: Output Compare Idle state = Set 00570 * @retval None 00571 */ 00572 void TIM5_OC1Init(TIM5_OCMode_TypeDef TIM5_OCMode, 00573 TIM5_OutputState_TypeDef TIM5_OutputState, 00574 uint16_t TIM5_Pulse, 00575 TIM5_OCPolarity_TypeDef TIM5_OCPolarity, 00576 TIM5_OCIdleState_TypeDef TIM5_OCIdleState) 00577 { 00578 uint8_t tmpccmr1 = 0; 00579 00580 /* Check the parameters */ 00581 assert_param(IS_TIM5_OC_MODE(TIM5_OCMode)); 00582 assert_param(IS_TIM5_OUTPUT_STATE(TIM5_OutputState)); 00583 assert_param(IS_TIM5_OC_POLARITY(TIM5_OCPolarity)); 00584 assert_param(IS_TIM5_OCIDLE_STATE(TIM5_OCIdleState)); 00585 00586 tmpccmr1 = TIM5->CCMR1; 00587 00588 /* Disable the Channel 1: Reset the CCE Bit */ 00589 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1E); 00590 /* Reset the Output Compare Bits */ 00591 tmpccmr1 &= (uint8_t)(~TIM_CCMR_OCM); 00592 00593 /* Set the Output Compare Mode */ 00594 tmpccmr1 |= (uint8_t)TIM5_OCMode; 00595 00596 TIM5->CCMR1 = tmpccmr1; 00597 00598 /* Set the Output State */ 00599 if (TIM5_OutputState == TIM5_OutputState_Enable) 00600 { 00601 TIM5->CCER1 |= TIM_CCER1_CC1E; 00602 } 00603 else 00604 { 00605 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1E); 00606 } 00607 00608 /* Set the Output Polarity */ 00609 if (TIM5_OCPolarity == TIM5_OCPolarity_Low) 00610 { 00611 TIM5->CCER1 |= TIM_CCER1_CC1P; 00612 } 00613 else 00614 { 00615 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1P); 00616 } 00617 00618 /* Set the Output Idle state */ 00619 if (TIM5_OCIdleState == TIM5_OCIdleState_Set) 00620 { 00621 TIM5->OISR |= TIM_OISR_OIS1; 00622 } 00623 else 00624 { 00625 TIM5->OISR &= (uint8_t)(~TIM_OISR_OIS1); 00626 } 00627 00628 /* Set the Pulse value */ 00629 TIM5->CCR1H = (uint8_t)(TIM5_Pulse >> 8); 00630 TIM5->CCR1L = (uint8_t)(TIM5_Pulse); 00631 } 00632 00633 /** 00634 * @brief Initializes the TIM5 Channel2 according to the specified parameters. 00635 * @param TIM5_OCMode: Output Compare Mode 00636 * This parameter can be one of the following values: 00637 * @arg TIM5_OCMode_Timing: Timing (Frozen) Mode 00638 * @arg TIM5_OCMode_Active: Active Mode 00639 * @arg TIM5_OCMode_Inactive: Inactive Mode 00640 * @arg TIM5_OCMode_Toggle: Toggle Mode 00641 * @arg TIM5_OCMode_PWM1: PWM Mode 1 00642 * @arg TIM5_OCMode_PWM2: PWM Mode 2 00643 * @param TIM5_OutputState: Output state 00644 * This parameter can be one of the following values: 00645 * @arg TIM5_OutputState_Disable: Output compare State disabled (channel output disabled) 00646 * @arg TIM5_OutputState_Enable: Output compare State enabled (channel output enabled) 00647 * @param TIM5_Pulse: This parameter must be a value between 0x0000 and 0xFFFF. 00648 * @param TIM5_OCPolarity: Polarity 00649 * This parameter can be one of the following values: 00650 * @arg TIM5_OCPolarity_High: Output compare polarity = High 00651 * @arg TIM5_OCPolarity_Low: Output compare polarity = Low 00652 * @param TIM5_OCIdleState: Output Compare Idle State 00653 * This parameter can be one of the following values: 00654 * @arg TIM5_OCIdleState_Reset: Output Compare Idle state = Reset 00655 * @arg TIM5_OCIdleState_Set: Output Compare Idle state = Set 00656 * @retval None 00657 */ 00658 void TIM5_OC2Init(TIM5_OCMode_TypeDef TIM5_OCMode, 00659 TIM5_OutputState_TypeDef TIM5_OutputState, 00660 uint16_t TIM5_Pulse, 00661 TIM5_OCPolarity_TypeDef TIM5_OCPolarity, 00662 TIM5_OCIdleState_TypeDef TIM5_OCIdleState) 00663 { 00664 uint8_t tmpccmr2 = 0; 00665 00666 /* Check the parameters */ 00667 assert_param(IS_TIM5_OC_MODE(TIM5_OCMode)); 00668 assert_param(IS_TIM5_OUTPUT_STATE(TIM5_OutputState)); 00669 assert_param(IS_TIM5_OC_POLARITY(TIM5_OCPolarity)); 00670 assert_param(IS_TIM5_OCIDLE_STATE(TIM5_OCIdleState)); 00671 00672 tmpccmr2 = TIM5->CCMR2; 00673 00674 /* Disable the Channel 2: Reset the CCE Bit */ 00675 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2E); 00676 00677 /* Reset the Output Compare Bits */ 00678 tmpccmr2 &= (uint8_t)(~TIM_CCMR_OCM); 00679 00680 /* Set the Output Compare Mode */ 00681 tmpccmr2 |= (uint8_t)TIM5_OCMode; 00682 00683 TIM5->CCMR2 = tmpccmr2; 00684 00685 /* Set the Output State */ 00686 if (TIM5_OutputState == TIM5_OutputState_Enable) 00687 { 00688 TIM5->CCER1 |= TIM_CCER1_CC2E; 00689 } 00690 else 00691 { 00692 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2E); 00693 } 00694 00695 /* Set the Output Polarity */ 00696 if (TIM5_OCPolarity == TIM5_OCPolarity_Low) 00697 { 00698 TIM5->CCER1 |= TIM_CCER1_CC2P; 00699 } 00700 else 00701 { 00702 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2P); 00703 } 00704 00705 00706 /* Set the Output Idle state */ 00707 if (TIM5_OCIdleState == TIM5_OCIdleState_Set) 00708 { 00709 TIM5->OISR |= TIM_OISR_OIS2; 00710 } 00711 else 00712 { 00713 TIM5->OISR &= (uint8_t)(~TIM_OISR_OIS2); 00714 } 00715 00716 /* Set the Pulse value */ 00717 TIM5->CCR2H = (uint8_t)(TIM5_Pulse >> 8); 00718 TIM5->CCR2L = (uint8_t)(TIM5_Pulse); 00719 } 00720 00721 /** 00722 * @brief Configures the Break feature, dead time, Lock level, the OSSI, 00723 * and the AOE(automatic output enable). 00724 * @param TIM5_OSSIState: Off-State Selection for Idle mode states. 00725 * This parameter can be one of the following values: 00726 * @arg TIM5_OSSIState_Enable: Off-State Selection for Idle mode enabled 00727 * @arg TIM5_OSSIState_Disable: Off-State Selection for Idle mode disabled 00728 * @param TIM5_LockLevel: Lock level. 00729 * This parameter can be one of the following values: 00730 * @arg TIM5_LockLevel_Off: Lock option disabled 00731 * @arg TIM5_LockLevel_1: Select Lock Level 1 00732 * @arg TIM5_LockLevel_2: Select Lock Level 2 00733 * @arg TIM5_LockLevel_3: Select Lock Level 3 00734 * @param TIM5_BreakState: Break Input enable/disable . 00735 * This parameter can be one of the following values: 00736 * @arg TIM5_BreakState_Disable: Break State disabled (break option disabled) 00737 * @arg TIM5_BreakState_Enable: Break State enabled (break option enabled) 00738 * @param TIM5_BreakPolarity: Break Polarity. 00739 * This parameter can be one of the following values: 00740 * @arg TIM5_BreakPolarity_High: if Break, channel polarity = High 00741 * @arg TIM5_BreakPolarity_Low: if Break, channel polarity = Low 00742 * @param TIM5_AutomaticOutput: TIM5 AOE Bit Set/Reset . 00743 * This parameter can be one of the following values: 00744 * @arg TIM5_AutomaticOutput_Enable: Automatic Output option enabled 00745 * @arg TIM5_AutomaticOutput_Disable: Automatic Output option disabled 00746 * @retval None 00747 */ 00748 void TIM5_BKRConfig(TIM5_OSSIState_TypeDef TIM5_OSSIState, 00749 TIM5_LockLevel_TypeDef TIM5_LockLevel, 00750 TIM5_BreakState_TypeDef TIM5_BreakState, 00751 TIM5_BreakPolarity_TypeDef TIM5_BreakPolarity, 00752 TIM5_AutomaticOutput_TypeDef TIM5_AutomaticOutput) 00753 00754 { 00755 /* Check the parameters */ 00756 assert_param(IS_TIM5_OSSI_STATE(TIM5_OSSIState)); 00757 assert_param(IS_TIM5_LOCK_LEVEL(TIM5_LockLevel)); 00758 assert_param(IS_TIM5_BREAK_STATE(TIM5_BreakState)); 00759 assert_param(IS_TIM5_BREAK_POLARITY(TIM5_BreakPolarity)); 00760 assert_param(IS_TIM5_AUTOMATIC_OUTPUT_STATE(TIM5_AutomaticOutput)); 00761 00762 00763 00764 /* Set the Lock level, the Break enable Bit and the Ploarity, the OSSI State, 00765 the dead time value and the Automatic Output Enable Bit */ 00766 TIM5->BKR = (uint8_t)((uint8_t)((uint8_t)((uint8_t)((uint8_t)TIM5_OSSIState | (uint8_t)TIM5_LockLevel) | \ 00767 (uint8_t)((uint8_t)TIM5_BreakState | (uint8_t)TIM5_BreakPolarity)) | \ 00768 TIM5_AutomaticOutput)); 00769 } 00770 00771 /** 00772 * @brief Enables or disables the TIM5 peripheral Main Outputs. 00773 * @param NewState: The new state of the TIM5 peripheral. 00774 * This parameter can be ENABLE or DISABLE 00775 * @retval None 00776 */ 00777 void TIM5_CtrlPWMOutputs(FunctionalState NewState) 00778 { 00779 /* Check the parameters */ 00780 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00781 00782 /* Set or Reset the MOE Bit */ 00783 00784 if (NewState != DISABLE) 00785 { 00786 TIM5->BKR |= TIM_BKR_MOE ; 00787 } 00788 else 00789 { 00790 TIM5->BKR &= (uint8_t)(~TIM_BKR_MOE) ; 00791 } 00792 } 00793 00794 /** 00795 * @brief Selects the TIM5 Output Compare Mode. This function disables the 00796 * selected channel before changing the Output Compare Mode. User has to 00797 * enable this channel using TIM5_CCxCmd and TIM5_CCxNCmd functions. 00798 * @param TIM5_Channel: Specifies the TIM5 Channel. 00799 * This parameter can be one of the following values: 00800 * @arg TIM5_Channel_1: Channel 1 00801 * @arg TIM5_Channel_2: Channel 2 00802 * @param TIM5_OCMode: Specifies the TIM5 Output Compare Mode. 00803 * This parameter can be one of the following values: 00804 * @arg TIM5_OCMode_Timing: Timing (Frozen) Mode 00805 * @arg TIM5_OCMode_Active: Active Mode 00806 * @arg TIM5_OCMode_Inactive: Inactive Mode 00807 * @arg TIM5_OCMode_Toggle: Toggle Mode 00808 * @arg TIM5_OCMode_PWM1: PWM Mode 1 00809 * @arg TIM5_OCMode_PWM2: PWM Mode 2 00810 * @retval None 00811 */ 00812 void TIM5_SelectOCxM(TIM5_Channel_TypeDef TIM5_Channel, 00813 TIM5_OCMode_TypeDef TIM5_OCMode) 00814 { 00815 /* Check the parameters */ 00816 assert_param(IS_TIM5_CHANNEL(TIM5_Channel)); 00817 assert_param(IS_TIM5_OCM(TIM5_OCMode)); 00818 00819 if (TIM5_Channel == TIM5_Channel_1) 00820 { 00821 /* Disable the Channel 1: Reset the CCE Bit */ 00822 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1E); 00823 00824 /* Reset the Output Compare Bits */ 00825 TIM5->CCMR1 &= (uint8_t)(~TIM_CCMR_OCM); 00826 00827 /* Set the Output Compare Mode */ 00828 TIM5->CCMR1 |= (uint8_t)TIM5_OCMode; 00829 } 00830 else /* if (TIM5_Channel == TIM5_Channel_2) */ 00831 { 00832 /* Disable the Channel 2: Reset the CCE Bit */ 00833 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2E); 00834 00835 /* Reset the Output Compare Bits */ 00836 TIM5->CCMR2 &= (uint8_t)(~TIM_CCMR_OCM); 00837 00838 /* Set the Output Compare Mode */ 00839 TIM5->CCMR2 |= (uint8_t)TIM5_OCMode; 00840 } 00841 } 00842 00843 /** 00844 * @brief Sets the TIM5 Capture Compare1 Register value. 00845 * @param Compare: Specifies the Capture Compare1 register new value. 00846 * This parameter is between 0x0000 and 0xFFFF. 00847 * @retval None 00848 */ 00849 void TIM5_SetCompare1(uint16_t Compare) 00850 { 00851 /* Set the Capture Compare1 Register value */ 00852 TIM5->CCR1H = (uint8_t)(Compare >> 8); 00853 TIM5->CCR1L = (uint8_t)(Compare); 00854 } 00855 00856 /** 00857 * @brief Sets the TIM5 Capture Compare2 Register value. 00858 * @param Compare: Specifies the Capture Compare2 register new value. 00859 * This parameter is between 0x0000 and 0xFFFF. 00860 * @retval None 00861 */ 00862 void TIM5_SetCompare2(uint16_t Compare) 00863 { 00864 /* Set the Capture Compare2 Register value */ 00865 TIM5->CCR2H = (uint8_t)(Compare >> 8); 00866 TIM5->CCR2L = (uint8_t)(Compare); 00867 } 00868 00869 /** 00870 * @brief Forces the TIM5 Channel1 output waveform to active or inactive level. 00871 * @param TIM5_ForcedAction: Specifies the forced Action to be set to the output waveform. 00872 * This parameter can be one of the following values: 00873 * @arg TIM5_ForcedAction_Active: Output Reference is forced low 00874 * @arg TIM5_ForcedAction_Inactive: Output Reference is forced high 00875 * @retval None 00876 */ 00877 void TIM5_ForcedOC1Config(TIM5_ForcedAction_TypeDef TIM5_ForcedAction) 00878 { 00879 uint8_t tmpccmr1 = 0; 00880 00881 /* Check the parameters */ 00882 assert_param(IS_TIM5_FORCED_ACTION(TIM5_ForcedAction)); 00883 00884 tmpccmr1 = TIM5->CCMR1; 00885 00886 /* Reset the OCM Bits */ 00887 tmpccmr1 &= (uint8_t)(~TIM_CCMR_OCM); 00888 00889 /* Configure The Forced output Mode */ 00890 tmpccmr1 |= (uint8_t)TIM5_ForcedAction; 00891 00892 TIM5->CCMR1 = tmpccmr1; 00893 } 00894 00895 /** 00896 * @brief Forces the TIM5 Channel2 output waveform to active or inactive level. 00897 * @param TIM5_ForcedAction: Specifies the forced Action to be set to the output waveform. 00898 * This parameter can be one of the following values: 00899 * @arg TIM5_ForcedAction_Active: Output Reference is forced low 00900 * @arg TIM5_ForcedAction_Inactive: Output Reference is forced high 00901 * @retval None 00902 */ 00903 void TIM5_ForcedOC2Config(TIM5_ForcedAction_TypeDef TIM5_ForcedAction) 00904 { 00905 uint8_t tmpccmr2 = 0; 00906 00907 /* Check the parameters */ 00908 assert_param(IS_TIM5_FORCED_ACTION(TIM5_ForcedAction)); 00909 00910 tmpccmr2 = TIM5->CCMR2; 00911 00912 /* Reset the OCM Bits */ 00913 tmpccmr2 &= (uint8_t)(~TIM_CCMR_OCM); 00914 00915 /* Configure The Forced output Mode */ 00916 tmpccmr2 |= (uint8_t)TIM5_ForcedAction; 00917 00918 TIM5->CCMR2 = tmpccmr2; 00919 } 00920 00921 /** 00922 * @brief Enables or disables the TIM5 peripheral Preload Register on CCR1. 00923 * @param NewState: The new state of the Capture Compare Preload register. 00924 * This parameter can be ENABLE or DISABLE 00925 * @retval None 00926 */ 00927 void TIM5_OC1PreloadConfig(FunctionalState NewState) 00928 { 00929 /* Check the parameters */ 00930 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00931 00932 /* Set or Reset the OC1PE Bit */ 00933 if (NewState != DISABLE) 00934 { 00935 TIM5->CCMR1 |= TIM_CCMR_OCxPE ; 00936 } 00937 else 00938 { 00939 TIM5->CCMR1 &= (uint8_t)(~TIM_CCMR_OCxPE) ; 00940 } 00941 } 00942 00943 /** 00944 * @brief Enables or disables the TIM5 peripheral Preload Register on CCR2. 00945 * @param NewState: The new state of the Capture Compare Preload register. 00946 * This parameter can be ENABLE or DISABLE 00947 * @retval None 00948 */ 00949 void TIM5_OC2PreloadConfig(FunctionalState NewState) 00950 { 00951 /* Check the parameters */ 00952 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00953 00954 /* Set or Reset the OC2PE Bit */ 00955 if (NewState != DISABLE) 00956 { 00957 TIM5->CCMR2 |= TIM_CCMR_OCxPE ; 00958 } 00959 else 00960 { 00961 TIM5->CCMR2 &= (uint8_t)(~TIM_CCMR_OCxPE) ; 00962 } 00963 } 00964 00965 /** 00966 * @brief Configures the TIM5 Capture Compare 1 Fast feature. 00967 * @param NewState: The new state of the Output Compare Fast Enable bit. 00968 * This parameter can be ENABLE or DISABLE 00969 * @retval None 00970 */ 00971 void TIM5_OC1FastConfig(FunctionalState NewState) 00972 { 00973 /* Check the parameters */ 00974 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00975 00976 /* Set or Reset the OC1FE Bit */ 00977 if (NewState != DISABLE) 00978 { 00979 TIM5->CCMR1 |= TIM_CCMR_OCxFE ; 00980 } 00981 else 00982 { 00983 TIM5->CCMR1 &= (uint8_t)(~TIM_CCMR_OCxFE) ; 00984 } 00985 } 00986 00987 /** 00988 * @brief Configures the TIM5 Capture Compare 2 Fast feature. 00989 * @param NewState: The new state of the Output Compare Fast Enable bit. 00990 * This parameter can be ENABLE or DISABLE 00991 * @retval None 00992 */ 00993 00994 void TIM5_OC2FastConfig(FunctionalState NewState) 00995 { 00996 /* Check the parameters */ 00997 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00998 00999 /* Set or Reset the OC2FE Bit */ 01000 if (NewState != DISABLE) 01001 { 01002 TIM5->CCMR2 |= TIM_CCMR_OCxFE ; 01003 } 01004 else 01005 { 01006 TIM5->CCMR2 &= (uint8_t)(~TIM_CCMR_OCxFE) ; 01007 } 01008 } 01009 01010 /** 01011 * @brief Configures the TIM5 Channel 1 polarity. 01012 * @param TIM5_OCPolarity: Specifies the OC1 Polarity. 01013 * This parameter can be one of the following values: 01014 * @arg TIM5_OCPolarity_High: Output compare polarity = High 01015 * @arg TIM5_OCPolarity_Low: Output compare polarity = Low 01016 * @retval None 01017 */ 01018 void TIM5_OC1PolarityConfig(TIM5_OCPolarity_TypeDef TIM5_OCPolarity) 01019 { 01020 /* Check the parameters */ 01021 assert_param(IS_TIM5_OC_POLARITY(TIM5_OCPolarity)); 01022 01023 /* Set or Reset the CC1P Bit */ 01024 if (TIM5_OCPolarity == TIM5_OCPolarity_Low) 01025 { 01026 TIM5->CCER1 |= TIM_CCER1_CC1P ; 01027 } 01028 else 01029 { 01030 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1P) ; 01031 } 01032 } 01033 01034 /** 01035 * @brief Configures the TIM5 Channel 2 polarity. 01036 * @param TIM5_OCPolarity: Specifies the OC2 Polarity. 01037 * This parameter can be one of the following values: 01038 * @arg TIM5_OCPolarity_High: Output compare polarity = High 01039 * @arg TIM5_OCPolarity_Low: Output compare polarity = Low 01040 * @retval None 01041 */ 01042 void TIM5_OC2PolarityConfig(TIM5_OCPolarity_TypeDef TIM5_OCPolarity) 01043 { 01044 /* Check the parameters */ 01045 assert_param(IS_TIM5_OC_POLARITY(TIM5_OCPolarity)); 01046 01047 /* Set or Reset the CC2P Bit */ 01048 if (TIM5_OCPolarity == TIM5_OCPolarity_Low) 01049 { 01050 TIM5->CCER1 |= TIM_CCER1_CC2P ; 01051 } 01052 else 01053 { 01054 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2P) ; 01055 } 01056 } 01057 01058 /** 01059 * @brief Enables or disables the TIM5 Capture Compare Channel x. 01060 * @param TIM5_Channel: Specifies the TIM5 Channel. 01061 * This parameter can be one of the following values: 01062 * @arg TIM5_Channel_1: Channel 1 01063 * @arg TIM5_Channel_2: Channel 2 01064 * @param NewState: Specifies the TIM5 Channel CCxE bit new state. 01065 * This parameter can be ENABLE or DISABLE 01066 * @retval None 01067 */ 01068 void TIM5_CCxCmd(TIM5_Channel_TypeDef TIM5_Channel, 01069 FunctionalState NewState) 01070 { 01071 /* Check the parameters */ 01072 assert_param(IS_TIM5_CHANNEL(TIM5_Channel)); 01073 assert_param(IS_FUNCTIONAL_STATE(NewState)); 01074 01075 if (TIM5_Channel == TIM5_Channel_1) 01076 { 01077 /* Set or Reset the CC1E Bit */ 01078 if (NewState != DISABLE) 01079 { 01080 TIM5->CCER1 |= TIM_CCER1_CC1E ; 01081 } 01082 else 01083 { 01084 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1E) ; 01085 } 01086 01087 } 01088 else /* if (TIM5_Channel == TIM5_Channel_2) */ 01089 { 01090 /* Set or Reset the CC2E Bit */ 01091 if (NewState != DISABLE) 01092 { 01093 TIM5->CCER1 |= TIM_CCER1_CC2E; 01094 } 01095 else 01096 { 01097 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2E) ; 01098 } 01099 } 01100 } 01101 01102 /** @defgroup TIM5_Group3 Input Capture management functions 01103 * @brief Input Capture management functions 01104 * 01105 @verbatim 01106 =============================================================================== 01107 Input Capture management functions 01108 =============================================================================== 01109 01110 =================================================================== 01111 TIM5 Driver: how to use it in Input Capture Mode 01112 =================================================================== 01113 To use the Timer in Input Capture mode, the following steps are mandatory: 01114 01115 1. Enable TIM5 clock using CLK_PeripheralClockConfig(CLK_Peripheral_TIM5, ENABLE) function. 01116 01117 2. Configure the TIM5 pins in input mode by configuring the corresponding GPIO pins 01118 01119 3. Configure the Time base unit as described in the first part of this driver, if needed, 01120 otherwise the Timer will run with the default configuration: 01121 - Autoreload value = 0xFFFF 01122 - Prescaler value = 0x0 01123 - Counter mode = Up counting 01124 01125 4. Call TIM5_ICInit() to configure the desired channel to measure only 01126 frequency or duty cycle of the input signal using the corresponding configuration: 01127 - TIM5 Channel: TIM5_Channel 01128 - TIM5 Input Capture polarity: TIM5_ICPolarity 01129 - TIM5 Input Capture selection: TIM5_ICSelection 01130 - TIM5 Input Capture Prescaler: TIM5_ICPSC 01131 - TIM5 Input Capture filter value 01132 or, 01133 Call TIM5_PWMIConfig() to configure the desired channels with the 01134 corresponding configuration and to measure the frequency and the duty 01135 cycle of the input signal. 01136 01137 5. Enable global interrupts or the DMA to read the measured frequency. 01138 01139 6. Enable the corresponding interrupt (or DMA request) to read the captured value, 01140 using the function TIM5_ITConfig(TIM5_IT_CCx) (or TIM5_DMACmd(TIM5_DMASource_CCx)) 01141 01142 7. Call the TIM5_Cmd(ENABLE) function to enable the TIM5 counter. 01143 01144 8. Use TIM5_GetCapturex() to read the captured value corresponding to 01145 channel x. 01146 01147 Note1: All other functions can be used separately to modify, if needed, 01148 a specific feature of the Timer. 01149 01150 @endverbatim 01151 * @{ 01152 */ 01153 01154 /** 01155 * @brief Initializes the TIM5 peripheral according to the specified parameters. 01156 * @param TIM5_Channel: TIM5 Channel 01157 * This parameter can be one of the following values: 01158 * @arg TIM5_Channel_1: Channel 1 01159 * @arg TIM5_Channel_2: Channel 2 01160 * @param TIM5_ICPolarity: Input Capture Polarity 01161 * This parameter can be one of the following values: 01162 * @arg TIM5_ICPolarity_Rising: Input Capture on Rising Edge 01163 * @arg TIM5_ICPolarity_Falling: Input Capture on Falling Edge 01164 * @param TIM5_ICSelection: Input Capture Selection 01165 * This parameter can be one of the following values: 01166 * @arg TIM5_ICSelection_DirectTI: Input Capture mapped on the direct input 01167 * @arg TIM5_ICSelection_IndirectTI: Input Capture mapped on the indirect input 01168 * @arg TIM5_ICSelection_TRGI: Input Capture mapped on the Trigger Input 01169 * @param TIM5_ICPrescaler: Input Capture Prescaler 01170 * This parameter can be one of the following values: 01171 * @arg TIM5_ICPSC_DIV1: Input Capture Prescaler = 1 (one capture every 1 event) 01172 * @arg TIM5_ICPSC_DIV2: Input Capture Prescaler = 2 (one capture every 2 events) 01173 * @arg TIM5_ICPSC_DIV4: Input Capture Prescaler = 4 (one capture every 4 events) 01174 * @arg TIM5_ICPSC_DIV8: Input Capture Prescaler = 8 (one capture every 8 events) 01175 * @param TIM5_ICFilter: This parameter must be a value between 0x00 and 0x0F. 01176 * @retval None 01177 */ 01178 void TIM5_ICInit(TIM5_Channel_TypeDef TIM5_Channel, 01179 TIM5_ICPolarity_TypeDef TIM5_ICPolarity, 01180 TIM5_ICSelection_TypeDef TIM5_ICSelection, 01181 TIM5_ICPSC_TypeDef TIM5_ICPrescaler, 01182 uint8_t TIM5_ICFilter) 01183 { 01184 /* Check the parameters */ 01185 assert_param(IS_TIM5_CHANNEL(TIM5_Channel)); 01186 01187 if (TIM5_Channel == TIM5_Channel_1) 01188 { 01189 /* TI1 Configuration */ 01190 TI1_Config(TIM5_ICPolarity, TIM5_ICSelection, TIM5_ICFilter); 01191 01192 /* Set the Input Capture Prescaler value */ 01193 TIM5_SetIC1Prescaler(TIM5_ICPrescaler); 01194 } 01195 else /* if (TIM5_Channel == TIM5_Channel_2) */ 01196 { 01197 /* TI2 Configuration */ 01198 TI2_Config(TIM5_ICPolarity, TIM5_ICSelection, TIM5_ICFilter); 01199 01200 /* Set the Input Capture Prescaler value */ 01201 TIM5_SetIC2Prescaler(TIM5_ICPrescaler); 01202 } 01203 } 01204 01205 /** 01206 * @brief Configures the TIM5 peripheral in PWM Input Mode according to the 01207 * specified parameters. 01208 * @param TIM5_Channel: TIM5 Channel 01209 * This parameter can be one of the following values: 01210 * @arg TIM5_Channel_1: Channel 1 01211 * @arg TIM5_Channel_2: Channel 2 01212 * @param TIM5_ICPolarity: Input Capture Polarity 01213 * This parameter can be one of the following values: 01214 * @arg TIM5_ICPolarity_Rising: Input Capture on Rising Edge 01215 * @arg TIM5_ICPolarity_Falling: Input Capture on Falling Edge 01216 * @param TIM5_ICSelection: Input Capture Selection 01217 * This parameter can be one of the following values: 01218 * @arg TIM5_ICSelection_DirectTI: Input Capture mapped on the direct input 01219 * @arg TIM5_ICSelection_IndirectTI: Input Capture mapped on the indirect input 01220 * @arg TIM5_ICSelection_TRGI: Input Capture mapped on the Trigger Input 01221 * @param TIM5_ICPrescaler: Input Capture Prescaler 01222 * This parameter can be one of the following values: 01223 * @arg TIM5_ICPSC_DIV1: Input Capture Prescaler = 1 (one capture every 1 event) 01224 * @arg TIM5_ICPSC_DIV2: Input Capture Prescaler = 2 (one capture every 2 events) 01225 * @arg TIM5_ICPSC_DIV4: Input Capture Prescaler = 4 (one capture every 4 events) 01226 * @arg TIM5_ICPSC_DIV8: Input Capture Prescaler = 8 (one capture every 8 events) 01227 * @retval None 01228 */ 01229 void TIM5_PWMIConfig(TIM5_Channel_TypeDef TIM5_Channel, 01230 TIM5_ICPolarity_TypeDef TIM5_ICPolarity, 01231 TIM5_ICSelection_TypeDef TIM5_ICSelection, 01232 TIM5_ICPSC_TypeDef TIM5_ICPrescaler, 01233 uint8_t TIM5_ICFilter) 01234 { 01235 uint8_t icpolarity = TIM5_ICPolarity_Rising; 01236 uint8_t icselection = TIM5_ICSelection_DirectTI; 01237 01238 /* Check the parameters */ 01239 assert_param(IS_TIM5_CHANNEL(TIM5_Channel)); 01240 01241 /* Select the Opposite Input Polarity */ 01242 if (TIM5_ICPolarity == TIM5_ICPolarity_Rising) 01243 { 01244 icpolarity = TIM5_ICPolarity_Falling; 01245 } 01246 else 01247 { 01248 icpolarity = TIM5_ICPolarity_Rising; 01249 } 01250 01251 /* Select the Opposite Input */ 01252 if (TIM5_ICSelection == TIM5_ICSelection_DirectTI) 01253 { 01254 icselection = TIM5_ICSelection_IndirectTI; 01255 } 01256 else 01257 { 01258 icselection = TIM5_ICSelection_DirectTI; 01259 } 01260 01261 if (TIM5_Channel == TIM5_Channel_1) 01262 { 01263 /* TI1 Configuration */ 01264 TI1_Config(TIM5_ICPolarity, TIM5_ICSelection, 01265 TIM5_ICFilter); 01266 01267 /* Set the Input Capture Prescaler value */ 01268 TIM5_SetIC1Prescaler(TIM5_ICPrescaler); 01269 01270 /* TI2 Configuration */ 01271 TI2_Config((TIM5_ICPolarity_TypeDef)icpolarity, (TIM5_ICSelection_TypeDef)icselection, TIM5_ICFilter); 01272 01273 /* Set the Input Capture Prescaler value */ 01274 TIM5_SetIC2Prescaler(TIM5_ICPrescaler); 01275 } 01276 else 01277 { 01278 /* TI2 Configuration */ 01279 TI2_Config(TIM5_ICPolarity, TIM5_ICSelection, 01280 TIM5_ICFilter); 01281 01282 /* Set the Input Capture Prescaler value */ 01283 TIM5_SetIC2Prescaler(TIM5_ICPrescaler); 01284 01285 /* TI1 Configuration */ 01286 TI1_Config((TIM5_ICPolarity_TypeDef)icpolarity, (TIM5_ICSelection_TypeDef)icselection, TIM5_ICFilter); 01287 01288 /* Set the Input Capture Prescaler value */ 01289 TIM5_SetIC1Prescaler(TIM5_ICPrescaler); 01290 } 01291 } 01292 01293 /** 01294 * @brief Gets the TIM5 Input Capture 1 value. 01295 * @param None 01296 * @retval Capture Compare 1 Register value. 01297 */ 01298 uint16_t TIM5_GetCapture1(void) 01299 { 01300 uint16_t tmpccr1 = 0; 01301 uint8_t tmpccr1l, tmpccr1h; 01302 01303 tmpccr1h = TIM5->CCR1H; 01304 tmpccr1l = TIM5->CCR1L; 01305 01306 tmpccr1 = (uint16_t)(tmpccr1l); 01307 tmpccr1 |= (uint16_t)((uint16_t)tmpccr1h << 8); 01308 /* Get the Capture 1 Register value */ 01309 return ((uint16_t)tmpccr1); 01310 } 01311 01312 /** 01313 * @brief Gets the TIM5 Input Capture 2 value. 01314 * @param None 01315 * @retval Capture Compare 2 Register value. 01316 */ 01317 uint16_t TIM5_GetCapture2(void) 01318 { 01319 uint16_t tmpccr2 = 0; 01320 uint8_t tmpccr2l, tmpccr2h; 01321 01322 tmpccr2h = TIM5->CCR2H; 01323 tmpccr2l = TIM5->CCR2L; 01324 01325 tmpccr2 = (uint16_t)(tmpccr2l); 01326 tmpccr2 |= (uint16_t)((uint16_t)tmpccr2h << 8); 01327 /* Get the Capture 2 Register value */ 01328 return ((uint16_t)tmpccr2); 01329 } 01330 01331 /** 01332 * @brief Sets the TIM5 Input Capture 1 prescaler. 01333 * @param TIM5_IC1Prescaler: Specifies the Input Capture prescaler new value 01334 * This parameter can be one of the following values: 01335 * @arg TIM5_ICPSC_DIV1: Input Capture Prescaler = 1 (one capture every 1 event) 01336 * @arg TIM5_ICPSC_DIV2: Input Capture Prescaler = 2 (one capture every 2 events) 01337 * @arg TIM5_ICPSC_DIV4: Input Capture Prescaler = 4 (one capture every 4 events) 01338 * @arg TIM5_ICPSC_DIV8: Input Capture Prescaler = 8 (one capture every 8 events) 01339 * @retval None 01340 */ 01341 void TIM5_SetIC1Prescaler(TIM5_ICPSC_TypeDef TIM5_IC1Prescaler) 01342 { 01343 uint8_t tmpccmr1 = 0; 01344 01345 /* Check the parameters */ 01346 assert_param(IS_TIM5_IC_PRESCALER(TIM5_IC1Prescaler)); 01347 01348 tmpccmr1 = TIM5->CCMR1; 01349 01350 /* Reset the IC1PSC Bits */ 01351 tmpccmr1 &= (uint8_t)(~TIM_CCMR_ICxPSC); 01352 01353 /* Set the IC1PSC value */ 01354 tmpccmr1 |= (uint8_t)TIM5_IC1Prescaler; 01355 01356 TIM5->CCMR1 = tmpccmr1; 01357 } 01358 01359 /** 01360 * @brief Sets the TIM5 Input Capture 2 prescaler. 01361 * @param TIM5_IC2Prescaler: Specifies the Input Capture prescaler new value 01362 * This parameter can be one of the following values: 01363 * @arg TIM5_ICPSC_DIV1: Input Capture Prescaler = 1 (one capture every 1 event) 01364 * @arg TIM5_ICPSC_DIV2: Input Capture Prescaler = 2 (one capture every 2 events) 01365 * @arg TIM5_ICPSC_DIV4: Input Capture Prescaler = 4 (one capture every 4 events) 01366 * @arg TIM5_ICPSC_DIV8: Input Capture Prescaler = 8 (one capture every 8 events) 01367 * @retval None 01368 */ 01369 void TIM5_SetIC2Prescaler(TIM5_ICPSC_TypeDef TIM5_IC2Prescaler) 01370 { 01371 uint8_t tmpccmr2 = 0; 01372 01373 /* Check the parameters */ 01374 assert_param(IS_TIM5_IC_PRESCALER(TIM5_IC2Prescaler)); 01375 01376 tmpccmr2 = TIM5->CCMR2; 01377 01378 /* Reset the IC2PSC Bits */ 01379 tmpccmr2 &= (uint8_t)(~TIM_CCMR_ICxPSC); 01380 01381 /* Set the IC2PSC value */ 01382 tmpccmr2 |= (uint8_t)TIM5_IC2Prescaler; 01383 01384 TIM5->CCMR2 = tmpccmr2; 01385 } 01386 01387 /** 01388 * @} 01389 */ 01390 01391 /** @defgroup TIM5_Group4 Interrupts DMA and flags management functions 01392 * @brief Interrupts, DMA and flags management functions 01393 * 01394 @verbatim 01395 =============================================================================== 01396 Interrupts, DMA and flags management functions 01397 =============================================================================== 01398 01399 @endverbatim 01400 * @{ 01401 */ 01402 01403 /** 01404 * @brief Enables or disables the specified TIM5 interrupts. 01405 * @param TIM5_IT: Specifies the TIM5 interrupts sources to be enabled or disabled. 01406 * This parameter can be any combination of the following values: 01407 * @arg TIM5_IT_Update: Update 01408 * @arg TIM5_IT_CC1: Capture Compare Channel1 01409 * @arg TIM5_IT_CC2: Capture Compare Channel2 01410 * @arg TIM5_IT_Trigger: Trigger 01411 * @arg TIM5_IT_Break: Break 01412 * @param NewState: The new state of the TIM5 peripheral. 01413 * This parameter can be ENABLE or DISABLE 01414 * @retval None 01415 */ 01416 void TIM5_ITConfig(TIM5_IT_TypeDef TIM5_IT, FunctionalState NewState) 01417 { 01418 /* Check the parameters */ 01419 assert_param(IS_TIM5_IT(TIM5_IT)); 01420 assert_param(IS_FUNCTIONAL_STATE(NewState)); 01421 01422 if (NewState != DISABLE) 01423 { 01424 /* Enable the Interrupt sources */ 01425 TIM5->IER |= (uint8_t)TIM5_IT; 01426 } 01427 else 01428 { 01429 /* Disable the Interrupt sources */ 01430 TIM5->IER &= (uint8_t)(~(uint8_t)TIM5_IT); 01431 } 01432 } 01433 01434 /** 01435 * @brief Configures the TIM5 event to be generated by software. 01436 * @param TIM5_EventSource: Specifies the event source. 01437 * This parameter can be any combination of the following values: 01438 * @arg TIM5_EventSource_Update: Update 01439 * @arg TIM5_EventSource_CC1: Capture Compare Channel1 01440 * @arg TIM5_EventSource_CC2: Capture Compare Channel2 01441 * @arg TIM5_EventSource_Trigger: Trigger 01442 * @arg TIM5_EventSource_Break: Break 01443 * @retval None 01444 */ 01445 void TIM5_GenerateEvent(TIM5_EventSource_TypeDef TIM5_EventSource) 01446 { 01447 /* Check the parameters */ 01448 assert_param(IS_TIM5_EVENT_SOURCE((uint8_t)TIM5_EventSource)); 01449 01450 /* Set the event sources */ 01451 TIM5->EGR |= (uint8_t)TIM5_EventSource; 01452 } 01453 01454 /** 01455 * @brief Checks whether the specified TIM5 flag is set or not. 01456 * @param TIM5_FLAG: Specifies the flag to check. 01457 * This parameter can be any combination of the following values: 01458 * @arg TIM5_FLAG_Update: Update 01459 * @arg TIM5_FLAG_CC1: Capture Compare Channel1 01460 * @arg TIM5_FLAG_CC2: Capture Compare Channel2 01461 * @arg TIM5_FLAG_Trigger: Trigger 01462 * @arg TIM5_FLAG_Break: Break 01463 * @arg TIM5_FLAG_CC1OF: Capture compare 1 over capture 01464 * @arg TIM5_FLAG_CC2OF: Capture compare 2 over capture 01465 * @retval FlagStatus: The new state of TIM5_FLAG (SET or RESET) 01466 */ 01467 FlagStatus TIM5_GetFlagStatus(TIM5_FLAG_TypeDef TIM5_FLAG) 01468 { 01469 FlagStatus bitstatus = RESET; 01470 uint8_t tim5_flag_l = 0, tim5_flag_h = 0; 01471 01472 /* Check the parameters */ 01473 assert_param(IS_TIM5_GET_FLAG(TIM5_FLAG)); 01474 01475 tim5_flag_l = (uint8_t)(TIM5->SR1 & (uint8_t)(TIM5_FLAG)); 01476 tim5_flag_h = (uint8_t)(TIM5->SR2 & (uint8_t)((uint16_t)TIM5_FLAG >> 8)); 01477 01478 if ((uint8_t)(tim5_flag_l | tim5_flag_h) != 0) 01479 { 01480 bitstatus = SET; 01481 } 01482 else 01483 { 01484 bitstatus = RESET; 01485 } 01486 return ((FlagStatus)bitstatus); 01487 } 01488 01489 /** 01490 * @brief Clears the TIM�s pending flags. 01491 * @param TIM5_FLAG: Specifies the flag to clear. 01492 * This parameter can be any combination of the following values: 01493 * @arg TIM5_FLAG_Update: Update 01494 * @arg TIM5_FLAG_CC1: Capture Compare Channel1 01495 * @arg TIM5_FLAG_CC2: Capture Compare Channel2 01496 * @arg TIM5_FLAG_Trigger: Trigger 01497 * @arg TIM5_FLAG_Break: Break 01498 * @retval None 01499 */ 01500 void TIM5_ClearFlag(TIM5_FLAG_TypeDef TIM5_FLAG) 01501 { 01502 /* Check the parameters */ 01503 assert_param(IS_TIM5_CLEAR_FLAG((uint16_t)TIM5_FLAG)); 01504 /* Clear the flags (rc_w0) clear this bit by writing 0. Writing �1� has no effect*/ 01505 TIM5->SR1 = (uint8_t)(~(uint8_t)(TIM5_FLAG)); 01506 TIM5->SR2 = (uint8_t)(~(uint8_t)((uint16_t)TIM5_FLAG >> 8)); 01507 } 01508 01509 /** 01510 * @brief Checks whether the TIM5 interrupt has occurred or not. 01511 * @param TIM5_IT: Specifies the TIM5 interrupt source to check. 01512 * This parameter can be any combination of the following values: 01513 * @arg TIM5_IT_Update: Update 01514 * @arg TIM5_IT_CC1: Capture Compare Channel1 01515 * @arg TIM5_IT_CC2: Capture Compare Channel2 01516 * @arg TIM5_IT_Trigger: Trigger 01517 * @arg TIM5_IT_Break: Break 01518 * @retval ITStatus: The new state of the TIM5_IT (SET or RESET) 01519 */ 01520 ITStatus TIM5_GetITStatus(TIM5_IT_TypeDef TIM5_IT) 01521 { 01522 ITStatus bitstatus = RESET; 01523 01524 uint8_t TIM5_itStatus = 0x0, TIM5_itEnable = 0x0; 01525 01526 /* Check the parameters */ 01527 assert_param(IS_TIM5_GET_IT(TIM5_IT)); 01528 01529 TIM5_itStatus = (uint8_t)(TIM5->SR1 & (uint8_t)TIM5_IT); 01530 01531 TIM5_itEnable = (uint8_t)(TIM5->IER & (uint8_t)TIM5_IT); 01532 01533 if ((TIM5_itStatus != (uint8_t)RESET ) && (TIM5_itEnable != (uint8_t)RESET)) 01534 { 01535 bitstatus = (ITStatus)SET; 01536 } 01537 else 01538 { 01539 bitstatus = (ITStatus)RESET; 01540 } 01541 return ((ITStatus)bitstatus); 01542 } 01543 01544 /** 01545 * @brief Clears the TIM's interrupt pending bits. 01546 * @param TIM5_IT: Specifies the pending bit to clear. 01547 * This parameter can be any combination of the following values: 01548 * @arg TIM5_IT_Update: Update 01549 * @arg TIM5_IT_CC1: Capture Compare Channel1 01550 * @arg TIM5_IT_CC2: Capture Compare Channel2 01551 * @arg TIM5_IT_Trigger: Trigger 01552 * @arg TIM5_IT_Break: Break 01553 * @retval None 01554 */ 01555 void TIM5_ClearITPendingBit(TIM5_IT_TypeDef TIM5_IT) 01556 { 01557 /* Check the parameters */ 01558 assert_param(IS_TIM5_IT(TIM5_IT)); 01559 01560 /* Clear the IT pending Bit */ 01561 TIM5->SR1 = (uint8_t)(~(uint8_t)TIM5_IT); 01562 } 01563 01564 /** 01565 * @brief Enables or disables the TIM5 DMA Requests. 01566 * @param TIM5_DMASource: specifies the DMA Request sources. 01567 * This parameter can be any combination of the following values: 01568 * @arg TIM5_DMASource_Update: TIM5 DMA Update Request 01569 * @arg TIM5_DMASource_CC1: TIM5 DMA CC1 Request 01570 * @arg TIM5_DMASource_CC2: TIM5 DMA CC2 Request 01571 * @param NewState: new state of the DMA Request sources. 01572 * This parameter can be: ENABLE or DISABLE. 01573 * @retval None 01574 */ 01575 void TIM5_DMACmd( TIM5_DMASource_TypeDef TIM5_DMASource, FunctionalState NewState) 01576 { 01577 /* Check the parameters */ 01578 assert_param(IS_FUNCTIONAL_STATE(NewState)); 01579 assert_param(IS_TIM5_DMA_SOURCE(TIM5_DMASource)); 01580 01581 if (NewState != DISABLE) 01582 { 01583 /* Enable the DMA sources */ 01584 TIM5->DER |= TIM5_DMASource; 01585 } 01586 else 01587 { 01588 /* Disable the DMA sources */ 01589 TIM5->DER &= (uint8_t)(~TIM5_DMASource); 01590 } 01591 } 01592 01593 /** 01594 * @brief Selects the TIM5 peripheral Capture Compare DMA source. 01595 * @param NewState: new state of the Capture Compare DMA source. 01596 * This parameter can be: ENABLE or DISABLE. 01597 * @retval None 01598 */ 01599 void TIM5_SelectCCDMA(FunctionalState NewState) 01600 { 01601 /* Check the parameters */ 01602 assert_param(IS_FUNCTIONAL_STATE(NewState)); 01603 01604 if (NewState != DISABLE) 01605 { 01606 /* Set the CCDS Bit */ 01607 TIM5->CR2 |= TIM_CR2_CCDS; 01608 } 01609 else 01610 { 01611 /* Reset the CCDS Bit */ 01612 TIM5->CR2 &= (uint8_t)(~TIM_CR2_CCDS); 01613 } 01614 } 01615 01616 /** 01617 * @} 01618 */ 01619 01620 /** @defgroup TIM5_Group5 Clocks management functions 01621 * @brief Clocks management functions 01622 * 01623 @verbatim 01624 =============================================================================== 01625 Clocks management functions 01626 =============================================================================== 01627 01628 @endverbatim 01629 * @{ 01630 */ 01631 01632 /** 01633 * @brief Enables the TIM5 internal Clock. 01634 * @par Parameters: 01635 * None 01636 * @retval None 01637 */ 01638 void TIM5_InternalClockConfig(void) 01639 { 01640 /* Disable slave mode to clock the prescaler directly with the internal clock */ 01641 TIM5->SMCR &= (uint8_t)(~TIM_SMCR_SMS); 01642 } 01643 01644 /** 01645 * @brief Configures the TIM5 Trigger as External Clock. 01646 * @param TIM5_TIxExternalCLKSource: Specifies Trigger source. 01647 * This parameter can be one of the following values: 01648 * @arg TIM5_TIxExternalCLK1Source_TI1ED: External Clock mode 1 source = TI1ED 01649 * @arg TIM5_TIxExternalCLK1Source_TI1: External Clock mode 1 source = TI1 01650 * @arg TIM5_TIxExternalCLK1Source_TI2: External Clock mode 1 source = TI2 01651 * @param TIM5_ICPolarity: Specifies the TIx Polarity. 01652 * This parameter can be one of the following values: 01653 * @arg TIM5_ICPolarity_Rising: Input Capture on Rising Edge 01654 * @arg TIM5_ICPolarity_Falling: Input Capture on Falling Edge 01655 * @param ICFilter: Specifies the filter value. 01656 * This parameter must be a value between 0x00 and 0x0F 01657 * @retval None 01658 */ 01659 void TIM5_TIxExternalClockConfig(TIM5_TIxExternalCLK1Source_TypeDef TIM5_TIxExternalCLKSource, 01660 TIM5_ICPolarity_TypeDef TIM5_ICPolarity, 01661 uint8_t ICFilter) 01662 { 01663 /* Check the parameters */ 01664 assert_param(IS_TIM5_TIXCLK_SOURCE(TIM5_TIxExternalCLKSource)); 01665 assert_param(IS_TIM5_IC_POLARITY(TIM5_ICPolarity)); 01666 assert_param(IS_TIM5_IC_FILTER(ICFilter)); 01667 01668 /* Configure the TIM5 Input Clock Source */ 01669 if (TIM5_TIxExternalCLKSource == TIM5_TIxExternalCLK1Source_TI2) 01670 { 01671 TI2_Config(TIM5_ICPolarity, TIM5_ICSelection_DirectTI, ICFilter); 01672 } 01673 else 01674 { 01675 TI1_Config(TIM5_ICPolarity, TIM5_ICSelection_DirectTI, ICFilter); 01676 } 01677 01678 /* Select the Trigger source */ 01679 TIM5_SelectInputTrigger((TIM5_TRGSelection_TypeDef)TIM5_TIxExternalCLKSource); 01680 01681 /* Select the External clock mode1 */ 01682 TIM5->SMCR |= (uint8_t)(TIM5_SlaveMode_External1); 01683 } 01684 01685 /** 01686 * @brief Configures the TIM5 External clock Mode1. 01687 * @param TIM5_ExtTRGPrescaler: Specifies the external Trigger Prescaler. 01688 * This parameter can be one of the following values: 01689 * @arg TIM5_ExtTRGPSC_OFF: No External Trigger prescaler 01690 * @arg TIM5_ExtTRGPSC_DIV2: External Trigger prescaler = 2 (ETRP frequency divided by 2) 01691 * @arg TIM5_ExtTRGPSC_DIV4: External Trigger prescaler = 4 (ETRP frequency divided by 4) 01692 * @arg TIM5_ExtTRGPSC_DIV8: External Trigger prescaler = 8 (ETRP frequency divided by 8) 01693 * @param TIM5_ExtTRGPolarity: Specifies the external Trigger Polarity. 01694 * This parameter can be one of the following values: 01695 * @arg TIM5_ExtTRGPolarity_Inverted: External Trigger Polarity = inverted 01696 * @arg TIM5_ExtTRGPolarity_NonInverted: External Trigger Polarity = non inverted 01697 * @param ExtTRGFilter: Specifies the External Trigger Filter. 01698 * This parameter must be a value between 0x00 and 0x0F 01699 * @retval None 01700 */ 01701 void TIM5_ETRClockMode1Config(TIM5_ExtTRGPSC_TypeDef TIM5_ExtTRGPrescaler, 01702 TIM5_ExtTRGPolarity_TypeDef TIM5_ExtTRGPolarity, 01703 uint8_t ExtTRGFilter) 01704 { 01705 /* Configure the ETR Clock source */ 01706 TIM5_ETRConfig(TIM5_ExtTRGPrescaler, TIM5_ExtTRGPolarity, ExtTRGFilter); 01707 01708 /* Select the External clock mode1 */ 01709 TIM5->SMCR &= (uint8_t)(~TIM_SMCR_SMS); 01710 TIM5->SMCR |= (uint8_t)(TIM5_SlaveMode_External1); 01711 01712 /* Select the Trigger selection: ETRF */ 01713 TIM5->SMCR &= (uint8_t)(~TIM_SMCR_TS); 01714 TIM5->SMCR |= (uint8_t)((TIM5_TRGSelection_TypeDef)TIM5_TRGSelection_ETRF); 01715 } 01716 01717 /** 01718 * @brief Configures the TIM5 External clock Mode2. 01719 * @param TIM5_ExtTRGPrescaler: Specifies the external Trigger Prescaler. 01720 * This parameter can be one of the following values: 01721 * @arg TIM5_ExtTRGPSC_OFF: No External Trigger prescaler 01722 * @arg TIM5_ExtTRGPSC_DIV2: External Trigger prescaler = 2 (ETRP frequency divided by 2) 01723 * @arg TIM5_ExtTRGPSC_DIV4: External Trigger prescaler = 4 (ETRP frequency divided by 4) 01724 * @arg TIM5_ExtTRGPSC_DIV8: External Trigger prescaler = 8 (ETRP frequency divided by 8) 01725 * @param TIM5_ExtTRGPolarity: Specifies the external Trigger Polarity. 01726 * This parameter can be one of the following values: 01727 * @arg TIM5_ExtTRGPolarity_Inverted: External Trigger Polarity = inverted 01728 * @arg TIM5_ExtTRGPolarity_NonInverted: External Trigger Polarity = non inverted 01729 * @param ExtTRGFilter: Specifies the External Trigger Filter. 01730 * This parameter must be a value between 0x00 and 0x0F 01731 * @retval None 01732 */ 01733 void TIM5_ETRClockMode2Config(TIM5_ExtTRGPSC_TypeDef TIM5_ExtTRGPrescaler, 01734 TIM5_ExtTRGPolarity_TypeDef TIM5_ExtTRGPolarity, 01735 uint8_t ExtTRGFilter) 01736 { 01737 /* Configure the ETR Clock source */ 01738 TIM5_ETRConfig(TIM5_ExtTRGPrescaler, TIM5_ExtTRGPolarity, ExtTRGFilter); 01739 01740 /* Enable the External clock mode2 */ 01741 TIM5->ETR |= TIM_ETR_ECE ; 01742 } 01743 01744 /** 01745 * @} 01746 */ 01747 01748 /** @defgroup TIM5_Group6 Synchronization management functions 01749 * @brief Synchronization management functions 01750 * 01751 @verbatim 01752 =============================================================================== 01753 Synchronization management functions 01754 =============================================================================== 01755 01756 =================================================================== 01757 TIM5 Driver: how to use it in synchronization Mode 01758 =================================================================== 01759 Case of two/several Timers 01760 ************************** 01761 1. If TIM5 is used as master to other timers use the following functions: 01762 - TIM5_SelectOutputTrigger() 01763 - TIM5_SelectMasterSlaveMode() 01764 2. If TIM5 is used as slave to other timers use the following functions: 01765 - TIM5_SelectInputTrigger() 01766 - TIM5_SelectSlaveMode() 01767 01768 Case of Timers and external trigger (TRIG pin) 01769 ******************************************** 01770 1. Configure the External trigger using TIM5_ETRConfig() 01771 2. Configure the Slave Timer using the following functions: 01772 - TIM5_SelectInputTrigger() 01773 - TIM5_SelectSlaveMode() 01774 01775 @endverbatim 01776 * @{ 01777 */ 01778 01779 /** 01780 * @brief Selects the TIM5 Input Trigger source. 01781 * @param TIM5_InputTriggerSource: Specifies Input Trigger source. 01782 * This parameter can be one of the following values: 01783 * @arg TIM5_TRGSelection_TIM4: TRIG Input source = TIM TRIG Output 01784 * @arg TIM5_TRGSelection_TIM1: TRIG Input source = TIM TRIG Output 01785 * @arg TIM5_TRGSelection_TIM3: TRIG Input source = TIM TRIG Output 01786 * @arg TIM5_TRGSelection_TIM2: TRIG Input source = TIM TRIG Output 01787 * @arg TIM5_TRGSelection_TI1F_ED: TRIG Input source = TI1F_ED (TI1 Edge Detector) 01788 * @arg TIM5_TRGSelection_TI1FP1: TRIG Input source = TI1FP1 (Filtred Timer Input 1) 01789 * @arg TIM5_TRGSelection_TI2FP2: TRIG Input source = TI2FP2 (Filtred Timer Input 2) 01790 * @arg TIM5_TRGSelection_ETRF: TRIG Input source = ETRF (External Trigger Input ) 01791 * @retval None 01792 */ 01793 void TIM5_SelectInputTrigger(TIM5_TRGSelection_TypeDef TIM5_InputTriggerSource) 01794 { 01795 uint8_t tmpsmcr = 0; 01796 01797 /* Check the parameters */ 01798 assert_param(IS_TIM5_TRIGGER_SELECTION(TIM5_InputTriggerSource)); 01799 01800 tmpsmcr = TIM5->SMCR; 01801 01802 /* Select the Trigger Source */ 01803 tmpsmcr &= (uint8_t)(~TIM_SMCR_TS); 01804 tmpsmcr |= (uint8_t)TIM5_InputTriggerSource; 01805 01806 TIM5->SMCR = (uint8_t)tmpsmcr; 01807 } 01808 01809 /** 01810 * @brief Selects the TIM5 Trigger Output Mode. 01811 * @param TIM5_TRGOSource: Specifies the Trigger Output source. 01812 * This parameter can be one of the following values: 01813 * @arg TIM5_TRGOSource_Reset: Trigger Output source = Reset 01814 * @arg TIM5_TRGOSource_Enable: Trigger Output source = TIM5 is enabled 01815 * @arg TIM5_TRGOSource_Update: Trigger Output source = Update event 01816 * @arg TIM5_TRGOSource_OC1: Trigger Output source = output compare channel1 01817 * @arg TIM5_TRGOSource_OC1REF: Trigger Output source = output compare channel 1 reference 01818 * @arg TIM5_TRGOSource_OC2REF: Trigger Output source = output compare channel 2 reference 01819 * @retval None 01820 */ 01821 void TIM5_SelectOutputTrigger(TIM5_TRGOSource_TypeDef TIM5_TRGOSource) 01822 { 01823 uint8_t tmpcr2 = 0; 01824 01825 /* Check the parameters */ 01826 assert_param(IS_TIM5_TRGO_SOURCE(TIM5_TRGOSource)); 01827 01828 tmpcr2 = TIM5->CR2; 01829 01830 /* Reset the MMS Bits */ 01831 tmpcr2 &= (uint8_t)(~TIM_CR2_MMS); 01832 01833 /* Select the TRGO source */ 01834 tmpcr2 |= (uint8_t)TIM5_TRGOSource; 01835 01836 TIM5->CR2 = tmpcr2; 01837 } 01838 01839 /** 01840 * @brief Selects the TIM5 Slave Mode. 01841 * @param TIM5_SlaveMode: Specifies the TIM5 Slave Mode. 01842 * This parameter can be one of the following values: 01843 * @arg TIM5_SlaveMode_Reset: Slave Mode Selection = Reset 01844 * @arg TIM5_SlaveMode_Gated: Slave Mode Selection = Gated 01845 * @arg TIM5_SlaveMode_Trigger: Slave Mode Selection = Trigger 01846 * @arg TIM5_SlaveMode_External1: Slave Mode Selection = External 1 01847 * @retval None 01848 */ 01849 void TIM5_SelectSlaveMode(TIM5_SlaveMode_TypeDef TIM5_SlaveMode) 01850 { 01851 uint8_t tmpsmcr = 0; 01852 01853 /* Check the parameters */ 01854 assert_param(IS_TIM5_SLAVE_MODE(TIM5_SlaveMode)); 01855 01856 tmpsmcr = TIM5->SMCR; 01857 01858 /* Reset the SMS Bits */ 01859 tmpsmcr &= (uint8_t)(~TIM_SMCR_SMS); 01860 01861 /* Select the Slave Mode */ 01862 tmpsmcr |= (uint8_t)TIM5_SlaveMode; 01863 01864 TIM5->SMCR = tmpsmcr; 01865 } 01866 01867 /** 01868 * @brief Sets or Resets the TIM5 Master/Slave Mode. 01869 * @param NewState: The new state of the synchronization between TIM5 and its slaves (through TRGO). 01870 * This parameter can be ENABLE or DISABLE 01871 * @retval None 01872 */ 01873 void TIM5_SelectMasterSlaveMode(FunctionalState NewState) 01874 { 01875 /* Check the parameters */ 01876 assert_param(IS_FUNCTIONAL_STATE(NewState)); 01877 01878 /* Set or Reset the MSM Bit */ 01879 if (NewState != DISABLE) 01880 { 01881 TIM5->SMCR |= TIM_SMCR_MSM; 01882 } 01883 else 01884 { 01885 TIM5->SMCR &= (uint8_t)(~TIM_SMCR_MSM); 01886 } 01887 } 01888 01889 /** 01890 * @brief Configures the TIM5 External Trigger. 01891 * @param TIM5_ExtTRGPrescaler: Specifies the external Trigger Prescaler. 01892 * This parameter can be one of the following values: 01893 * @arg TIM5_ExtTRGPSC_OFF: No External Trigger prescaler 01894 * @arg TIM5_ExtTRGPSC_DIV2: External Trigger prescaler = 2 (ETRP frequency divided by 2) 01895 * @arg TIM5_ExtTRGPSC_DIV4: External Trigger prescaler = 4 (ETRP frequency divided by 4) 01896 * @arg TIM5_ExtTRGPSC_DIV8: External Trigger prescaler = 8 (ETRP frequency divided by 8) 01897 * @param TIM5_ExtTRGPolarity: Specifies the external Trigger Polarity. 01898 * This parameter can be one of the following values: 01899 * @arg TIM5_ExtTRGPolarity_Inverted: External Trigger Polarity = inverted 01900 * @arg TIM5_ExtTRGPolarity_NonInverted: External Trigger Polarity = non inverted 01901 * @param ExtTRGFilter: Specifies the External Trigger Filter. 01902 * This parameter must be a value between 0x00 and 0x0F 01903 * @retval None 01904 */ 01905 void TIM5_ETRConfig(TIM5_ExtTRGPSC_TypeDef TIM5_ExtTRGPrescaler, 01906 TIM5_ExtTRGPolarity_TypeDef TIM5_ExtTRGPolarity, 01907 uint8_t ExtTRGFilter) 01908 { 01909 /* Check the parameters */ 01910 assert_param(IS_TIM5_EXT_PRESCALER(TIM5_ExtTRGPrescaler)); 01911 assert_param(IS_TIM5_EXT_POLARITY(TIM5_ExtTRGPolarity)); 01912 assert_param(IS_TIM5_EXT_FILTER(ExtTRGFilter)); 01913 01914 /* Set the Prescaler, the Filter value and the Polarity */ 01915 TIM5->ETR |= (uint8_t)((uint8_t)((uint8_t)TIM5_ExtTRGPrescaler | (uint8_t)TIM5_ExtTRGPolarity) 01916 | (uint8_t)ExtTRGFilter); 01917 } 01918 01919 /** 01920 * @} 01921 */ 01922 01923 /** @defgroup TIM5_Group7 Specific interface management functions 01924 * @brief Specific interface management functions 01925 * 01926 @verbatim 01927 =============================================================================== 01928 Specific interface management functions 01929 =============================================================================== 01930 01931 @endverbatim 01932 * @{ 01933 */ 01934 01935 /** 01936 * @brief Configures the TIM5 Encoder Interface. 01937 * @param TIM5_EncoderMode: Specifies the TIM5 Encoder Mode. 01938 * This parameter can be one of the following values: 01939 * @arg TIM5_EncoderMode_TI1: Encoder mode 1 01940 * @arg TIM5_EncoderMode_TI2: Encoder mode 2 01941 * @arg TIM5_EncoderMode_TI12: Encoder mode 3 01942 * @param TIM5_IC1Polarity: Specifies the IC1 Polarity. 01943 * This parameter can be one of the following values: 01944 * @arg TIM5_ICPolarity_Rising: Input Capture on Rising Edge 01945 * @arg TIM5_ICPolarity_Falling: Input Capture on Falling Edge 01946 * @param TIM5_IC2Polarity: Specifies the IC2 Polarity. 01947 * This parameter can be one of the following values: 01948 * @arg TIM5_ICPolarity_Rising: Input Capture on Rising Edge 01949 * @arg TIM5_ICPolarity_Falling: Input Capture on Falling Edge 01950 * @retval None 01951 */ 01952 void TIM5_EncoderInterfaceConfig(TIM5_EncoderMode_TypeDef TIM5_EncoderMode, 01953 TIM5_ICPolarity_TypeDef TIM5_IC1Polarity, 01954 TIM5_ICPolarity_TypeDef TIM5_IC2Polarity) 01955 { 01956 uint8_t tmpsmcr = 0; 01957 uint8_t tmpccmr1 = 0; 01958 uint8_t tmpccmr2 = 0; 01959 01960 /* Check the parameters */ 01961 assert_param(IS_TIM5_ENCODER_MODE(TIM5_EncoderMode)); 01962 assert_param(IS_TIM5_IC_POLARITY(TIM5_IC1Polarity)); 01963 assert_param(IS_TIM5_IC_POLARITY(TIM5_IC2Polarity)); 01964 01965 tmpsmcr = TIM5->SMCR; 01966 tmpccmr1 = TIM5->CCMR1; 01967 tmpccmr2 = TIM5->CCMR2; 01968 01969 /* Set the encoder Mode */ 01970 tmpsmcr &= (uint8_t)(TIM_SMCR_MSM | TIM_SMCR_TS) ; 01971 tmpsmcr |= (uint8_t)TIM5_EncoderMode; 01972 01973 /* Select the Capture Compare 1 and the Capture Compare 2 as input */ 01974 tmpccmr1 &= (uint8_t)(~TIM_CCMR_CCxS); 01975 tmpccmr2 &= (uint8_t)(~TIM_CCMR_CCxS); 01976 tmpccmr1 |= TIM_CCMR_TIxDirect_Set; 01977 tmpccmr2 |= TIM_CCMR_TIxDirect_Set; 01978 01979 /* Set the TI1 and the TI2 Polarities */ 01980 if (TIM5_IC1Polarity == TIM5_ICPolarity_Falling) 01981 { 01982 TIM5->CCER1 |= TIM_CCER1_CC1P ; 01983 } 01984 else 01985 { 01986 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1P) ; 01987 } 01988 01989 if (TIM5_IC2Polarity == TIM5_ICPolarity_Falling) 01990 { 01991 TIM5->CCER1 |= TIM_CCER1_CC2P ; 01992 } 01993 else 01994 { 01995 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2P) ; 01996 } 01997 01998 TIM5->SMCR = tmpsmcr; 01999 TIM5->CCMR1 = tmpccmr1; 02000 TIM5->CCMR2 = tmpccmr2; 02001 } 02002 02003 /** 02004 * @brief Enables or Disables the TIM�s Hall sensor interface. 02005 * @param NewState: The new state of the TIM5 Hall sensor interface. 02006 * This parameter can be ENABLE or DISABLE 02007 * @retval None 02008 */ 02009 void TIM5_SelectHallSensor(FunctionalState NewState) 02010 { 02011 /* Check the parameters */ 02012 assert_param(IS_FUNCTIONAL_STATE(NewState)); 02013 02014 /* Set or Reset the TI1S Bit */ 02015 if (NewState != DISABLE) 02016 { 02017 TIM5->CR2 |= TIM_CR2_TI1S; 02018 } 02019 else 02020 { 02021 TIM5->CR2 &= (uint8_t)(~TIM_CR2_TI1S); 02022 } 02023 } 02024 02025 /** 02026 * @} 02027 */ 02028 02029 /** 02030 * @brief Configure the TI1 as Input. 02031 * @param TIM5_ICPolarity: Input Capture Polarity 02032 * This parameter can be one of the following values: 02033 * @arg TIM5_ICPolarity_Rising: Input Capture on Rising Edge 02034 * @arg TIM5_ICPolarity_Falling: Input Capture on Falling Edge 02035 * @param TIM5_ICSelection: Specifies the input to be used. 02036 * This parameter can be one of the following values: 02037 * @arg TIM5_ICSelection_DirectTI: Input Capture mapped on the direct input 02038 * @arg TIM5_ICSelection_IndirectTI: Input Capture mapped on the indirect input 02039 * @arg TIM5_ICSelection_TRGI: Input Capture mapped on the Trigger Input 02040 * @param TIM5_ICFilter: Specifies the Input Capture Filter. 02041 * This parameter must be a value between 0x00 and 0x0F. 02042 * @retval None 02043 */ 02044 static void TI1_Config(TIM5_ICPolarity_TypeDef TIM5_ICPolarity, \ 02045 TIM5_ICSelection_TypeDef TIM5_ICSelection, \ 02046 uint8_t TIM5_ICFilter) 02047 { 02048 uint8_t tmpccmr1 = 0; 02049 uint8_t tmpicpolarity = TIM5_ICPolarity; 02050 tmpccmr1 = TIM5->CCMR1; 02051 02052 /* Check the parameters */ 02053 assert_param(IS_TIM5_IC_POLARITY(TIM5_ICPolarity)); 02054 assert_param(IS_TIM5_IC_SELECTION(TIM5_ICSelection)); 02055 assert_param(IS_TIM5_IC_FILTER(TIM5_ICFilter)); 02056 02057 /* Disable the Channel 1: Reset the CCE Bit */ 02058 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1E); 02059 02060 /* Select the Input and set the filter */ 02061 tmpccmr1 &= (uint8_t)(~TIM_CCMR_CCxS) & (uint8_t)(~TIM_CCMR_ICxF); 02062 tmpccmr1 |= (uint8_t)(((uint8_t)(TIM5_ICSelection)) | ((uint8_t)(TIM5_ICFilter << 4))); 02063 02064 TIM5->CCMR1 = tmpccmr1; 02065 02066 /* Select the Polarity */ 02067 if (tmpicpolarity == (uint8_t)(TIM5_ICPolarity_Falling)) 02068 { 02069 TIM5->CCER1 |= TIM_CCER1_CC1P; 02070 } 02071 else 02072 { 02073 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC1P); 02074 } 02075 02076 /* Set the CCE Bit */ 02077 TIM5->CCER1 |= TIM_CCER1_CC1E; 02078 } 02079 02080 /** 02081 * @brief Configure the TI2 as Input. 02082 * @param TIM5_ICPolarity: Input Capture Polarity 02083 * This parameter can be one of the following values: 02084 * @arg TIM5_ICPolarity_Rising: Input Capture on Rising Edge 02085 * @arg TIM5_ICPolarity_Falling: Input Capture on Falling Edge 02086 * @param TIM5_ICSelection: Specifies the input to be used. 02087 * This parameter can be one of the following values: 02088 * @arg TIM5_ICSelection_DirectTI: Input Capture mapped on the direct input 02089 * @arg TIM5_ICSelection_IndirectTI: Input Capture mapped on the indirect input 02090 * @arg TIM5_ICSelection_TRGI: Input Capture mapped on the Trigger Input 02091 * @param TIM5_ICFilter: Specifies the Input Capture Filter. 02092 * This parameter must be a value between 0x00 and 0x0F. 02093 * @retval None 02094 */ 02095 static void TI2_Config(TIM5_ICPolarity_TypeDef TIM5_ICPolarity, 02096 TIM5_ICSelection_TypeDef TIM5_ICSelection, 02097 uint8_t TIM5_ICFilter) 02098 { 02099 uint8_t tmpccmr2 = 0; 02100 uint8_t tmpicpolarity = TIM5_ICPolarity; 02101 02102 /* Check the parameters */ 02103 assert_param(IS_TIM5_IC_POLARITY(TIM5_ICPolarity)); 02104 assert_param(IS_TIM5_IC_SELECTION(TIM5_ICSelection)); 02105 assert_param(IS_TIM5_IC_FILTER(TIM5_ICFilter)); 02106 02107 tmpccmr2 = TIM5->CCMR2; 02108 02109 /* Disable the Channel 2: Reset the CCE Bit */ 02110 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2E); 02111 02112 /* Select the Input and set the filter */ 02113 tmpccmr2 &= (uint8_t)(~TIM_CCMR_CCxS) & (uint8_t)(~TIM_CCMR_ICxF); 02114 tmpccmr2 |= (uint8_t)(((uint8_t)(TIM5_ICSelection)) | ((uint8_t)(TIM5_ICFilter << 4))); 02115 02116 TIM5->CCMR2 = tmpccmr2; 02117 02118 /* Select the Polarity */ 02119 if (tmpicpolarity == TIM5_ICPolarity_Falling) 02120 { 02121 TIM5->CCER1 |= TIM_CCER1_CC2P ; 02122 } 02123 else 02124 { 02125 TIM5->CCER1 &= (uint8_t)(~TIM_CCER1_CC2P) ; 02126 } 02127 02128 /* Set the CCE Bit */ 02129 TIM5->CCER1 |= TIM_CCER1_CC2E; 02130 } 02131 02132 /** 02133 * @} 02134 */ 02135 02136 /** 02137 * @} 02138 */ 02139 02140 /** 02141 * @} 02142 */ 02143 02144 /** 02145 * @} 02146 */ 02147 02148 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/