| 
					
				 | 
			
			
				@@ -1,113 +1,119 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "stm32f0xx_hal.h"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "pwm_in.h"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <stdio.h>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static TIM_HandleTypeDef       TimHandle;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static TIM_IC_InitTypeDef      sConfig;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static TIM_SlaveConfigTypeDef  sSlaveConfig;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-__IO uint32_t uwIC2Value = 0;  // Captured Value
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-__IO uint32_t uwDutyCycle = 0; // Duty Cycle Value
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-__IO uint32_t uwFrequency = 0; // Frequency Value
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void tim_pwm_in_init(void)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GPIO_InitTypeDef   GPIO_InitStruct;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    __HAL_RCC_GPIOA_CLK_ENABLE();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    __HAL_RCC_TIM3_CLK_ENABLE();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GPIO_InitStruct.Pin = GPIO_PIN_6;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GPIO_InitStruct.Pull = GPIO_PULLUP;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;//GPIO_AF0_TIM3;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 1);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //HAL_NVIC_SetPriority(TIM3_IRQn, 2, 0); // From lasertag project
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_NVIC_EnableIRQ(TIM3_IRQn);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TimHandle.Instance = TIM3;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TimHandle.Init.Period            = 0xFFFF;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TimHandle.Init.Prescaler         = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TimHandle.Init.ClockDivision     = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TimHandle.Init.RepetitionCounter = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_TIM_IC_Init(&TimHandle);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //HAL_TIM_Base_Init(&TimHandle);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sConfig.ICPrescaler = TIM_ICPSC_DIV1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sConfig.ICFilter = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sConfig.ICPolarity = TIM_ICPOLARITY_RISING; ;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sConfig.ICSelection = TIM_ICSELECTION_DIRECTTI;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sConfig.ICPolarity = TIM_ICPOLARITY_FALLING;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sConfig.ICSelection = TIM_ICSELECTION_INDIRECTTI;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_2);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sSlaveConfig.SlaveMode        = TIM_SLAVEMODE_RESET;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sSlaveConfig.InputTrigger     = TIM_TS_TI1FP1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sSlaveConfig.TriggerPolarity  = TIM_TRIGGERPOLARITY_NONINVERTED;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sSlaveConfig.TriggerFilter    = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_TIM_SlaveConfigSynchro(&TimHandle, &sSlaveConfig);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_1);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_2);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void tim_print_out_pwm(void)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    printf("Captured Value %u\r\n", uwIC2Value);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    printf("Duty Cycle Value %u\r\n", uwDutyCycle);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    printf("Frequency Value %u\r\n\n", uwFrequency);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void TIM3_IRQHandler(void)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    HAL_TIM_IRQHandler(&TimHandle);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    static uint32_t cnt = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    cnt++;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#if 1  
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // Get the Input Capture value
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        uwIC2Value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (uwIC2Value != 0)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // Duty cycle computation
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            uwDutyCycle = ((HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2)) * 100) / uwIC2Value;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // uwFrequency computation
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //TIM3 counter clock = (RCC_Clocks.HCLK_Frequency)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            uwFrequency = (HAL_RCC_GetHCLKFreq())  / uwIC2Value;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            uwDutyCycle = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            uwFrequency = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#endif    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "stm32f0xx_hal.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "pwm_in.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <stdio.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PWM_IN_TIM_FREQ     1000000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static TIM_HandleTypeDef       TimHandle; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static TIM_IC_InitTypeDef      sConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static TIM_SlaveConfigTypeDef  sSlaveConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static uint16_t prescaler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static uint32_t tim_freq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+__IO uint32_t cap_value_1 = 0;  // Captured Value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+__IO uint32_t uwDutyCycle = 0; // Duty Cycle Value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+__IO uint32_t uwFrequency = 0; // Frequency Value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void tim_pwm_in_init(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GPIO_InitTypeDef   GPIO_InitStruct; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    __HAL_RCC_GPIOA_CLK_ENABLE(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    __HAL_RCC_TIM3_CLK_ENABLE(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GPIO_InitStruct.Pin = GPIO_PIN_6; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GPIO_InitStruct.Pull = GPIO_PULLUP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;//GPIO_AF0_TIM3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //HAL_NVIC_SetPriority(TIM3_IRQn, 2, 0); // From lasertag project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_NVIC_EnableIRQ(TIM3_IRQn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    prescaler = HAL_RCC_GetHCLKFreq()/PWM_IN_TIM_FREQ - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TimHandle.Instance = TIM3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TimHandle.Init.Period            = 0xFFFF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TimHandle.Init.Prescaler         = 47; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TimHandle.Init.ClockDivision     = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TimHandle.Init.RepetitionCounter = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_TIM_IC_Init(&TimHandle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //HAL_TIM_Base_Init(&TimHandle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sConfig.ICPrescaler = TIM_ICPSC_DIV1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sConfig.ICFilter = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sConfig.ICPolarity = TIM_ICPOLARITY_RISING; ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sConfig.ICSelection = TIM_ICSELECTION_DIRECTTI; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sConfig.ICPolarity = TIM_ICPOLARITY_FALLING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sConfig.ICSelection = TIM_ICSELECTION_INDIRECTTI; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sSlaveConfig.SlaveMode        = TIM_SLAVEMODE_RESET; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sSlaveConfig.InputTrigger     = TIM_TS_TI1FP1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sSlaveConfig.TriggerPolarity  = TIM_TRIGGERPOLARITY_NONINVERTED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sSlaveConfig.TriggerFilter    = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_TIM_SlaveConfigSynchro(&TimHandle, &sSlaveConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void tim_print_out_pwm(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    printf("Captured Value %u\r\n", uwIC2Value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    printf("Duty Cycle Value %u\r\n", uwDutyCycle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    printf("Frequency Value %u\r\n\n", uwFrequency); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void TIM3_IRQHandler(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HAL_TIM_IRQHandler(&TimHandle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    static uint32_t cnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cnt++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if 1   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Get the Input Capture value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        uwIC2Value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (uwIC2Value != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // Duty cycle computation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //uwDutyCycle = ((HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2)) * 100) / uwIC2Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            uwDutyCycle = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // uwFrequency computation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //TIM3 counter clock = (RCC_Clocks.HCLK_Frequency) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            uwFrequency = tim_freq/uwIC2Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            uwDutyCycle = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            uwFrequency = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |