stm32f10x_tim.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:128k
源码类别:

uCOS

开发平台:

C/C++

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