Index: /trunk/firmware_v2/Core/Inc/stm32c0xx_it.h
===================================================================
--- /trunk/firmware_v2/Core/Inc/stm32c0xx_it.h	(revision 19)
+++ /trunk/firmware_v2/Core/Inc/stm32c0xx_it.h	(revision 20)
@@ -54,5 +54,5 @@
 void DMA1_Channel1_IRQHandler(void);
 void DMA1_Channel2_3_IRQHandler(void);
-void TIM16_IRQHandler(void);
+void TIM3_IRQHandler(void);
 /* USER CODE BEGIN EFP */
 
Index: /trunk/firmware_v2/Core/Inc/tim.h
===================================================================
--- /trunk/firmware_v2/Core/Inc/tim.h	(revision 19)
+++ /trunk/firmware_v2/Core/Inc/tim.h	(revision 20)
@@ -33,5 +33,5 @@
 /* USER CODE END Includes */
 
-extern TIM_HandleTypeDef htim16;
+extern TIM_HandleTypeDef htim3;
 
 extern TIM_HandleTypeDef htim17;
@@ -41,5 +41,5 @@
 /* USER CODE END Private defines */
 
-void MX_TIM16_Init(void);
+void MX_TIM3_Init(void);
 void MX_TIM17_Init(void);
 
Index: /trunk/firmware_v2/Core/Src/main.c
===================================================================
--- /trunk/firmware_v2/Core/Src/main.c	(revision 19)
+++ /trunk/firmware_v2/Core/Src/main.c	(revision 20)
@@ -93,7 +93,7 @@
   MX_DMA_Init();
   MX_ADC1_Init();
-  MX_TIM16_Init();
   MX_TIM17_Init();
   MX_USART1_UART_Init();
+  MX_TIM3_Init();
   /* USER CODE BEGIN 2 */
 
Index: /trunk/firmware_v2/Core/Src/stm32c0xx_it.c
===================================================================
--- /trunk/firmware_v2/Core/Src/stm32c0xx_it.c	(revision 19)
+++ /trunk/firmware_v2/Core/Src/stm32c0xx_it.c	(revision 20)
@@ -60,6 +60,6 @@
 /* External variables --------------------------------------------------------*/
 extern DMA_HandleTypeDef hdma_adc1;
-extern DMA_HandleTypeDef hdma_tim16_ch1;
-extern TIM_HandleTypeDef htim16;
+extern DMA_HandleTypeDef hdma_tim3_ch1;
+extern TIM_HandleTypeDef htim3;
 /* USER CODE BEGIN EV */
 
@@ -168,5 +168,5 @@
 
   /* USER CODE END DMA1_Channel2_3_IRQn 0 */
-  HAL_DMA_IRQHandler(&hdma_tim16_ch1);
+  HAL_DMA_IRQHandler(&hdma_tim3_ch1);
   /* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */
 
