381 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			381 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /**
 | ||
|  |   ****************************************************************************** | ||
|  |   * File Name          : TIM.c | ||
|  |   * Description        : This file provides code for the configuration | ||
|  |   *                      of the TIM instances. | ||
|  |   ****************************************************************************** | ||
|  |   * | ||
|  |   * Copyright (c) 2017 STMicroelectronics International N.V.  | ||
|  |   * All rights reserved. | ||
|  |   * | ||
|  |   * Redistribution and use in source and binary forms, with or without  | ||
|  |   * modification, are permitted, provided that the following conditions are met: | ||
|  |   * | ||
|  |   * 1. Redistribution of source code must retain the above copyright notice,  | ||
|  |   *    this list of conditions and the following disclaimer. | ||
|  |   * 2. Redistributions in binary form must reproduce the above copyright notice, | ||
|  |   *    this list of conditions and the following disclaimer in the documentation | ||
|  |   *    and/or other materials provided with the distribution. | ||
|  |   * 3. Neither the name of STMicroelectronics nor the names of other  | ||
|  |   *    contributors to this software may be used to endorse or promote products  | ||
|  |   *    derived from this software without specific written permission. | ||
|  |   * 4. This software, including modifications and/or derivative works of this  | ||
|  |   *    software, must execute solely and exclusively on microcontroller or | ||
|  |   *    microprocessor devices manufactured by or for STMicroelectronics. | ||
|  |   * 5. Redistribution and use of this software other than as permitted under  | ||
|  |   *    this license is void and will automatically terminate your rights under  | ||
|  |   *    this license.  | ||
|  |   * | ||
|  |   * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"  | ||
|  |   * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT  | ||
|  |   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A  | ||
|  |   * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY | ||
|  |   * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT  | ||
|  |   * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
|  |   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
|  |   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  | ||
|  |   * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  | ||
|  |   * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING  | ||
|  |   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
|  |   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
|  |   * | ||
|  |   ****************************************************************************** | ||
|  |   */ | ||
|  | 
 | ||
|  | /* Includes ------------------------------------------------------------------*/ | ||
|  | #include "tim.h"
 | ||
|  | 
 | ||
|  | #include "gpio.h"
 | ||
|  | 
 | ||
|  | /* USER CODE BEGIN 0 */ | ||
|  | 
 | ||
|  | /* USER CODE END 0 */ | ||
|  | 
 | ||
|  | TIM_HandleTypeDef htim3; | ||
|  | TIM_HandleTypeDef htim4; | ||
|  | TIM_HandleTypeDef htim5; | ||
|  | TIM_HandleTypeDef htim8; | ||
|  | 
 | ||
|  | /* TIM3 init function */ | ||
|  | void MX_TIM3_Init(void) | ||
|  | { | ||
|  |   TIM_Encoder_InitTypeDef sConfig; | ||
|  |   TIM_MasterConfigTypeDef sMasterConfig; | ||
|  | 
 | ||
|  |   htim3.Instance = TIM3; | ||
|  |   htim3.Init.Prescaler = 0; | ||
|  |   htim3.Init.CounterMode = TIM_COUNTERMODE_UP; | ||
|  |   htim3.Init.Period = ENCODER_RANGE; | ||
|  |   htim3.Init.ClockDivision = ENC_ClockDivision; | ||
|  |   sConfig.EncoderMode = TIM_ENCODERMODE_TI12; | ||
|  |   sConfig.IC1Polarity = TIM_ICPOLARITY_FALLING; | ||
|  |   sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; | ||
|  |   sConfig.IC1Prescaler = TIM_ICPSC_DIV1; | ||
|  |   sConfig.IC1Filter = ENC_filter; | ||
|  |   sConfig.IC2Polarity = TIM_ICPOLARITY_FALLING; | ||
|  |   sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; | ||
|  |   sConfig.IC2Prescaler = TIM_ICPSC_DIV1; | ||
|  |   sConfig.IC2Filter = ENC_filter; | ||
|  |   if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  |   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; | ||
|  |   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; | ||
|  |   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  | } | ||
|  | /* TIM4 init function */ | ||
|  | void MX_TIM4_Init(void) | ||
|  | { | ||
|  |   TIM_Encoder_InitTypeDef sConfig; | ||
|  |   TIM_MasterConfigTypeDef sMasterConfig; | ||
|  | 
 | ||
|  |   htim4.Instance = TIM4; | ||
|  |   htim4.Init.Prescaler = 0; | ||
|  |   htim4.Init.CounterMode = TIM_COUNTERMODE_UP; | ||
|  |   htim4.Init.Period = ENCODER_RANGE; | ||
|  |   htim4.Init.ClockDivision = ENC_ClockDivision; | ||
|  |   sConfig.EncoderMode = TIM_ENCODERMODE_TI12; | ||
|  |   sConfig.IC1Polarity = TIM_ICPOLARITY_FALLING; | ||
|  |   sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; | ||
|  |   sConfig.IC1Prescaler = TIM_ICPSC_DIV1; | ||
|  |   sConfig.IC1Filter = ENC_filter; | ||
|  |   sConfig.IC2Polarity = TIM_ICPOLARITY_FALLING; | ||
|  |   sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; | ||
|  |   sConfig.IC2Prescaler = TIM_ICPSC_DIV1; | ||
|  |   sConfig.IC2Filter = ENC_filter; | ||
|  |   if (HAL_TIM_Encoder_Init(&htim4, &sConfig) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  |   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; | ||
|  |   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; | ||
|  |   if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  | } | ||
|  | /* TIM5 init function */ | ||
|  | void MX_TIM5_Init(void) | ||
|  | { | ||
|  |   TIM_Encoder_InitTypeDef sConfig; | ||
|  |   TIM_MasterConfigTypeDef sMasterConfig; | ||
|  | 
 | ||
|  |   htim5.Instance = TIM5; | ||
|  |   htim5.Init.Prescaler = 0; | ||
|  |   htim5.Init.CounterMode = TIM_COUNTERMODE_UP; | ||
|  |   htim5.Init.Period = ENCODER_RANGE; | ||
|  |   htim5.Init.ClockDivision = ENC_ClockDivision; | ||
|  |   sConfig.EncoderMode = TIM_ENCODERMODE_TI12; | ||
|  |   sConfig.IC1Polarity = TIM_ICPOLARITY_FALLING; | ||
|  |   sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; | ||
|  |   sConfig.IC1Prescaler = TIM_ICPSC_DIV1; | ||
|  |   sConfig.IC1Filter = ENC_filter; | ||
|  |   sConfig.IC2Polarity = TIM_ICPOLARITY_FALLING; | ||
|  |   sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; | ||
|  |   sConfig.IC2Prescaler = TIM_ICPSC_DIV1; | ||
|  |   sConfig.IC2Filter = ENC_filter; | ||
|  |   if (HAL_TIM_Encoder_Init(&htim5, &sConfig) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  |   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; | ||
|  |   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; | ||
|  |   if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  | } | ||
|  | /* TIM8 init function */ | ||
|  | void MX_TIM8_Init(void) | ||
|  | { | ||
|  |   TIM_Encoder_InitTypeDef sConfig; | ||
|  |   TIM_MasterConfigTypeDef sMasterConfig; | ||
|  | 
 | ||
|  |   htim8.Instance = TIM8; | ||
|  |   htim8.Init.Prescaler = 0; | ||
|  |   htim8.Init.CounterMode = TIM_COUNTERMODE_UP; | ||
|  |   htim8.Init.Period = ENCODER_RANGE; | ||
|  |   htim8.Init.ClockDivision = ENC_ClockDivision; | ||
|  |   htim8.Init.RepetitionCounter = 0; | ||
|  |   sConfig.EncoderMode = TIM_ENCODERMODE_TI12; | ||
|  |   sConfig.IC1Polarity = TIM_ICPOLARITY_FALLING; | ||
|  |   sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; | ||
|  |   sConfig.IC1Prescaler = TIM_ICPSC_DIV1; | ||
|  |   sConfig.IC1Filter = ENC_filter; | ||
|  |   sConfig.IC2Polarity = TIM_ICPOLARITY_FALLING; | ||
|  |   sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; | ||
|  |   sConfig.IC2Prescaler = TIM_ICPSC_DIV1; | ||
|  |   sConfig.IC2Filter = ENC_filter; | ||
|  |   if (HAL_TIM_Encoder_Init(&htim8, &sConfig) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  |   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; | ||
|  |   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; | ||
|  |   if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK) | ||
|  |   { | ||
|  |     Error_Handler(); | ||
|  |   } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) | ||
|  | { | ||
|  | 
 | ||
|  |   GPIO_InitTypeDef GPIO_InitStruct; | ||
|  |   if(tim_encoderHandle->Instance==TIM3) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN TIM3_MspInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM3_MspInit 0 */ | ||
|  |     /* Peripheral clock enable */ | ||
|  |     __HAL_RCC_TIM3_CLK_ENABLE(); | ||
|  |    | ||
|  |     /**TIM3 GPIO Configuration    
 | ||
|  |     PB4     ------> TIM3_CH1 | ||
|  |     PB5     ------> TIM3_CH2  | ||
|  |     */ | ||
|  |     GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; | ||
|  |     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||
|  |     GPIO_InitStruct.Pull = GPIO_PULLUP; | ||
|  |     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||
|  |     GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; | ||
|  |     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN TIM3_MspInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM3_MspInit 1 */ | ||
|  |   } | ||
|  |   else if(tim_encoderHandle->Instance==TIM4) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN TIM4_MspInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM4_MspInit 0 */ | ||
|  |     /* Peripheral clock enable */ | ||
|  |     __HAL_RCC_TIM4_CLK_ENABLE(); | ||
|  |    | ||
|  |     /**TIM4 GPIO Configuration    
 | ||
|  |     PD12     ------> TIM4_CH1 | ||
|  |     PD13     ------> TIM4_CH2  | ||
|  |     */ | ||
|  |     GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13; | ||
|  |     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||
|  |     GPIO_InitStruct.Pull = GPIO_PULLUP; | ||
|  |     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||
|  |     GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; | ||
|  |     HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN TIM4_MspInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM4_MspInit 1 */ | ||
|  |   } | ||
|  |   else if(tim_encoderHandle->Instance==TIM5) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN TIM5_MspInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM5_MspInit 0 */ | ||
|  |     /* Peripheral clock enable */ | ||
|  |     __HAL_RCC_TIM5_CLK_ENABLE(); | ||
|  |    | ||
|  |     /**TIM5 GPIO Configuration    
 | ||
|  |     PA0-WKUP     ------> TIM5_CH1 | ||
|  |     PA1     ------> TIM5_CH2  | ||
|  |     */ | ||
|  |     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; | ||
|  |     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||
|  |     GPIO_InitStruct.Pull = GPIO_PULLUP; | ||
|  |     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||
|  |     GPIO_InitStruct.Alternate = GPIO_AF2_TIM5; | ||
|  |     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN TIM5_MspInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM5_MspInit 1 */ | ||
|  |   } | ||
|  |   else if(tim_encoderHandle->Instance==TIM8) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN TIM8_MspInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM8_MspInit 0 */ | ||
|  |     /* Peripheral clock enable */ | ||
|  |     __HAL_RCC_TIM8_CLK_ENABLE(); | ||
|  |    | ||
|  |     /**TIM8 GPIO Configuration    
 | ||
|  |     PC6     ------> TIM8_CH1 | ||
|  |     PC7     ------> TIM8_CH2  | ||
|  |     */ | ||
|  |     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; | ||
|  |     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||
|  |     GPIO_InitStruct.Pull = GPIO_PULLUP; | ||
|  |     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||
|  |     GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; | ||
|  |     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN TIM8_MspInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM8_MspInit 1 */ | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle) | ||
|  | { | ||
|  | 
 | ||
|  |   if(tim_encoderHandle->Instance==TIM3) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN TIM3_MspDeInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM3_MspDeInit 0 */ | ||
|  |     /* Peripheral clock disable */ | ||
|  |     __HAL_RCC_TIM3_CLK_DISABLE(); | ||
|  |    | ||
|  |     /**TIM3 GPIO Configuration    
 | ||
|  |     PB4     ------> TIM3_CH1 | ||
|  |     PB5     ------> TIM3_CH2  | ||
|  |     */ | ||
|  |     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_4|GPIO_PIN_5); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN TIM3_MspDeInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM3_MspDeInit 1 */ | ||
|  |   } | ||
|  |   else if(tim_encoderHandle->Instance==TIM4) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN TIM4_MspDeInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM4_MspDeInit 0 */ | ||
|  |     /* Peripheral clock disable */ | ||
|  |     __HAL_RCC_TIM4_CLK_DISABLE(); | ||
|  |    | ||
|  |     /**TIM4 GPIO Configuration    
 | ||
|  |     PD12     ------> TIM4_CH1 | ||
|  |     PD13     ------> TIM4_CH2  | ||
|  |     */ | ||
|  |     HAL_GPIO_DeInit(GPIOD, GPIO_PIN_12|GPIO_PIN_13); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN TIM4_MspDeInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM4_MspDeInit 1 */ | ||
|  |   } | ||
|  |   else if(tim_encoderHandle->Instance==TIM5) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN TIM5_MspDeInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM5_MspDeInit 0 */ | ||
|  |     /* Peripheral clock disable */ | ||
|  |     __HAL_RCC_TIM5_CLK_DISABLE(); | ||
|  |    | ||
|  |     /**TIM5 GPIO Configuration    
 | ||
|  |     PA0-WKUP     ------> TIM5_CH1 | ||
|  |     PA1     ------> TIM5_CH2  | ||
|  |     */ | ||
|  |     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN TIM5_MspDeInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM5_MspDeInit 1 */ | ||
|  |   } | ||
|  |   else if(tim_encoderHandle->Instance==TIM8) | ||
|  |   { | ||
|  |   /* USER CODE BEGIN TIM8_MspDeInit 0 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM8_MspDeInit 0 */ | ||
|  |     /* Peripheral clock disable */ | ||
|  |     __HAL_RCC_TIM8_CLK_DISABLE(); | ||
|  |    | ||
|  |     /**TIM8 GPIO Configuration    
 | ||
|  |     PC6     ------> TIM8_CH1 | ||
|  |     PC7     ------> TIM8_CH2  | ||
|  |     */ | ||
|  |     HAL_GPIO_DeInit(GPIOC, GPIO_PIN_6|GPIO_PIN_7); | ||
|  | 
 | ||
|  |   /* USER CODE BEGIN TIM8_MspDeInit 1 */ | ||
|  | 
 | ||
|  |   /* USER CODE END TIM8_MspDeInit 1 */ | ||
|  |   } | ||
|  | }  | ||
|  | 
 | ||
|  | /* USER CODE BEGIN 1 */ | ||
|  | 
 | ||
|  | /* USER CODE END 1 */ | ||
|  | 
 | ||
|  | /**
 | ||
|  |   * @} | ||
|  |   */ | ||
|  | 
 | ||
|  | /**
 | ||
|  |   * @} | ||
|  |   */ | ||
|  | 
 | ||
|  | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |