tdse-tf_3-02

Controlador PID para derretidor de miel con control local via botones y remoto via WiFi
Index Commits Files Refs Submodules README
commit eeaa7d640e8fafc29e9901d4996aa2c6836a3ed6
parent 2aea0164f60088ec3a3029537bf68cf1a8557fff
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Tue, 31 Mar 2026 13:16:24 -0300

Habilitar el canal 1 del timer 3 para el buzzer

Lo pongo en commits separdos ya que CubeMX modificó otros parametros
debido a conflictos en los pines. Por si acaso se rompe algo que no se
haya detectado en el commit posterior.

Diffstat:
Mfirmware/Core/Inc/main.h | 1+
Mfirmware/Core/Src/main.c | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Mfirmware/Core/Src/stm32f1xx_hal_msp.c | 83++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
Mfirmware/Core/Src/stm32f1xx_it.c | 2+-
Mfirmware/tdse-tf_3-02.ioc | 101+++++++++++++++++++++++++++++++++++++++++++------------------------------------
5 files changed, 184 insertions(+), 73 deletions(-)
diff --git a/firmware/Core/Inc/main.h b/firmware/Core/Inc/main.h
@@ -34,6 +34,7 @@ extern "C" {
 extern I2C_HandleTypeDef hi2c1;
 extern RTC_HandleTypeDef hrtc;
 extern TIM_HandleTypeDef htim1;
+extern TIM_HandleTypeDef htim3;
 extern UART_HandleTypeDef huart1;
 
 extern RTC_TimeTypeDef s_time;
diff --git a/firmware/Core/Src/main.c b/firmware/Core/Src/main.c
@@ -50,10 +50,11 @@ DMA_HandleTypeDef hdma_i2c1_tx;
 RTC_HandleTypeDef hrtc;
 
 TIM_HandleTypeDef htim1;
+TIM_HandleTypeDef htim3;
 
 UART_HandleTypeDef huart1;
-DMA_HandleTypeDef hdma_usart1_rx;
 DMA_HandleTypeDef hdma_usart1_tx;
+DMA_HandleTypeDef hdma_usart1_rx;
 
 /* USER CODE BEGIN PV */
 
@@ -63,10 +64,11 @@ DMA_HandleTypeDef hdma_usart1_tx;
 void SystemClock_Config(void);
 static void MX_GPIO_Init(void);
 static void MX_DMA_Init(void);
-static void MX_USART1_UART_Init(void);
 static void MX_RTC_Init(void);
 static void MX_I2C1_Init(void);
 static void MX_TIM1_Init(void);
+static void MX_USART1_UART_Init(void);
+static void MX_TIM3_Init(void);
 /* USER CODE BEGIN PFP */
 
 /* USER CODE END PFP */
@@ -114,10 +116,11 @@ int main(void)
   /* Initialize all configured peripherals */
   MX_GPIO_Init();
   MX_DMA_Init();
-  MX_USART1_UART_Init();
   MX_RTC_Init();
   MX_I2C1_Init();
   MX_TIM1_Init();
+  MX_USART1_UART_Init();
+  MX_TIM3_Init();
   /* USER CODE BEGIN 2 */
 
     /* Application Init */
@@ -364,6 +367,65 @@ static void MX_TIM1_Init(void)
 }
 
 /**
+  * @brief TIM3 Initialization Function
+  * @param None
+  * @retval None
+  */
+static 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_OC_InitTypeDef sConfigOC = {0};
+
+  /* USER CODE BEGIN TIM3_Init 1 */
+
+  /* USER CODE END TIM3_Init 1 */
+  htim3.Instance = TIM3;
+  htim3.Init.Prescaler = 0;
+  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
+  htim3.Init.Period = 8000;
+  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+  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_PWM_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();
+  }
+  sConfigOC.OCMode = TIM_OCMODE_PWM1;
+  sConfigOC.Pulse = 4000;
+  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN TIM3_Init 2 */
+
+  /* USER CODE END TIM3_Init 2 */
+  HAL_TIM_MspPostInit(&htim3);
+
+}
+
+/**
   * @brief USART1 Initialization Function
   * @param None
   * @retval None
@@ -379,7 +441,7 @@ static void MX_USART1_UART_Init(void)
 
   /* USER CODE END USART1_Init 1 */
   huart1.Instance = USART1;
-  huart1.Init.BaudRate = 9600;
+  huart1.Init.BaudRate = 115200;
   huart1.Init.WordLength = UART_WORDLENGTH_8B;
   huart1.Init.StopBits = UART_STOPBITS_1;
   huart1.Init.Parity = UART_PARITY_NONE;
diff --git a/firmware/Core/Src/stm32f1xx_hal_msp.c b/firmware/Core/Src/stm32f1xx_hal_msp.c
@@ -25,10 +25,10 @@
 /* USER CODE END Includes */
 extern DMA_HandleTypeDef hdma_i2c1_tx;
 
-extern DMA_HandleTypeDef hdma_usart1_rx;
-
 extern DMA_HandleTypeDef hdma_usart1_tx;
 
+extern DMA_HandleTypeDef hdma_usart1_rx;
+
 /* Private typedef -----------------------------------------------------------*/
 /* USER CODE BEGIN TD */
 
@@ -64,7 +64,7 @@ extern DMA_HandleTypeDef hdma_usart1_tx;
 /* USER CODE END 0 */
 
 void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
-                    /**
+                                        /**
   * Initializes the Global MSP.
   */
 void HAL_MspInit(void)
@@ -251,7 +251,17 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
     /* USER CODE BEGIN TIM1_MspInit 1 */
 
     /* USER CODE END TIM1_MspInit 1 */
+  }
+  else if(htim_base->Instance==TIM3)
+  {
+    /* USER CODE BEGIN TIM3_MspInit 0 */
+
+    /* USER CODE END TIM3_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_TIM3_CLK_ENABLE();
+    /* USER CODE BEGIN TIM3_MspInit 1 */
 
+    /* USER CODE END TIM3_MspInit 1 */
   }
 
 }
@@ -264,7 +274,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
     /* USER CODE BEGIN TIM1_MspPostInit 0 */
 
     /* USER CODE END TIM1_MspPostInit 0 */
-
     __HAL_RCC_GPIOA_CLK_ENABLE();
     /**TIM1 GPIO Configuration
     PA8     ------> TIM1_CH1
@@ -278,6 +287,25 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
 
     /* USER CODE END TIM1_MspPostInit 1 */
   }
+  else if(htim->Instance==TIM3)
+  {
+    /* USER CODE BEGIN TIM3_MspPostInit 0 */
+
+    /* USER CODE END TIM3_MspPostInit 0 */
+
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    /**TIM3 GPIO Configuration
+    PA6     ------> TIM3_CH1
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_6;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+    /* USER CODE BEGIN TIM3_MspPostInit 1 */
+
+    /* USER CODE END TIM3_MspPostInit 1 */
+  }
 
 }
 /**
@@ -299,6 +327,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
 
     /* USER CODE END TIM1_MspDeInit 1 */
   }
+  else if(htim_base->Instance==TIM3)
+  {
+    /* USER CODE BEGIN TIM3_MspDeInit 0 */
+
+    /* USER CODE END TIM3_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_TIM3_CLK_DISABLE();
+    /* USER CODE BEGIN TIM3_MspDeInit 1 */
+
+    /* USER CODE END TIM3_MspDeInit 1 */
+  }
 
 }
 
@@ -329,22 +368,6 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
     /* USART1 DMA Init */
-    /* USART1_RX Init */
-    hdma_usart1_rx.Instance = DMA1_Channel5;
-    hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
-    hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
-    hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
-    hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
-    hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
-    hdma_usart1_rx.Init.Mode = DMA_NORMAL;
-    hdma_usart1_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
-    if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
-    {
-      Error_Handler();
-    }
-
-    __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx);
-
     /* USART1_TX Init */
     hdma_usart1_tx.Instance = DMA1_Channel4;
     hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
@@ -353,7 +376,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
     hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
     hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
     hdma_usart1_tx.Init.Mode = DMA_NORMAL;
-    hdma_usart1_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
+    hdma_usart1_tx.Init.Priority = DMA_PRIORITY_HIGH;
     if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
     {
       Error_Handler();
@@ -361,6 +384,22 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
 
     __HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx);
 
+    /* USART1_RX Init */
+    hdma_usart1_rx.Instance = DMA1_Channel5;
+    hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
+    hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+    hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+    hdma_usart1_rx.Init.Mode = DMA_NORMAL;
+    hdma_usart1_rx.Init.Priority = DMA_PRIORITY_HIGH;
+    if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
+    {
+      Error_Handler();
+    }
+
+    __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx);
+
     /* USART1 interrupt Init */
     HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
     HAL_NVIC_EnableIRQ(USART1_IRQn);
@@ -394,8 +433,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9);
 
     /* USART1 DMA DeInit */
-    HAL_DMA_DeInit(huart->hdmarx);
     HAL_DMA_DeInit(huart->hdmatx);
+    HAL_DMA_DeInit(huart->hdmarx);
 
     /* USART1 interrupt DeInit */
     HAL_NVIC_DisableIRQ(USART1_IRQn);
diff --git a/firmware/Core/Src/stm32f1xx_it.c b/firmware/Core/Src/stm32f1xx_it.c
@@ -57,8 +57,8 @@
 /* External variables --------------------------------------------------------*/
 extern DMA_HandleTypeDef hdma_i2c1_tx;
 extern I2C_HandleTypeDef hi2c1;
-extern DMA_HandleTypeDef hdma_usart1_rx;
 extern DMA_HandleTypeDef hdma_usart1_tx;
+extern DMA_HandleTypeDef hdma_usart1_rx;
 extern UART_HandleTypeDef huart1;
 /* USER CODE BEGIN EV */
 
diff --git a/firmware/tdse-tf_3-02.ioc b/firmware/tdse-tf_3-02.ioc
@@ -2,28 +2,28 @@
 CAD.formats=
 CAD.pinconfig=
 CAD.provider=
-Dma.I2C1_TX.2.Direction=DMA_MEMORY_TO_PERIPH
-Dma.I2C1_TX.2.Instance=DMA1_Channel6
-Dma.I2C1_TX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
-Dma.I2C1_TX.2.MemInc=DMA_MINC_ENABLE
-Dma.I2C1_TX.2.Mode=DMA_NORMAL
-Dma.I2C1_TX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
-Dma.I2C1_TX.2.PeriphInc=DMA_PINC_DISABLE
-Dma.I2C1_TX.2.Priority=DMA_PRIORITY_LOW
-Dma.I2C1_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
-Dma.Request0=USART1_RX
+Dma.I2C1_TX.0.Direction=DMA_MEMORY_TO_PERIPH
+Dma.I2C1_TX.0.Instance=DMA1_Channel6
+Dma.I2C1_TX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
+Dma.I2C1_TX.0.MemInc=DMA_MINC_ENABLE
+Dma.I2C1_TX.0.Mode=DMA_NORMAL
+Dma.I2C1_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.I2C1_TX.0.PeriphInc=DMA_PINC_DISABLE
+Dma.I2C1_TX.0.Priority=DMA_PRIORITY_LOW
+Dma.I2C1_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
+Dma.Request0=I2C1_TX
 Dma.Request1=USART1_TX
-Dma.Request2=I2C1_TX
+Dma.Request2=USART1_RX
 Dma.RequestsNb=3
-Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
-Dma.USART1_RX.0.Instance=DMA1_Channel5
-Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
-Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE
-Dma.USART1_RX.0.Mode=DMA_NORMAL
-Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
-Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE
-Dma.USART1_RX.0.Priority=DMA_PRIORITY_VERY_HIGH
-Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
+Dma.USART1_RX.2.Direction=DMA_PERIPH_TO_MEMORY
+Dma.USART1_RX.2.Instance=DMA1_Channel5
+Dma.USART1_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
+Dma.USART1_RX.2.MemInc=DMA_MINC_ENABLE
+Dma.USART1_RX.2.Mode=DMA_NORMAL
+Dma.USART1_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.USART1_RX.2.PeriphInc=DMA_PINC_DISABLE
+Dma.USART1_RX.2.Priority=DMA_PRIORITY_HIGH
+Dma.USART1_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
 Dma.USART1_TX.1.Direction=DMA_MEMORY_TO_PERIPH
 Dma.USART1_TX.1.Instance=DMA1_Channel4
 Dma.USART1_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
@@ -31,7 +31,7 @@ Dma.USART1_TX.1.MemInc=DMA_MINC_ENABLE
 Dma.USART1_TX.1.Mode=DMA_NORMAL
 Dma.USART1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
 Dma.USART1_TX.1.PeriphInc=DMA_PINC_DISABLE
-Dma.USART1_TX.1.Priority=DMA_PRIORITY_VERY_HIGH
+Dma.USART1_TX.1.Priority=DMA_PRIORITY_HIGH
 Dma.USART1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
 File.Version=6
 GPIO.groupedBy=Group By Peripherals
@@ -45,35 +45,38 @@ Mcu.IP3=RCC
 Mcu.IP4=RTC
 Mcu.IP5=SYS
 Mcu.IP6=TIM1
-Mcu.IP7=USART1
-Mcu.IPNb=8
+Mcu.IP7=TIM3
+Mcu.IP8=USART1
+Mcu.IPNb=9
 Mcu.Name=STM32F103R(8-B)Tx
 Mcu.Package=LQFP64
 Mcu.Pin0=PC13-TAMPER-RTC
 Mcu.Pin1=PC14-OSC32_IN
-Mcu.Pin10=PA9
-Mcu.Pin11=PA10
-Mcu.Pin12=PA13
-Mcu.Pin13=PA14
-Mcu.Pin14=PB3
-Mcu.Pin15=PB4
-Mcu.Pin16=PB5
-Mcu.Pin17=PB8
-Mcu.Pin18=PB9
-Mcu.Pin19=VP_RTC_VS_RTC_Activate
+Mcu.Pin10=PA8
+Mcu.Pin11=PA9
+Mcu.Pin12=PA10
+Mcu.Pin13=PA13
+Mcu.Pin14=PA14
+Mcu.Pin15=PB3
+Mcu.Pin16=PB4
+Mcu.Pin17=PB5
+Mcu.Pin18=PB8
+Mcu.Pin19=PB9
 Mcu.Pin2=PC15-OSC32_OUT
-Mcu.Pin20=VP_RTC_VS_RTC_Calendar
-Mcu.Pin21=VP_RTC_No_RTC_Output
-Mcu.Pin22=VP_SYS_VS_Systick
-Mcu.Pin23=VP_TIM1_VS_ClockSourceINT
+Mcu.Pin20=VP_RTC_VS_RTC_Activate
+Mcu.Pin21=VP_RTC_VS_RTC_Calendar
+Mcu.Pin22=VP_RTC_No_RTC_Output
+Mcu.Pin23=VP_SYS_VS_Systick
+Mcu.Pin24=VP_TIM1_VS_ClockSourceINT
+Mcu.Pin25=VP_TIM3_VS_ClockSourceINT
 Mcu.Pin3=PD0-OSC_IN
 Mcu.Pin4=PD1-OSC_OUT
 Mcu.Pin5=PA2
 Mcu.Pin6=PA3
 Mcu.Pin7=PA5
-Mcu.Pin8=PB10
-Mcu.Pin9=PA8
-Mcu.PinsNb=24
+Mcu.Pin8=PA6
+Mcu.Pin9=PB10
+Mcu.PinsNb=26
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32F103RBTx
@@ -132,9 +135,9 @@ PA5.GPIO_PuPd=GPIO_NOPULL
 PA5.GPIO_Speed=GPIO_SPEED_FREQ_LOW
 PA5.Locked=true
 PA5.Signal=GPIO_Output
+PA6.Signal=S_TIM3_CH1
 PA8.Signal=S_TIM1_CH1
-PA9.GPIOParameters=GPIO_Mode
-PA9.GPIO_Mode=GPIO_MODE_AF_OD
+PA9.Locked=true
 PA9.Mode=Half_duplex(single_wire_mode)
 PA9.Signal=USART1_TX
 PB10.GPIOParameters=GPIO_PuPd,GPIO_Label
@@ -211,7 +214,7 @@ ProjectManager.ToolChainLocation=
 ProjectManager.UAScriptAfterPath=
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=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_USART1_UART_Init-USART1-false-HAL-true,5-MX_RTC_Init-RTC-false-HAL-true,6-MX_I2C1_Init-I2C1-false-HAL-true,7-MX_TIM1_Init-TIM1-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_RTC_Init-RTC-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_TIM1_Init-TIM1-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true
 RCC.ADCFreqValue=32000000
 RCC.AHBFreq_Value=64000000
 RCC.APB1CLKDivider=RCC_HCLK_DIV2
@@ -241,14 +244,18 @@ SH.GPXTI13.0=GPIO_EXTI13
 SH.GPXTI13.ConfNb=1
 SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1
 SH.S_TIM1_CH1.ConfNb=1
+SH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1
+SH.S_TIM3_CH1.ConfNb=1
 TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
 TIM1.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period
 TIM1.Period=100-1
 TIM1.Prescaler=64-1
-USART1.BaudRate=9600
-USART1.IPParameters=VirtualMode,BaudRate,WordLength
+TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
+TIM3.IPParameters=Channel-PWM Generation1 CH1,Period,Pulse-PWM Generation1 CH1
+TIM3.Period=8000
+TIM3.Pulse-PWM\ Generation1\ CH1=4000
+USART1.IPParameters=VirtualMode
 USART1.VirtualMode=VM_ASYNC
-USART1.WordLength=WORDLENGTH_8B
 VP_RTC_No_RTC_Output.Mode=RTC_OUT_NO
 VP_RTC_No_RTC_Output.Signal=RTC_No_RTC_Output
 VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
@@ -259,5 +266,7 @@ VP_SYS_VS_Systick.Mode=SysTick
 VP_SYS_VS_Systick.Signal=SYS_VS_Systick
 VP_TIM1_VS_ClockSourceINT.Mode=Internal
 VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
+VP_TIM3_VS_ClockSourceINT.Mode=Internal
+VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
 board=NUCLEO-F103RB
 isbadioc=false