@@ -175,15 +175,15 @@
 
 /**
-  * @brief This function handles TIM16 global interrupt.
-  */
-void TIM16_IRQHandler(void)
-{
-  /* USER CODE BEGIN TIM16_IRQn 0 */
-
-  /* USER CODE END TIM16_IRQn 0 */
-  HAL_TIM_IRQHandler(&htim16);
-  /* USER CODE BEGIN TIM16_IRQn 1 */
-
-  /* USER CODE END TIM16_IRQn 1 */
+  * @brief This function handles TIM3 global interrupt.
+  */
+void TIM3_IRQHandler(void)
+{
+  /* USER CODE BEGIN TIM3_IRQn 0 */
+
+  /* USER CODE END TIM3_IRQn 0 */
+  HAL_TIM_IRQHandler(&htim3);
+  /* USER CODE BEGIN TIM3_IRQn 1 */
+
+  /* USER CODE END TIM3_IRQn 1 */
 }
 
@@ -208,5 +208,5 @@
 	extern uint32_t ic_overflows;
 
-  	if (htim->Instance == TIM16)
+  	if (htim->Instance == TIM3)
 	{
 		printf("Full\n");
@@ -246,5 +246,5 @@
 	extern uint32_t ic_overflows;
 
-	if (htim->Instance == TIM16)
+	if (htim->Instance == TIM3)
 	{
 		ic_overflows++;
@@ -260,5 +260,5 @@
 	extern uint32_t ic_overflows;
 
-	if (htim->Instance == TIM16)
+	if (htim->Instance == TIM3)
 	{
 		printf("Half\n");
Index: /trunk/firmware_v2/Core/Src/tim.c
===================================================================
--- /trunk/firmware_v2/Core/Src/tim.c	(revision 19)
+++ /trunk/firmware_v2/Core/Src/tim.c	(revision 20)
@@ -31,35 +31,45 @@
 /* USER CODE END 0 */
 
-TIM_HandleTypeDef htim16;
+TIM_HandleTypeDef htim3;
 TIM_HandleTypeDef htim17;
-DMA_HandleTypeDef hdma_tim16_ch1;
-
-/* TIM16 init function */
-void MX_TIM16_Init(void)
-{
-
-  /* USER CODE BEGIN TIM16_Init 0 */
-
-  // FAN TACHO
-
-  /* USER CODE END TIM16_Init 0 */
-
+DMA_HandleTypeDef hdma_tim3_ch1;
+
+/* TIM3 init function */
+void MX_TIM3_Init(void)
+{
+
+  /* USER CODE BEGIN TIM3_Init 0 */
+
+  /* USER CODE END TIM3_Init 0 */
+
+  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+  TIM_MasterConfigTypeDef sMasterConfig = {0};
   TIM_IC_InitTypeDef sConfigIC = {0};
 
-  /* USER CODE BEGIN TIM16_Init 1 */
-
-  /* USER CODE END TIM16_Init 1 */
-  htim16.Instance = TIM16;
-  htim16.Init.Prescaler = 3;
-  htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
-  htim16.Init.Period = 65535;
-  htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
-  htim16.Init.RepetitionCounter = 0;
-  htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
-  if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  if (HAL_TIM_IC_Init(&htim16) != HAL_OK)
+  /* USER CODE BEGIN TIM3_Init 1 */
+
+  /* USER CODE END TIM3_Init 1 */
+  htim3.Instance = TIM3;
+  htim3.Init.Prescaler = 3;
+  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
+  htim3.Init.Period = 65535;
+  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
+  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  if (HAL_TIM_IC_Init(&htim3) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
   {
     Error_Handler();
@@ -69,14 +79,14 @@
   sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
   sConfigIC.ICFilter = 0;
-  if (HAL_TIM_IC_ConfigChannel(&htim16, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  /* USER CODE BEGIN TIM16_Init 2 */
-
-  __HAL_TIM_ENABLE_IT(&htim16, TIM_IT_UPDATE);
-  HAL_TIM_IC_Start_DMA(&htim16, TIM_CHANNEL_1, (uint32_t*)ic_buf, STATE_NUM * AVG_NUM);
-
-  /* USER CODE END TIM16_Init 2 */
+  if (HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN TIM3_Init 2 */
+
+  __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE);
+  HAL_TIM_IC_Start_DMA(&htim3, TIM_CHANNEL_1, (uint32_t*)ic_buf, STATE_NUM * AVG_NUM);
+
+  /* USER CODE END TIM3_Init 2 */
 
 }
@@ -148,15 +158,15 @@
 
   GPIO_InitTypeDef GPIO_InitStruct = {0};
-  if(tim_baseHandle->Instance==TIM16)
-  {
-  /* USER CODE BEGIN TIM16_MspInit 0 */
-
-  /* USER CODE END TIM16_MspInit 0 */
-    /* TIM16 clock enable */
-    __HAL_RCC_TIM16_CLK_ENABLE();
+  if(tim_baseHandle->Instance==TIM3)
+  {
+  /* USER CODE BEGIN TIM3_MspInit 0 */
+
+  /* USER CODE END TIM3_MspInit 0 */
+    /* TIM3 clock enable */
+    __HAL_RCC_TIM3_CLK_ENABLE();
 
     __HAL_RCC_GPIOA_CLK_ENABLE();
-    /**TIM16 GPIO Configuration
-    PA6     ------> TIM16_CH1
+    /**TIM3 GPIO Configuration
+    PA6     ------> TIM3_CH1
     */
     GPIO_InitStruct.Pin = FAN_TACHO_Pin;
@@ -164,31 +174,31 @@
     GPIO_InitStruct.Pull = GPIO_PULLUP;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-    GPIO_InitStruct.Alternate = GPIO_AF5_TIM16;
+    GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
     HAL_GPIO_Init(FAN_TACHO_GPIO_Port, &GPIO_InitStruct);
 
-    /* TIM16 DMA Init */
-    /* TIM16_CH1 Init */
-    hdma_tim16_ch1.Instance = DMA1_Channel2;
-    hdma_tim16_ch1.Init.Request = DMA_REQUEST_TIM16_CH1;
-    hdma_tim16_ch1.Init.Direction = DMA_PERIPH_TO_MEMORY;
-    hdma_tim16_ch1.Init.PeriphInc = DMA_PINC_DISABLE;
-    hdma_tim16_ch1.Init.MemInc = DMA_MINC_ENABLE;
-    hdma_tim16_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
-    hdma_tim16_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
-    hdma_tim16_ch1.Init.Mode = DMA_CIRCULAR;
-    hdma_tim16_ch1.Init.Priority = DMA_PRIORITY_LOW;
-    if (HAL_DMA_Init(&hdma_tim16_ch1) != HAL_OK)
+    /* TIM3 DMA Init */
+    /* TIM3_CH1 Init */
+    hdma_tim3_ch1.Instance = DMA1_Channel2;
+    hdma_tim3_ch1.Init.Request = DMA_REQUEST_TIM3_CH1;
+    hdma_tim3_ch1.Init.Direction = DMA_PERIPH_TO_MEMORY;
+    hdma_tim3_ch1.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_tim3_ch1.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_tim3_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
+    hdma_tim3_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
+    hdma_tim3_ch1.Init.Mode = DMA_CIRCULAR;
+    hdma_tim3_ch1.Init.Priority = DMA_PRIORITY_LOW;
+    if (HAL_DMA_Init(&hdma_tim3_ch1) != HAL_OK)
     {
       Error_Handler();
     }
 
-    __HAL_LINKDMA(tim_baseHandle,hdma[TIM_DMA_ID_CC1],hdma_tim16_ch1);
-
-    /* TIM16 interrupt Init */
-    HAL_NVIC_SetPriority(TIM16_IRQn, 0, 0);
-    HAL_NVIC_EnableIRQ(TIM16_IRQn);
-  /* USER CODE BEGIN TIM16_MspInit 1 */
-
-  /* USER CODE END TIM16_MspInit 1 */
+    __HAL_LINKDMA(tim_baseHandle,hdma[TIM_DMA_ID_CC1],hdma_tim3_ch1);
+
+    /* TIM3 interrupt Init */
+    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(TIM3_IRQn);
+  /* USER CODE BEGIN TIM3_MspInit 1 */
+
+  /* USER CODE END TIM3_MspInit 1 */
   }
   else if(tim_baseHandle->Instance==TIM17)
@@ -237,25 +247,25 @@
 {
 
-  if(tim_baseHandle->Instance==TIM16)
-  {
-  /* USER CODE BEGIN TIM16_MspDeInit 0 */
-
-  /* USER CODE END TIM16_MspDeInit 0 */
+  if(tim_baseHandle->Instance==TIM3)
+  {
+  /* USER CODE BEGIN TIM3_MspDeInit 0 */
+
+  /* USER CODE END TIM3_MspDeInit 0 */
     /* Peripheral clock disable */
-    __HAL_RCC_TIM16_CLK_DISABLE();
-
-    /**TIM16 GPIO Configuration
-    PA6     ------> TIM16_CH1
+    __HAL_RCC_TIM3_CLK_DISABLE();
+
+    /**TIM3 GPIO Configuration
+    PA6     ------> TIM3_CH1
     */
     HAL_GPIO_DeInit(FAN_TACHO_GPIO_Port, FAN_TACHO_Pin);
 
-    /* TIM16 DMA DeInit */
+    /* TIM3 DMA DeInit */
     HAL_DMA_DeInit(tim_baseHandle->hdma[TIM_DMA_ID_CC1]);
 
-    /* TIM16 interrupt Deinit */
-    HAL_NVIC_DisableIRQ(TIM16_IRQn);
-  /* USER CODE BEGIN TIM16_MspDeInit 1 */
-
-  /* USER CODE END TIM16_MspDeInit 1 */
+    /* TIM3 interrupt Deinit */
+    HAL_NVIC_DisableIRQ(TIM3_IRQn);
+  /* USER CODE BEGIN TIM3_MspDeInit 1 */
+
+  /* USER CODE END TIM3_MspDeInit 1 */
   }
   else if(tim_baseHandle->Instance==TIM17)
Index: /trunk/firmware_v2/firmware_v2.ioc
===================================================================
--- /trunk/firmware_v2/firmware_v2.ioc	(revision 19)
+++ /trunk/firmware_v2/firmware_v2.ioc	(revision 20)
@@ -37,23 +37,23 @@
 Dma.ADC1.0.SyncSignalID=NONE
 Dma.Request0=ADC1
-Dma.Request1=TIM16_CH1
+Dma.Request1=TIM3_CH1
 Dma.RequestsNb=2
-Dma.TIM16_CH1.1.Direction=DMA_PERIPH_TO_MEMORY
-Dma.TIM16_CH1.1.EventEnable=DISABLE
-Dma.TIM16_CH1.1.Instance=DMA1_Channel2
-Dma.TIM16_CH1.1.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
-Dma.TIM16_CH1.1.MemInc=DMA_MINC_ENABLE
-Dma.TIM16_CH1.1.Mode=DMA_CIRCULAR
-Dma.TIM16_CH1.1.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
-Dma.TIM16_CH1.1.PeriphInc=DMA_PINC_DISABLE
-Dma.TIM16_CH1.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING
-Dma.TIM16_CH1.1.Priority=DMA_PRIORITY_LOW
-Dma.TIM16_CH1.1.RequestNumber=1
-Dma.TIM16_CH1.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
-Dma.TIM16_CH1.1.SignalID=NONE
-Dma.TIM16_CH1.1.SyncEnable=DISABLE
-Dma.TIM16_CH1.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
-Dma.TIM16_CH1.1.SyncRequestNumber=1
-Dma.TIM16_CH1.1.SyncSignalID=NONE
+Dma.TIM3_CH1.1.Direction=DMA_PERIPH_TO_MEMORY
+Dma.TIM3_CH1.1.EventEnable=DISABLE
+Dma.TIM3_CH1.1.Instance=DMA1_Channel2
+Dma.TIM3_CH1.1.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
+Dma.TIM3_CH1.1.MemInc=DMA_MINC_ENABLE
+Dma.TIM3_CH1.1.Mode=DMA_CIRCULAR
+Dma.TIM3_CH1.1.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
+Dma.TIM3_CH1.1.PeriphInc=DMA_PINC_DISABLE
+Dma.TIM3_CH1.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING
+Dma.TIM3_CH1.1.Priority=DMA_PRIORITY_LOW
+Dma.TIM3_CH1.1.RequestNumber=1
+Dma.TIM3_CH1.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
+Dma.TIM3_CH1.1.SignalID=NONE
+Dma.TIM3_CH1.1.SyncEnable=DISABLE
+Dma.TIM3_CH1.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
+Dma.TIM3_CH1.1.SyncRequestNumber=1
+Dma.TIM3_CH1.1.SyncSignalID=NONE
 File.Version=6
 GPIO.groupedBy=Group By Peripherals
@@ -68,5 +68,5 @@
 Mcu.IP5=RCC
 Mcu.IP6=SYS
-Mcu.IP7=TIM16
+Mcu.IP7=TIM3
 Mcu.IP8=TIM17
 Mcu.IP9=USART1
@@ -96,5 +96,5 @@
 Mcu.Pin27=VP_ADC1_TempSens_Input
 Mcu.Pin28=VP_SYS_VS_Systick
-Mcu.Pin29=VP_TIM16_VS_ClockSourceINT
+Mcu.Pin29=VP_TIM3_VS_ClockSourceINT
 Mcu.Pin3=PA0
 Mcu.Pin30=VP_TIM17_VS_ClockSourceINT
@@ -119,5 +119,5 @@
 NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
 NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:true\:false\:true\:false
-NVIC.TIM16_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
+NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 PA0.GPIOParameters=GPIO_PuPd,GPIO_Label
 PA0.GPIO_Label=GPIO_INPUT_LVP
@@ -162,5 +162,5 @@
 PA6.GPIO_PuPd=GPIO_PULLUP
 PA6.Locked=true
-PA6.Signal=S_TIM16_CH1
+PA6.Signal=S_TIM3_CH1
 PA7.GPIOParameters=GPIO_Label
 PA7.GPIO_Label=FAN_PWM
@@ -264,5 +264,5 @@
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_TIM16_Init-TIM16-false-HAL-true,6-MX_TIM17_Init-TIM17-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,0-MX_CORTEX_M0+_Init-CORTEX_M0+-false-HAL-true
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_TIM17_Init-TIM17-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_TIM3_Init-TIM3-false-HAL-true,0-MX_CORTEX_M0+_Init-CORTEX_M0+-false-HAL-true
 RCC.ADCFreq_Value=12000000
 RCC.AHBFreq_Value=12000000
@@ -287,13 +287,8 @@
 RCC.SYSCLKFreq_VALUE=12000000
 RCC.USART1Freq_Value=12000000
-SH.S_TIM16_CH1.0=TIM16_CH1,Input_Capture1_from_TI1
-SH.S_TIM16_CH1.ConfNb=1
 SH.S_TIM17_CH1.0=TIM17_CH1,PWM Generation1 CH1
 SH.S_TIM17_CH1.ConfNb=1
-TIM16.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
-TIM16.Channel=TIM_CHANNEL_1
-TIM16.ICPolarity_CH1=TIM_INPUTCHANNELPOLARITY_FALLING
-TIM16.IPParameters=Channel,Prescaler,AutoReloadPreload,ICPolarity_CH1
-TIM16.Prescaler=3
+SH.S_TIM3_CH1.0=TIM3_CH1,Input_Capture1_from_TI1
+SH.S_TIM3_CH1.ConfNb=1
 TIM17.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
 TIM17.Channel=TIM_CHANNEL_1
@@ -302,4 +297,9 @@
 TIM17.Period=479
 TIM17.Pulse=64
+TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
+TIM3.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
+TIM3.ICPolarity_CH1=TIM_INPUTCHANNELPOLARITY_FALLING
+TIM3.IPParameters=Channel-Input_Capture1_from_TI1,Prescaler,AutoReloadPreload,ICPolarity_CH1
+TIM3.Prescaler=3
 USART1.IPParameters=VirtualMode-Asynchronous
 USART1.VirtualMode-Asynchronous=VM_ASYNC
@@ -308,7 +308,7 @@
 VP_SYS_VS_Systick.Mode=SysTick
 VP_SYS_VS_Systick.Signal=SYS_VS_Systick
-VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer
-VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT
 VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer
 VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT
+VP_TIM3_VS_ClockSourceINT.Mode=Internal
+VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
 board=custom
