Jelajahi Sumber

Обмен в одну сторону работает.

TelenkovDmitry 1 bulan lalu
induk
melakukan
a07f0ce272
29 mengubah file dengan 12988 tambahan dan 12137 penghapusan
  1. 2 0
      cube_example/robot/Core/Inc/stm32g0xx_it.h
  2. 22 3
      cube_example/robot/Core/Src/main.c
  3. 26 0
      cube_example/robot/Core/Src/stm32g0xx_hal_msp.c
  4. 30 1
      cube_example/robot/Core/Src/stm32g0xx_it.c
  5. 38 38
      cube_example/robot/EWARM/robot.ewd
  6. 1193 1192
      cube_example/robot/EWARM/robot.ewp
  7. TEMPAT SAMPAH
      cube_example/robot/EWARM/robot/BrowseInfo/.ninja_deps
  8. 15 0
      cube_example/robot/EWARM/robot/BrowseInfo/.ninja_log
  9. TEMPAT SAMPAH
      cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/main.pbi
  10. TEMPAT SAMPAH
      cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_hal_msp.pbi
  11. TEMPAT SAMPAH
      cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_it.pbi
  12. 44 0
      cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_it.pbi.dep
  13. TEMPAT SAMPAH
      cube_example/robot/EWARM/robot/BrowseInfo/robot.pbd
  14. TEMPAT SAMPAH
      cube_example/robot/EWARM/robot/BrowseInfo/robot.pbd.browse
  15. 11348 10866
      cube_example/robot/EWARM/robot/BrowseInfo/robot.pbw
  16. TEMPAT SAMPAH
      cube_example/robot/EWARM/robot/BrowseInfo/robot_part0.pbi
  17. 21 1
      cube_example/robot/EWARM/settings/robot.dnx
  18. 34 7
      cube_example/robot/robot.ioc
  19. 4 2
      desk/modules/terminal/terminal_usartbridge.cpp
  20. 71 3
      desk/modules/uart_bridge/uart_bridge.cpp
  21. 3 0
      desk/modules/uart_bridge/uart_bridge.h
  22. 16 0
      desk/user/hal_callback.cpp
  23. 11 8
      desk/user/main.cpp
  24. 1 1
      project/ewarm/desk/desk.ewp
  25. 2 2
      project/ewarm/settings/tuber.wsdt
  26. 47 5
      robot/modules/sc60224/encoder.cpp
  27. 53 6
      robot/modules/uart_bridge/uart_bridge.cpp
  28. 5 0
      robot/modules/uart_bridge/uart_bridge.h
  29. 2 2
      robot/user/main.cpp

+ 2 - 0
cube_example/robot/Core/Inc/stm32g0xx_it.h

@@ -51,6 +51,8 @@ void HardFault_Handler(void);
 void SVC_Handler(void);
 void PendSV_Handler(void);
 void SysTick_Handler(void);
+void DMA1_Channel1_IRQHandler(void);
+void TIM1_BRK_UP_TRG_COM_IRQHandler(void);
 /* USER CODE BEGIN EFP */
 
 /* USER CODE END EFP */

+ 22 - 3
cube_example/robot/Core/Src/main.c

@@ -43,6 +43,7 @@
 TIM_HandleTypeDef htim1;
 
 UART_HandleTypeDef huart2;
+DMA_HandleTypeDef hdma_usart2_tx;
 
 /* USER CODE BEGIN PV */
 
@@ -51,6 +52,7 @@ UART_HandleTypeDef huart2;
 /* Private function prototypes -----------------------------------------------*/
 void SystemClock_Config(void);
 static void MX_GPIO_Init(void);
+static void MX_DMA_Init(void);
 static void MX_USART2_UART_Init(void);
 static void MX_TIM1_Init(void);
 /* USER CODE BEGIN PFP */
@@ -91,6 +93,7 @@ int main(void)
 
   /* Initialize all configured peripherals */
   MX_GPIO_Init();
+  MX_DMA_Init();
   MX_USART2_UART_Init();
   MX_TIM1_Init();
   /* USER CODE BEGIN 2 */
@@ -177,8 +180,8 @@ static void MX_TIM1_Init(void)
   htim1.Init.Period = 65535;
   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
   htim1.Init.RepetitionCounter = 0;
-  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
-  sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
+  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
+  sConfig.EncoderMode = TIM_ENCODERMODE_TI12;
   sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
   sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
   sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
@@ -186,7 +189,7 @@ static void MX_TIM1_Init(void)
   sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
   sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
   sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
-  sConfig.IC2Filter = 0;
+  sConfig.IC2Filter = 10;
   if (HAL_TIM_Encoder_Init(&htim1, &sConfig) != HAL_OK)
   {
     Error_Handler();
@@ -240,6 +243,22 @@ static void MX_USART2_UART_Init(void)
 
 }
 
+/**
+  * Enable DMA controller clock
+  */
+static void MX_DMA_Init(void)
+{
+
+  /* DMA controller clock enable */
+  __HAL_RCC_DMA1_CLK_ENABLE();
+
+  /* DMA interrupt init */
+  /* DMA1_Channel1_IRQn interrupt configuration */
+  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
+  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
+
+}
+
 /**
   * @brief GPIO Initialization Function
   * @param None

+ 26 - 0
cube_example/robot/Core/Src/stm32g0xx_hal_msp.c

@@ -23,6 +23,7 @@
 /* USER CODE BEGIN Includes */
 
 /* USER CODE END Includes */
+extern DMA_HandleTypeDef hdma_usart2_tx;
 
 /* Private typedef -----------------------------------------------------------*/
 /* USER CODE BEGIN TD */
@@ -114,6 +115,9 @@ void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* htim_encoder)
     GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
+    /* TIM1 interrupt Init */
+    HAL_NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
     /* USER CODE BEGIN TIM1_MspInit 1 */
 
     /* USER CODE END TIM1_MspInit 1 */
@@ -146,6 +150,8 @@ void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* htim_encoder)
 
     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3);
 
+    /* TIM1 interrupt DeInit */
+    HAL_NVIC_DisableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
     /* USER CODE BEGIN TIM1_MspDeInit 1 */
 
     /* USER CODE END TIM1_MspDeInit 1 */
@@ -183,6 +189,24 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
     GPIO_InitStruct.Alternate = GPIO_AF1_USART2;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
+    /* USART2 DMA Init */
+    /* USART2_TX Init */
+    hdma_usart2_tx.Instance = DMA1_Channel1;
+    hdma_usart2_tx.Init.Request = DMA_REQUEST_USART2_TX;
+    hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+    hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+    hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
+    hdma_usart2_tx.Init.Mode = DMA_NORMAL;
+    hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
+    if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
+    {
+      Error_Handler();
+    }
+
+    __HAL_LINKDMA(huart,hdmatx,hdma_usart2_tx);
+
     /* USER CODE BEGIN USART2_MspInit 1 */
 
     /* USER CODE END USART2_MspInit 1 */
@@ -214,6 +238,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
     */
     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
 
+    /* USART2 DMA DeInit */
+    HAL_DMA_DeInit(huart->hdmatx);
     /* USER CODE BEGIN USART2_MspDeInit 1 */
 
     /* USER CODE END USART2_MspDeInit 1 */

+ 30 - 1
cube_example/robot/Core/Src/stm32g0xx_it.c

@@ -55,7 +55,8 @@
 /* USER CODE END 0 */
 
 /* External variables --------------------------------------------------------*/
-
+extern TIM_HandleTypeDef htim1;
+extern DMA_HandleTypeDef hdma_usart2_tx;
 /* USER CODE BEGIN EV */
 
 /* USER CODE END EV */
@@ -140,6 +141,34 @@ void SysTick_Handler(void)
 /* please refer to the startup file (startup_stm32g0xx.s).                    */
 /******************************************************************************/
 
+/**
+  * @brief This function handles DMA1 channel 1 interrupt.
+  */
+void DMA1_Channel1_IRQHandler(void)
+{
+  /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
+
+  /* USER CODE END DMA1_Channel1_IRQn 0 */
+  HAL_DMA_IRQHandler(&hdma_usart2_tx);
+  /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
+
+  /* USER CODE END DMA1_Channel1_IRQn 1 */
+}
+
+/**
+  * @brief This function handles TIM1 break, update, trigger and commutation interrupts.
+  */
+void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
+{
+  /* USER CODE BEGIN TIM1_BRK_UP_TRG_COM_IRQn 0 */
+
+  /* USER CODE END TIM1_BRK_UP_TRG_COM_IRQn 0 */
+  HAL_TIM_IRQHandler(&htim1);
+  /* USER CODE BEGIN TIM1_BRK_UP_TRG_COM_IRQn 1 */
+
+  /* USER CODE END TIM1_BRK_UP_TRG_COM_IRQn 1 */
+}
+
 /* USER CODE BEGIN 1 */
 
 /* USER CODE END 1 */

+ 38 - 38
cube_example/robot/EWARM/robot.ewd

@@ -36,7 +36,7 @@
                 </option>
                 <option>
                     <name>MacFile</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>MemOverride</name>
@@ -44,7 +44,7 @@
                 </option>
                 <option>
                     <name>MemFile</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>RunToEnable</name>
@@ -60,7 +60,7 @@
                 </option>
                 <option>
                     <name>CExtraOptions</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CFpuProcessor</name>
@@ -68,7 +68,7 @@
                 </option>
                 <option>
                     <name>OCDDFArgumentProducer</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCDownloadSuppressDownload</name>
@@ -104,7 +104,7 @@
                 </option>
                 <option>
                     <name>MacFile2</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CDevice</name>
@@ -112,7 +112,7 @@
                 </option>
                 <option>
                     <name>FlashLoadersV3</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCImagesSuppressCheck1</name>
@@ -120,7 +120,7 @@
                 </option>
                 <option>
                     <name>OCImagesPath1</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCImagesSuppressCheck2</name>
@@ -128,7 +128,7 @@
                 </option>
                 <option>
                     <name>OCImagesPath2</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCImagesSuppressCheck3</name>
@@ -136,7 +136,7 @@
                 </option>
                 <option>
                     <name>OCImagesPath3</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OverrideDefFlashBoard</name>
@@ -148,11 +148,11 @@
                 </option>
                 <option>
                     <name>OCImagesOffset2</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCImagesOffset3</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCImagesUse1</name>
@@ -184,15 +184,15 @@
                 </option>
                 <option>
                     <name>OCMulticoreWorkspace</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCMulticoreSlaveProject</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCMulticoreSlaveConfiguration</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCDownloadExtraImage</name>
@@ -216,7 +216,7 @@
                 </option>
                 <option>
                     <name>OCMulticoreSessionFile</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCTpiuBaseOption</name>
@@ -228,7 +228,7 @@
                 </option>
                 <option>
                     <name>OCOverrideSlavePath</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>C_32_64Device</name>
@@ -244,11 +244,11 @@
                 </option>
                 <option>
                     <name>AuthSdmManifest</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>AuthSdmExplicitLib</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>AuthEnforce</name>
@@ -277,7 +277,7 @@
                 </option>
                 <option>
                     <name>OCSimPspConfigFile</name>
-                    <state></state>
+                    <state />
                 </option>
             </data>
         </settings>
@@ -294,7 +294,7 @@
                 </option>
                 <option>
                     <name>Fast Model</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCADILogFileCheck</name>
@@ -461,7 +461,7 @@
                 </option>
                 <option>
                     <name>OCProbeConfig</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CMSISDAPProbeConfigRadio</name>
@@ -473,7 +473,7 @@
                 </option>
                 <option>
                     <name>ICpuName</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCJetEmuParams</name>
@@ -481,7 +481,7 @@
                 </option>
                 <option>
                     <name>CCCMSISDAPUsbSerialNo</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCCMSISDAPUsbSerialNoSelect</name>
@@ -502,7 +502,7 @@
                 </option>
                 <option>
                     <name>CE2UsbSerialNo</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CE2IdCodeEditB</name>
@@ -663,7 +663,7 @@
                 </option>
                 <option>
                     <name>IjetCpuClockEdit</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>IjetSwoPrescalerList</name>
@@ -756,7 +756,7 @@
                 </option>
                 <option>
                     <name>OCProbeConfig</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>IjetProbeConfigRadio</name>
@@ -776,7 +776,7 @@
                 </option>
                 <option>
                     <name>ICpuName</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>OCJetEmuParams</name>
@@ -802,7 +802,7 @@
                 </option>
                 <option>
                     <name>CCIjetUsbSerialNo</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCIjetUsbSerialNoSelect</name>
@@ -1029,7 +1029,7 @@
                 </option>
                 <option>
                     <name>CCJLinkUsbSerialNo</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCTcpIpAlt</name>
@@ -1038,11 +1038,11 @@
                 </option>
                 <option>
                     <name>CCJLinkTcpIpSerialNo</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCCpuClockEdit</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCSwoClockAuto</name>
@@ -1099,7 +1099,7 @@
                 </option>
                 <option>
                     <name>CCLmiftdiUsbSerialNo</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCLmiftdiUsbSerialNoSelect</name>
@@ -1252,7 +1252,7 @@
                 </option>
                 <option>
                     <name>CCSTLinkUsbSerialNo</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCSTLinkUsbSerialNoSelect</name>
@@ -1265,7 +1265,7 @@
                 </option>
                 <option>
                     <name>CCSTLinkDAPNumber</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCSTLinkDebugAccessPortRadio</name>
@@ -1403,11 +1403,11 @@
                 </option>
                 <option>
                     <name>TIPackage</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>BoardFile</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>DoLogfile</name>
@@ -1499,7 +1499,7 @@
                 </option>
                 <option>
                     <name>CCXds100CpuClockEdit</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCXds100SwoClockAuto</name>
@@ -1520,7 +1520,7 @@
                 </option>
                 <option>
                     <name>CCXds100UsbSerialNo</name>
-                    <state></state>
+                    <state />
                 </option>
                 <option>
                     <name>CCXds100UsbSerialNoSelect</name>

+ 1193 - 1192
cube_example/robot/EWARM/robot.ewp

@@ -1,1200 +1,1201 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project>
-    <fileVersion>4</fileVersion>
-    <configuration>
-        <name>robot</name>
-        <toolchain>
-            <name>ARM</name>
-        </toolchain>
+  <fileVersion>4</fileVersion>
+  <configuration>
+    <name>robot</name>
+    <toolchain>
+      <name>ARM</name>
+    </toolchain>
+    <debug>1</debug>
+    <settings>
+      <name>General</name>
+      <archiveVersion>3</archiveVersion>
+      <data>
+        <version>37</version>
+        <wantNonLocal>1</wantNonLocal>
         <debug>1</debug>
-        <settings>
-            <name>General</name>
-            <archiveVersion>3</archiveVersion>
-            <data>
-                <version>37</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>BrowseInfoPath</name>
-                    <state>robot\BrowseInfo</state>
-                </option>
-                <option>
-                    <name>ExePath</name>
-                    <state>robot/Exe</state>
-                </option>
-                <option>
-                    <name>ObjPath</name>
-                    <state>robot/Obj</state>
-                </option>
-                <option>
-                    <name>ListPath</name>
-                    <state>robot/List</state>
-                </option>
-                <option>
-                    <name>GEndianMode</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>Input description</name>
-                    <state>Full formatting, without multibyte support.</state>
-                </option>
-                <option>
-                    <name>Output description</name>
-                    <state>Full formatting, without multibyte support.</state>
-                </option>
-                <option>
-                    <name>GOutputBinary</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGCoreOrChip</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibSelect</name>
-                    <version>0</version>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibSelectSlave</name>
-                    <version>0</version>
-                    <state>2</state>
-                </option>
-                <option>
-                    <name>RTDescription</name>
-                    <state>Use the full configuration of the C/C++ runtime library. Full locale interface, C locale, file descriptor support, multibytes in printf and scanf, and hex floats in strtod.</state>
-                </option>
-                <option>
-                    <name>OGProductVersion</name>
-                    <state>5.10.0.159</state>
-                </option>
-                <option>
-                    <name>OGLastSavedByProductVersion</name>
-                    <state>9.60.3.7274</state>
-                </option>
-                <option>
-                    <name>OGChipSelectEditMenu</name>
-                    <state>STM32G030F6	ST STM32G030F6</state>
-                </option>
-                <option>
-                    <name>GenLowLevelInterface</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>GEndianModeBE</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGBufferedTerminalOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GenStdoutInterface</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>RTConfigPath2</name>
-                    <state>$TOOLKIT_DIR$\inc\c\DLib_Config_Full.h</state>
-                </option>
-                <option>
-                    <name>GBECoreSlave</name>
-                    <version>34</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGUseCmsis</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGUseCmsisDspLib</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GRuntimeLibThreads</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CoreVariant</name>
-                    <version>34</version>
-                    <state>35</state>
-                </option>
-                <option>
-                    <name>GFPUDeviceSlave</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>FPU2</name>
-                    <version>0</version>
-                    <state>5</state>
-                </option>
-                <option>
-                    <name>NrRegs</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>NEON</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GFPUCoreSlave2</name>
-                    <version>34</version>
-                    <state>61</state>
-                </option>
-                <option>
-                    <name>OGCMSISPackSelectDevice</name>
-                </option>
-                <option>
-                    <name>OgLibHeap</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGLibAdditionalLocale</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGPrintfVariant</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGPrintfMultibyteSupport</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OGScanfVariant</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGScanfMultibyteSupport</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>GenLocaleTags</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>GenLocaleDisplayOnly</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>DSPExtension</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>TrustZone</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>TrustZoneModes</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OGAarch64Abi</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OG_32_64Device</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>BuildFilesPath</name>
-                    <state>robot</state>
-                </option>
-                <option>
-                    <name>PointerAuthentication</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>FPU64</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OG_32_64DeviceCoreSlave</name>
-                    <version>34</version>
-                    <state>35</state>
-                </option>
-                <option>
-                    <name>GOutputSo</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>ICCARM</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>39</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>CCOptimizationNoSizeConstraints</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCDefines</name>
-                    <state>USE_HAL_DRIVER</state>
-                    <state>STM32G030xx</state>
-                </option>
-                <option>
-                    <name>CCPreprocFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPreprocComments</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPreprocLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCMnemonics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListCMessages</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListAssFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCListAssSource</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEnableRemarks</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCDiagSuppress</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCDiagRemark</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCDiagWarning</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCDiagError</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCObjPrefix</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCAllowList</name>
-                    <version>1</version>
-                    <state>11111110</state>
-                </option>
-                <option>
-                    <name>CCDebugInfo</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IEndianMode</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IExtraOptionsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IExtraOptions</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCLangConformance</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCSignedPlainChar</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCRequirePrototypes</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCDiagWarnAreErr</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCompilerRuntimeInfo</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OutputFile</name>
-                    <state>$FILE_BNAME$.o</state>
-                </option>
-                <option>
-                    <name>CCLibConfigHeader</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>PreInclude</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CCIncludePath2</name>
-                    <state>$PROJ_DIR$/../Core/Inc</state>
-                    <state>$PROJ_DIR$/../Drivers/STM32G0xx_HAL_Driver/Inc</state>
-                    <state>$PROJ_DIR$/../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy</state>
-                    <state>$PROJ_DIR$/../Drivers/CMSIS/Device/ST/STM32G0xx/Include</state>
-                    <state>$PROJ_DIR$/../Drivers/CMSIS/Include</state>
-                </option>
-                <option>
-                    <name>CCStdIncCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCCodeSection</name>
-                    <state>.text</state>
-                </option>
-                <option>
-                    <name>IProcessorMode2</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCOptLevel</name>
-                    <state>3</state>
-                </option>
-                <option>
-                    <name>CCOptStrategy</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCOptLevelSlave</name>
-                    <state>3</state>
-                </option>
-                <option>
-                    <name>CCPosIndRopi</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPosIndRwpi</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPosIndNoDynInit</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccLang</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccCDialect</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccAllowVLA</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccStaticDestr</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccCppInlineSemantics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccCmsis</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IccFloatSemantics</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCNoLiteralPool</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCOptStrategySlave</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCGuardCalls</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCEncSource</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEncOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCEncOutputBom</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCEncInput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccExceptions2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IccRTTI2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OICompilerExtraOption</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CCStackProtection</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPointerAutentiction</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCBranchTargetIdentification</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPosRadRwpi</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CCPosSharedSlave</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>AARM</name>
-            <archiveVersion>2</archiveVersion>
-            <data>
-                <version>12</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>AObjPrefix</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AEndian</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>ACaseSensitivity</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>MacroChars</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnWhat</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AWarnOne</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AWarnRange1</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AWarnRange2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>ADebug</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AltRegisterNames</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ADefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AList</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AListHeader</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AListing</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>Includes</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacDefs</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MacExps</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>MacExec</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>OnlyAssed</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>MultiLine</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>PageLengthCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>PageLength</name>
-                    <state>80</state>
-                </option>
-                <option>
-                    <name>TabSpacing</name>
-                    <state>8</state>
-                </option>
-                <option>
-                    <name>AXRef</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefDefines</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefInternal</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AXRefDual</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>AOutputFile</name>
-                    <state>$FILE_BNAME$.o</state>
-                </option>
-                <option>
-                    <name>ALimitErrorsCheck</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>ALimitErrorsEdit</name>
-                    <state>100</state>
-                </option>
-                <option>
-                    <name>AIgnoreStdInclude</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AUserIncludes</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AExtraOptionsCheckV2</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>AExtraOptionsV2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>AsmNoLiteralPool</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>PreInclude</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>A_32_64Device</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>OBJCOPY</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>1</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>OOCOutputFormat</name>
-                    <version>3</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OCOutputOverride</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OOCOutputFile</name>
-                    <state>robot.hex</state>
-                </option>
-                <option>
-                    <name>OOCCommandLineProducer</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>OOCObjCopyEnable</name>
-                    <state>1</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>CUSTOM</name>
-            <archiveVersion>4</archiveVersion>
-            <data>
-                <extensions></extensions>
-                <cmdline></cmdline>
-                <buildSequence>inputOutputBased</buildSequence>
-            </data>
-        </settings>
-        <settings>
-            <name>ILINK</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>28</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>IlinkOutputFile</name>
-                    <state>robot.out</state>
-                </option>
-                <option>
-                    <name>IlinkLibIOConfig</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkInputFileSlave</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkDebugInfoEnable</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkKeepSymbols</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinaryFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinarySymbol</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinarySegment</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinaryAlign</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkDefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkConfigDefines</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkMapFile</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkLogFile</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogInitialization</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogModule</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogSection</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogVeneer</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIcfOverride</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFile</name>
-                    <state>$PROJ_DIR$/stm32g030xx_flash.icf</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFileSlave</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkEnableRemarks</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkSuppressDiags</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsRem</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsWarn</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkTreatAsErr</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkWarningsAreErrors</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkUseExtraOptions</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkExtraOptions</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkLowLevelInterfaceSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkAutoLibEnable</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkAdditionalLibs</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkOverrideProgramEntryLabel</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkProgramEntryLabelSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkProgramEntryLabel</name>
-                    <state>__iar_program_start</state>
-                </option>
-                <option>
-                    <name>DoFill</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>FillerByte</name>
-                    <state>0xFF</state>
-                </option>
-                <option>
-                    <name>FillerStart</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>FillerEnd</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>CrcSize</name>
-                    <version>0</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcAlign</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcPoly</name>
-                    <state>0x11021</state>
-                </option>
-                <option>
-                    <name>CrcCompl</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CrcBitOrder</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>CrcInitialValue</name>
-                    <state>0x0</state>
-                </option>
-                <option>
-                    <name>DoCrc</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkBE8Slave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkBufferedTerminalOutput</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkStdoutInterfaceSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcFullSize</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIElfToolPostProcess</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogAutoLibSelect</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogRedirSymbols</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogUnusedFragments</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCrcReverseByteOrder</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCrcUseAsInput</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptInline</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkOptExceptionsAllow</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptExceptionsForce</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkCmsis</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptMergeDuplSections</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkOptUseVfe</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkOptForceVfe</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkStackAnalysisEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkStackControlFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkStackCallGraphFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>CrcAlgorithm</name>
-                    <version>1</version>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>CrcUnitSize</name>
-                    <version>0</version>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkThreadsSlave</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkLogCallGraph</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkIcfFile_AltDefault</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkEncInput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkEncOutput</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkEncOutputBom</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkHeapSelect</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkLocaleSelect</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkTrustzoneImportLibraryOut</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>OILinkExtraOption</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkRawBinaryFile2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinarySymbol2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinarySegment2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkRawBinaryAlign2</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkLogCrtRoutineSelection</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogFragmentInfo</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogInlining</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkLogMerging</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkDemangle</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkWrapperFileEnable</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IlinkWrapperFile</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IlinkProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkFpuProcessor</name>
-                    <state>1</state>
-                </option>
-                <option>
-                    <name>IlinkSharedSlave</name>
-                    <state>0</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>IARCHIVE</name>
-            <archiveVersion>0</archiveVersion>
-            <data>
-                <version>0</version>
-                <wantNonLocal>1</wantNonLocal>
-                <debug>1</debug>
-                <option>
-                    <name>IarchiveInputs</name>
-                    <state></state>
-                </option>
-                <option>
-                    <name>IarchiveOverride</name>
-                    <state>0</state>
-                </option>
-                <option>
-                    <name>IarchiveOutput</name>
-                    <state>###Unitialized###</state>
-                </option>
-            </data>
-        </settings>
-        <settings>
-            <name>BUILDACTION</name>
-            <archiveVersion>2</archiveVersion>
-            <data />
-        </settings>
-        <settings>
-            <name>Coder</name>
-            <archiveVersion>0</archiveVersion>
-            <data />
-        </settings>
-    </configuration>
+        <option>
+          <name>BrowseInfoPath</name>
+          <state>robot\BrowseInfo</state>
+        </option>
+        <option>
+          <name>ExePath</name>
+          <state>robot/Exe</state>
+        </option>
+        <option>
+          <name>ObjPath</name>
+          <state>robot/Obj</state>
+        </option>
+        <option>
+          <name>ListPath</name>
+          <state>robot/List</state>
+        </option>
+        <option>
+          <name>GEndianMode</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Input description</name>
+          <state>Full formatting, without multibyte support.</state>
+        </option>
+        <option>
+          <name>Output description</name>
+          <state>Full formatting, without multibyte support.</state>
+        </option>
+        <option>
+          <name>GOutputBinary</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGCoreOrChip</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GRuntimeLibSelect</name>
+          <version>0</version>
+          <state>2</state>
+        </option>
+        <option>
+          <name>GRuntimeLibSelectSlave</name>
+          <version>0</version>
+          <state>2</state>
+        </option>
+        <option>
+          <name>RTDescription</name>
+          <state>Use the full configuration of the C/C++ runtime library. Full locale interface, C locale, file descriptor support, multibytes in printf and scanf, and hex floats in strtod.</state>
+        </option>
+        <option>
+          <name>OGProductVersion</name>
+          <state>5.10.0.159</state>
+        </option>
+        <option>
+          <name>OGLastSavedByProductVersion</name>
+          <state>9.60.3.7274</state>
+        </option>
+        <option>
+          <name>OGChipSelectEditMenu</name>
+          <state>STM32G030F6	ST STM32G030F6</state>
+        </option>
+        <option>
+          <name>GenLowLevelInterface</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEndianModeBE</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OGBufferedTerminalOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GenStdoutInterface</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RTConfigPath2</name>
+          <state>$TOOLKIT_DIR$\inc\c\DLib_Config_Full.h</state>
+        </option>
+        <option>
+          <name>GBECoreSlave</name>
+          <version>34</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGUseCmsis</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGUseCmsisDspLib</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GRuntimeLibThreads</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CoreVariant</name>
+          <version>34</version>
+          <state>35</state>
+        </option>
+        <option>
+          <name>GFPUDeviceSlave</name>
+          <state></state>
+        </option>
+        <option>
+          <name>FPU2</name>
+          <version>0</version>
+          <state>5</state>
+        </option>
+        <option>
+          <name>NrRegs</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>NEON</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GFPUCoreSlave2</name>
+          <version>34</version>
+          <state>61</state>
+        </option>
+        <option>
+          <name>OGCMSISPackSelectDevice</name>
+        </option>
+        <option>
+          <name>OgLibHeap</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGLibAdditionalLocale</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGPrintfVariant</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OGPrintfMultibyteSupport</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGScanfVariant</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OGScanfMultibyteSupport</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GenLocaleTags</name>
+          <state></state>
+        </option>
+        <option>
+          <name>GenLocaleDisplayOnly</name>
+          <state></state>
+        </option>
+        <option>
+          <name>DSPExtension</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>TrustZone</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>TrustZoneModes</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OGAarch64Abi</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OG_32_64Device</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>BuildFilesPath</name>
+          <state>robot</state>
+        </option>
+        <option>
+          <name>PointerAuthentication</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>FPU64</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OG_32_64DeviceCoreSlave</name>
+          <version>34</version>
+          <state>35</state>
+        </option>
+        <option>
+          <name>GOutputSo</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>ICCARM</name>
+      <archiveVersion>2</archiveVersion>
+      <data>
+        <version>39</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>CCOptimizationNoSizeConstraints</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDefines</name>
+          <state>USE_HAL_DRIVER</state>
+          <state>STM32G030xx</state>
+        </option>
+        <option>
+          <name>CCPreprocFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPreprocComments</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPreprocLine</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCMnemonics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCMessages</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListAssFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListAssSource</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCEnableRemarks</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDiagSuppress</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagRemark</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagWarning</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagError</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCObjPrefix</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCAllowList</name>
+          <version>1</version>
+          <state>11111110</state>
+        </option>
+        <option>
+          <name>CCDebugInfo</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IEndianMode</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IProcessor</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCLangConformance</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCSignedPlainChar</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCRequirePrototypes</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDiagWarnAreErr</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCCompilerRuntimeInfo</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IFpuProcessor</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>$FILE_BNAME$.o</state>
+        </option>
+        <option>
+          <name>CCLibConfigHeader</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>PreInclude</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCIncludePath2</name>
+          <state>$PROJ_DIR$/../Core/Inc</state>
+          <state>$PROJ_DIR$/../Drivers/STM32G0xx_HAL_Driver/Inc</state>
+          <state>$PROJ_DIR$/../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy</state>
+          <state>$PROJ_DIR$/../Drivers/CMSIS/Device/ST/STM32G0xx/Include</state>
+          <state>$PROJ_DIR$/../Drivers/CMSIS/Include</state>
+        </option>
+        <option>
+          <name>CCStdIncCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCCodeSection</name>
+          <state>.text</state>
+        </option>
+        <option>
+          <name>IProcessorMode2</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptLevel</name>
+          <state>3</state>
+        </option>
+        <option>
+          <name>CCOptStrategy</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptLevelSlave</name>
+          <state>3</state>
+        </option>
+        <option>
+          <name>CCPosIndRopi</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPosIndRwpi</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPosIndNoDynInit</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccLang</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccCDialect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccAllowVLA</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccStaticDestr</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccCppInlineSemantics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccCmsis</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccFloatSemantics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCNoLiteralPool</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCOptStrategySlave</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCGuardCalls</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCEncSource</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCEncOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCEncOutputBom</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCEncInput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccExceptions2</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccRTTI2</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OICompilerExtraOption</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCStackProtection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPointerAutentiction</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCBranchTargetIdentification</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPosRadRwpi</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPosSharedSlave</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>AARM</name>
+      <archiveVersion>2</archiveVersion>
+      <data>
+        <version>12</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>AObjPrefix</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AEndian</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ACaseSensitivity</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>MacroChars</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnWhat</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnOne</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AWarnRange1</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AWarnRange2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ADebug</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AltRegisterNames</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ADefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AList</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AListHeader</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AListing</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>Includes</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MacDefs</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MacExps</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>MacExec</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OnlyAssed</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MultiLine</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLengthCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLength</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>TabSpacing</name>
+          <state>8</state>
+        </option>
+        <option>
+          <name>AXRef</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefDefines</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefInternal</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefDual</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AProcessor</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AFpuProcessor</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AOutputFile</name>
+          <state>$FILE_BNAME$.o</state>
+        </option>
+        <option>
+          <name>ALimitErrorsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ALimitErrorsEdit</name>
+          <state>100</state>
+        </option>
+        <option>
+          <name>AIgnoreStdInclude</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AUserIncludes</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AExtraOptionsCheckV2</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AExtraOptionsV2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AsmNoLiteralPool</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PreInclude</name>
+          <state></state>
+        </option>
+        <option>
+          <name>A_32_64Device</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>OBJCOPY</name>
+      <archiveVersion>0</archiveVersion>
+      <data>
+        <version>1</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>OOCOutputFormat</name>
+          <version>3</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OCOutputOverride</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OOCOutputFile</name>
+          <state>robot.hex</state>
+        </option>
+        <option>
+          <name>OOCCommandLineProducer</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OOCObjCopyEnable</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>CUSTOM</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <extensions></extensions>
+        <cmdline></cmdline>
+        <buildSequence>inputOutputBased</buildSequence>
+      </data>
+    </settings>
+    <settings>
+      <name>ILINK</name>
+      <archiveVersion>0</archiveVersion>
+      <data>
+        <version>28</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>IlinkOutputFile</name>
+          <state>robot.out</state>
+        </option>
+        <option>
+          <name>IlinkLibIOConfig</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkInputFileSlave</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkDebugInfoEnable</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkKeepSymbols</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkRawBinaryFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkRawBinarySymbol</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkRawBinarySegment</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkRawBinaryAlign</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkDefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkConfigDefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkMapFile</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkLogFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogInitialization</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogModule</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogSection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogVeneer</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkIcfOverride</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkIcfFile</name>
+          <state>$PROJ_DIR$/stm32g030xx_flash.icf</state>
+        </option>
+        <option>
+          <name>IlinkIcfFileSlave</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkEnableRemarks</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkSuppressDiags</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkTreatAsRem</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkTreatAsWarn</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkTreatAsErr</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkWarningsAreErrors</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkUseExtraOptions</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkLowLevelInterfaceSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkAutoLibEnable</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkAdditionalLibs</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkOverrideProgramEntryLabel</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkProgramEntryLabelSelect</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkProgramEntryLabel</name>
+          <state>__iar_program_start</state>
+        </option>
+        <option>
+          <name>DoFill</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>FillerByte</name>
+          <state>0xFF</state>
+        </option>
+        <option>
+          <name>FillerStart</name>
+          <state>0x0</state>
+        </option>
+        <option>
+          <name>FillerEnd</name>
+          <state>0x0</state>
+        </option>
+        <option>
+          <name>CrcSize</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcAlign</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcPoly</name>
+          <state>0x11021</state>
+        </option>
+        <option>
+          <name>CrcCompl</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcBitOrder</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcInitialValue</name>
+          <state>0x0</state>
+        </option>
+        <option>
+          <name>DoCrc</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkBE8Slave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkBufferedTerminalOutput</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkStdoutInterfaceSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcFullSize</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkIElfToolPostProcess</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogAutoLibSelect</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogRedirSymbols</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogUnusedFragments</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkCrcReverseByteOrder</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkCrcUseAsInput</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkOptInline</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkOptExceptionsAllow</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkOptExceptionsForce</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkCmsis</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkOptMergeDuplSections</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkOptUseVfe</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkOptForceVfe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkStackAnalysisEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkStackControlFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkStackCallGraphFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CrcAlgorithm</name>
+          <version>1</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcUnitSize</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkThreadsSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkLogCallGraph</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkIcfFile_AltDefault</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkEncInput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkEncOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkEncOutputBom</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkHeapSelect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkLocaleSelect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkTrustzoneImportLibraryOut</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OILinkExtraOption</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkRawBinaryFile2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkRawBinarySymbol2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkRawBinarySegment2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkRawBinaryAlign2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkLogCrtRoutineSelection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogFragmentInfo</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogInlining</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkLogMerging</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkDemangle</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkWrapperFileEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IlinkWrapperFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IlinkProcessor</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkFpuProcessor</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkSharedSlave</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>IARCHIVE</name>
+      <archiveVersion>0</archiveVersion>
+      <data>
+        <version>0</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>IarchiveInputs</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IarchiveOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IarchiveOutput</name>
+          <state>###Unitialized###</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>BUILDACTION</name>
+      <archiveVersion>2</archiveVersion>
+      <data></data>
+    </settings>
+    <settings>
+      <name>Coder</name>
+      <archiveVersion>0</archiveVersion>
+      <data></data>
+    </settings>
+  </configuration>
+  <group>
+    <name>Application</name>
+    <group>
+      <name>EWARM</name>
+      <file>
+        <name>$PROJ_DIR$\startup_stm32g030xx.s</name>
+      </file>
+    </group>
+    <group>
+      <name>User</name>
+      <group>
+        <name>Core</name>
+        <file>
+          <name>$PROJ_DIR$\..\Core\Src\main.c</name>
+        </file>
+        <file>
+          <name>$PROJ_DIR$\..\Core\Src\stm32g0xx_it.c</name>
+        </file>
+        <file>
+          <name>$PROJ_DIR$\..\Core\Src\stm32g0xx_hal_msp.c</name>
+        </file>
+      </group>
+    </group>
+  </group>
+  <group>
+    <name>Drivers</name>
     <group>
-        <name>Application</name>
-        <group>
-            <name>EWARM</name>
-            <file>
-                <name>$PROJ_DIR$\startup_stm32g030xx.s</name>
-            </file>
-        </group>
-        <group>
-            <name>User</name>
-            <group>
-                <name>Core</name>
-                <file>
-                    <name>$PROJ_DIR$\..\Core\Src\main.c</name>
-                </file>
-                <file>
-                    <name>$PROJ_DIR$\..\Core\Src\stm32g0xx_hal_msp.c</name>
-                </file>
-                <file>
-                    <name>$PROJ_DIR$\..\Core\Src\stm32g0xx_it.c</name>
-                </file>
-            </group>
-        </group>
+      <name>CMSIS</name>
+      <file>
+        <name>$PROJ_DIR$\..\Core\Src\system_stm32g0xx.c</name>
+      </file>
     </group>
     <group>
-        <name>Drivers</name>
-        <group>
-            <name>CMSIS</name>
-            <file>
-                <name>$PROJ_DIR$\..\Core\Src\system_stm32g0xx.c</name>
-            </file>
-        </group>
-        <group>
-            <name>STM32G0xx_HAL_Driver</name>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_exti.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim_ex.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c</name>
-            </file>
-            <file>
-                <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_rcc.c</name>
-            </file>
-        </group>
+      <name>STM32G0xx_HAL_Driver</name>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim_ex.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_rcc.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_exti.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c</name>
+      </file>
+      <file>
+        <name>$PROJ_DIR$\..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c</name>
+      </file>
     </group>
+  </group>
 </project>
+

TEMPAT SAMPAH
cube_example/robot/EWARM/robot/BrowseInfo/.ninja_deps


+ 15 - 0
cube_example/robot/EWARM/robot/BrowseInfo/.ninja_log

@@ -48,3 +48,18 @@
 2078	2367	7764498011268081	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot_part3.pbi	e6eb0707d0bb9e73
 2367	2566	7764498013256019	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot.pbd	a831576d715c52d5
 2567	3981	7764498026992558	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot.pbw	52676dccbd849562
+1	579	7771305220860083	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/main.pbi	4c0d56f719aa3b6d
+3	601	7771305221074863	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_hal_msp.pbi	64c42bdd253f0a9f
+3	604	7771305221104835	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_it.pbi	f1e57aeef119f283
+605	996	7771305225039063	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot_part0.pbi	5255122bc048391c
+996	1238	7771305227463252	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot.pbd	a831576d715c52d5
+1239	2698	7771305241638593	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot.pbw	52676dccbd849562
+1	244	7771463390384292	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/main.pbi	4c0d56f719aa3b6d
+244	723	7771463395197836	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot_part0.pbi	5255122bc048391c
+723	952	7771463397490174	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot.pbd	a831576d715c52d5
+953	2384	7771463411481150	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot.pbw	52676dccbd849562
+1	300	7771468435870045	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_it.pbi	f1e57aeef119f283
+2	303	7771468435910005	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_hal_msp.pbi	64c42bdd253f0a9f
+304	646	7771468439366410	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot_part0.pbi	5255122bc048391c
+647	921	7771468442093577	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot.pbd	a831576d715c52d5
+921	2452	7771468457009559	D:/FlyElectronics/tuber/cube_example/robot/EWARM/robot/BrowseInfo/robot.pbw	52676dccbd849562

TEMPAT SAMPAH
cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/main.pbi


TEMPAT SAMPAH
cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_hal_msp.pbi


TEMPAT SAMPAH
cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_it.pbi


+ 44 - 0
cube_example/robot/EWARM/robot/BrowseInfo/Core_13247989168731456611.dir/stm32g0xx_it.pbi.dep

@@ -0,0 +1,44 @@
+D:\FlyElectronics\tuber\cube_example\robot\EWARM\robot\BrowseInfo\Core_13247989168731456611.dir\stm32g0xx_it.pbi: \
+  D:\FlyElectronics\tuber\cube_example\robot\Core\Src\stm32g0xx_it.c \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Core\Inc\main.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Core\Inc\stm32g0xx_hal_conf.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_rcc.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_def.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\CMSIS\Device\ST\STM32G0xx\Include\stm32g0xx.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\CMSIS\Device\ST\STM32G0xx\Include\stm32g030xx.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\CMSIS\Include\core_cm0plus.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\stdint.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\ycheck.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\yvals.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\DLib_Defaults.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\DLib_Config_Full.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\DLib_Product.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\CMSIS\Include\cmsis_version.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\CMSIS\Include\cmsis_compiler.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\CMSIS\Include\cmsis_iccarm.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\aarch32\iccarm_builtin.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\CMSIS\Include\mpu_armv7.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\CMSIS\Device\ST\STM32G0xx\Include\system_stm32g0xx.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\stddef.h \
+  C:\iar\ewarm-9.60.3\arm\inc\c\ysizet.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_rcc.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_rcc_ex.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_gpio.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_gpio_ex.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_dma.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_dma.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_dmamux.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_dma_ex.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_cortex.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_exti.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_flash.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_flash_ex.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_pwr.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_pwr_ex.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_tim.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_tim_ex.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_uart.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_uart_ex.h \
+  D:\FlyElectronics\tuber\cube_example\robot\EWARM\..\Core\Inc\stm32g0xx_it.h

TEMPAT SAMPAH
cube_example/robot/EWARM/robot/BrowseInfo/robot.pbd


TEMPAT SAMPAH
cube_example/robot/EWARM/robot/BrowseInfo/robot.pbd.browse


File diff ditekan karena terlalu besar
+ 11348 - 10866
cube_example/robot/EWARM/robot/BrowseInfo/robot.pbw


TEMPAT SAMPAH
cube_example/robot/EWARM/robot/BrowseInfo/robot_part0.pbi


+ 21 - 1
cube_example/robot/EWARM/settings/robot.dnx

@@ -15,9 +15,29 @@
         <WatchCond>_ 0</WatchCond>
         <Watch0>_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0</Watch0>
         <Watch1>_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0</Watch1>
-        <CStepIntDis>_ 0</CStepIntDis>
         <LeaveTargetRunning>_ 0</LeaveTargetRunning>
+        <CStepIntDis>_ 0</CStepIntDis>
     </StLinkDriver>
+    <TerminalIO>
+        <InputSource>1</InputSource>
+        <InputMode2>10</InputMode2>
+        <Filename>$PROJ_DIR$\TermIOInput.txt</Filename>
+        <InputEcho>1</InputEcho>
+        <ShowReset>0</ShowReset>
+        <InputEncodingICU>0</InputEncodingICU>
+        <OutputEncodingICU>0</OutputEncodingICU>
+    </TerminalIO>
+    <PlDriver>
+        <MemConfigValue>C:\iar\ewarm-9.60.3\arm\config\debugger\ST\STM32G030F6.ddf</MemConfigValue>
+    </PlDriver>
+    <ArmDriver>
+        <EnableCache>0</EnableCache>
+        <EnforceMemoryConfiguration>1</EnforceMemoryConfiguration>
+    </ArmDriver>
+    <TermIOLog>
+        <LoggingEnabled>_ 0</LoggingEnabled>
+        <LogFile>_ ""</LogFile>
+    </TermIOLog>
     <DisassembleMode>
         <mode>0</mode>
     </DisassembleMode>

+ 34 - 7
cube_example/robot/robot.ioc

@@ -2,17 +2,37 @@
 CAD.formats=
 CAD.pinconfig=
 CAD.provider=
+Dma.Request0=USART2_TX
+Dma.RequestsNb=1
+Dma.USART2_TX.0.Direction=DMA_MEMORY_TO_PERIPH
+Dma.USART2_TX.0.EventEnable=DISABLE
+Dma.USART2_TX.0.Instance=DMA1_Channel1
+Dma.USART2_TX.0.MemDataAlignment=DMA_MDATAALIGN_WORD
+Dma.USART2_TX.0.MemInc=DMA_MINC_ENABLE
+Dma.USART2_TX.0.Mode=DMA_NORMAL
+Dma.USART2_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.USART2_TX.0.PeriphInc=DMA_PINC_DISABLE
+Dma.USART2_TX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING
+Dma.USART2_TX.0.Priority=DMA_PRIORITY_LOW
+Dma.USART2_TX.0.RequestNumber=1
+Dma.USART2_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
+Dma.USART2_TX.0.SignalID=NONE
+Dma.USART2_TX.0.SyncEnable=DISABLE
+Dma.USART2_TX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
+Dma.USART2_TX.0.SyncRequestNumber=1
+Dma.USART2_TX.0.SyncSignalID=NONE
 File.Version=6
 GPIO.groupedBy=Group By Peripherals
 KeepUserPlacement=false
 Mcu.CPN=STM32G030F6P6TR
 Mcu.Family=STM32G0
-Mcu.IP0=NVIC
-Mcu.IP1=RCC
-Mcu.IP2=SYS
-Mcu.IP3=TIM1
-Mcu.IP4=USART2
-Mcu.IPNb=5
+Mcu.IP0=DMA
+Mcu.IP1=NVIC
+Mcu.IP2=RCC
+Mcu.IP3=SYS
+Mcu.IP4=TIM1
+Mcu.IP5=USART2
+Mcu.IPNb=6
 Mcu.Name=STM32G030F6Px
 Mcu.Package=TSSOP20
 Mcu.Pin0=PA1
@@ -27,12 +47,14 @@ Mcu.UserConstants=
 Mcu.UserName=STM32G030F6Px
 MxCube.Version=6.14.1
 MxDb.Version=DB.6.0.141
+NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.ForceEnableDMAVector=true
 NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 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.TIM1_BRK_UP_TRG_COM_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 PA1.Mode=Hardware Flow Control (RS485)
 PA1.Signal=USART2_DE
 PA14-BOOT0__PA15.StandardMode=true
@@ -78,7 +100,7 @@ ProjectManager.ToolChainLocation=
 ProjectManager.UAScriptAfterPath=
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-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_USART2_UART_Init-USART2-false-HAL-true,5-MX_TIM1_Init-TIM1-false-HAL-true
 RCC.ADCFreq_Value=64000000
 RCC.AHBFreq_Value=64000000
 RCC.APBFreq_Value=64000000
@@ -111,6 +133,11 @@ SH.S_TIM1_CH1.0=TIM1_CH1,Encoder_Interface
 SH.S_TIM1_CH1.ConfNb=1
 SH.S_TIM1_CH2.0=TIM1_CH2,Encoder_Interface
 SH.S_TIM1_CH2.ConfNb=1
+TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
+TIM1.EncoderMode=TIM_ENCODERMODE_TI12
+TIM1.IC1Filter=10
+TIM1.IC2Filter=10
+TIM1.IPParameters=AutoReloadPreload,EncoderMode,IC2Filter,IC1Filter
 USART2.IPParameters=VirtualMode-Asynchronous,VirtualMode-Hardware Flow Control (RS485)
 USART2.VirtualMode-Asynchronous=VM_ASYNC
 USART2.VirtualMode-Hardware\ Flow\ Control\ (RS485)=VM_ASYNC

+ 4 - 2
desk/modules/terminal/terminal_usartbridge.cpp

@@ -8,14 +8,16 @@ UsartBridgeTerminal terminalUsartBridge;
 
 extern Terminal* pTerminal;
 
-
+#if 0
 #ifdef __GNUC__    
   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)    
 #else    
   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)    
 #endif  
+#endif
 
-PUTCHAR_PROTOTYPE   
+//PUTCHAR_PROTOTYPE   
+int putchar(int ch)    
 {   
     terminalUsartBridge.uart.Instance->TDR = (uint16_t)(ch & 0x01FF);
     while (!(terminalUsartBridge.uart.Instance->ISR & UART_FLAG_TC)) {}

+ 71 - 3
desk/modules/uart_bridge/uart_bridge.cpp

@@ -1,21 +1,32 @@
 #include "stm32g4xx_hal.h"
 #include "uart_bridge.h"
 #include "uart_bridge_cfg.h"
+#include "cmsis_os.h"
 #include <stdio.h>
+#include <stdlib.h>
 
 
+#define RX_BUF_SIZE     20 
+
 UART_HandleTypeDef huart_bridge;
+osMessageQId mb_rx_queue;
 
-static uint8_t rx_byte;
+osThreadId ub_task_handle;
+void vUartBridge(void const *params);
 
+static uint8_t rx_byte;
+static uint32_t rx_byte_cnt = 0;
+static uint32_t error_cnt = 0;
+static char tx_buf[RX_BUF_SIZE];
 
+//
 void init_usart(void)
 {
     GPIO_InitTypeDef GPIO_InitStruct = {0};
     
     __HAL_RCC_GPIOA_CLK_ENABLE();
     __HAL_RCC_USART2_CLK_ENABLE();
-    
+        
     GPIO_InitStruct.Pin       = GPIO_PIN_2 | GPIO_PIN_3;
     GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull      = GPIO_PULLUP;
@@ -49,13 +60,70 @@ void init_usart(void)
     HAL_UART_Receive_IT(&huart_bridge, &rx_byte, 1);
 }
 
+//
+void ub_init_os(void)
+{
+    osMessageQDef(ub_queue, 20, uint8_t);
+    mb_rx_queue = osMessageCreate(osMessageQ(ub_queue), NULL);
+    
+    osThreadDef(UB, vUartBridge, osPriorityNormal, 0, 2*128);
+    ub_task_handle = osThreadCreate(osThread(UB), NULL);
+}
+
+//
+void vUartBridge(void const *params)
+{
+    osEvent event;
+    uint8_t cnt = 0;
+    bool begin = false;
+    uint32_t value = 0;
+    
+    for (;;)
+    {
+        event = osMessageGet(mb_rx_queue, 1000);
+       
+        if (event.status == osEventMessage) {
+            printf("%c", event.value.v);
+            if (event.value.v == '{') {
+                begin = true;
+                continue;
+            }
+            if (begin)
+                tx_buf[cnt++] = event.value.v;
+            
+            if ((event.value.v == '\n') && (begin)) {
+                value = atoi(tx_buf);
+                begin = false;
+                cnt = 0;
+                printf("Value: %u\r\n", value);
+                
+            }
+            
+            if (cnt == RX_BUF_SIZE) {
+                cnt = 0;
+            }
+            
+            
+            
+        }
+    }
+}
+
 //
 void usart_bridge_rx_cb(void)
 {
-    printf("%d", rx_byte);
+    //rx_byte_cnt++;
+    //printf("%c", rx_byte);
+    osMessagePut(mb_rx_queue, rx_byte, 0);
     HAL_UART_Receive_IT(&huart_bridge, &rx_byte, 1);
 }
 
+//
+void usart_error_cb(void)
+{
+    error_cnt++;
+    printf("error cb\r\n");
+}
 
 extern "C" {
   

+ 3 - 0
desk/modules/uart_bridge/uart_bridge.h

@@ -4,6 +4,9 @@
 //
 void init_usart(void);
 
+//
+void ub_init_os(void);
+
 //
 void usart_bridge_rx_cb(void);
 

+ 16 - 0
desk/user/hal_callback.cpp

@@ -25,6 +25,22 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
     }
 }
 
+void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
+{
+    switch((uint32_t)huart->Instance)
+    {
+        case USART3_BASE :  // HAL USART Terminal
+            HAL_UART_RxCpltCallbackTerminal();
+        break;
+
+        case USART2_BASE :
+            usart_bridge_rx_cb();
+        break;
+        
+        default : break;
+    }
+}
+
 //__weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
 
 // -------------------------------------------------------------------------- //

+ 11 - 8
desk/user/main.cpp

@@ -44,8 +44,8 @@ int main()
 //
 void StartupTask(void const *argument)
 {
-    //MX_USB_Device_Init();
-
+    MX_GPIO_Init();
+      
     // Терминал
     sbsTerminal.configure();
             
@@ -59,16 +59,19 @@ void StartupTask(void const *argument)
     //
     init_encoder();
     
-    // Порт для связи с роботом
+    // Порт для связи с роботом и обработка данных
+    ub_init_os();
     init_usart();
     
     // Дисплей
     init_oled();
-    
-    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
-    osDelay(100);
-    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
-    
+#if 0    
+    for (;;) {
+        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
+        osDelay(200);
+        printf("hello world\r\n");
+    }
+#endif    
     vTaskDelete(NULL);
 }
 

+ 1 - 1
project/ewarm/desk/desk.ewp

@@ -103,7 +103,7 @@
                 </option>
                 <option>
                     <name>OGUseCmsis</name>
-                    <state>0</state>
+                    <state>1</state>
                 </option>
                 <option>
                     <name>OGUseCmsisDspLib</name>

File diff ditekan karena terlalu besar
+ 2 - 2
project/ewarm/settings/tuber.wsdt


+ 47 - 5
robot/modules/sc60224/encoder.cpp

@@ -20,19 +20,19 @@ void init_encoder(void)
     htim1.Init.Period = 65535;
     htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
     htim1.Init.RepetitionCounter = 0;
-    htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+    htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; //TIM_AUTORELOAD_PRELOAD_ENABLE;
     
     sConfig.EncoderMode = TIM_ENCODERMODE_TI12;
     
     sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
     sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
     sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
-    sConfig.IC1Filter = 100;
+    sConfig.IC1Filter = 0;
     
     sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
     sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
     sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
-    sConfig.IC2Filter = 100;
+    sConfig.IC2Filter = 0;
     
     HAL_TIM_Encoder_Init(&htim1, &sConfig);
     
@@ -45,6 +45,7 @@ void init_encoder(void)
     HAL_NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 6, 0);
     HAL_NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
     
+    //HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL);
     HAL_TIM_Encoder_Start_IT(&htim1, TIM_CHANNEL_ALL);
 }
 
@@ -53,24 +54,65 @@ void init_gpio_encoder(void)
 {
     GPIO_InitTypeDef GPIO_InitStruct = {0};
     
+    __HAL_RCC_GPIOA_CLK_ENABLE();
     __HAL_RCC_GPIOB_CLK_ENABLE();
     
+    GPIO_InitStruct.Pin = GPIO_PIN_8;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+    GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = GPIO_PIN_3;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
+    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+    
+#if 0    
     GPIO_InitStruct.Pin = GPIO_PIN_0;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_PULLUP;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-    GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
+    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; //GPIO_AF2_TIM1;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
     
     GPIO_InitStruct.Pin = GPIO_PIN_3;
     GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+#endif    
 }
 
 
 extern "C" {
-void TIM2_IRQHandler(void)
+void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
+{
+    HAL_TIM_IRQHandler(&htim1);
+    
+#if 0  
+    if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
+    {
+        TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
+        
+        
+        //encDir = (TIM1->CR1 & TIM_CR1_DIR ? true : false);
+
+#if 0        
+        if (!encInit)
+            return;
+        
+        xSemaphoreGiveFromISR(semphEncoder, &xHigherPriorityTaskWoken);
+#endif        
+    }
+#endif    
+    //HAL_TIM_IRQHandler(&htim1);
+}
+
+void TIM1_CC_IRQHandler(void)
 {
     HAL_TIM_IRQHandler(&htim1);
 }
+
 }

+ 53 - 6
robot/modules/uart_bridge/uart_bridge.cpp

@@ -1,11 +1,17 @@
 #include "stm32g0xx_hal.h"
 #include "uart_bridge.h"
 #include "uart_bridge_cfg.h"
+#include <stdio.h>
+#include <string.h>
 
+#define TX_BUF_SIZE     20 
 
 UART_HandleTypeDef huart_bridge;
+//DMA_HandleTypeDef hdma_ub_rx;
+DMA_HandleTypeDef hdma_ub_tx;
 
-static uint8_t rx_byte;
+//static uint8_t rx_byte;
+static char tx_buf[TX_BUF_SIZE];
 
 
 void init_usart(void)
@@ -29,28 +35,62 @@ void init_usart(void)
     huart_bridge.Init.Parity        = UART_PARITY_NONE;
     huart_bridge.Init.Mode          = UART_MODE_TX_RX;
     huart_bridge.Init.HwFlowCtl     = UART_HWCONTROL_NONE;
-    huart_bridge.Init.OverSampling  = UART_OVERSAMPLING_8;
+    huart_bridge.Init.OverSampling  = UART_OVERSAMPLING_16;
     huart_bridge.Init.OneBitSampling= UART_ONE_BIT_SAMPLE_DISABLE;
     HAL_UART_Init(&huart_bridge);
     
     HAL_RS485Ex_Init(&huart_bridge, UART_DE_POLARITY_HIGH, 0, 0);
 
+    HAL_UARTEx_SetTxFifoThreshold(&huart_bridge, UART_TXFIFO_THRESHOLD_1_8);
+    //HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
+    HAL_UARTEx_DisableFifoMode(&huart_bridge);
+    
+    init_dma_usart();
+    
+#if 1    
     HAL_NVIC_SetPriority(USART2_IRQn, 6, 0);
     HAL_NVIC_EnableIRQ(USART2_IRQn);
-    HAL_UART_Receive_IT(&huart_bridge, &rx_byte, 1);
+    //HAL_UART_Receive_IT(&huart_bridge, &rx_byte, 1);
+#endif    
 }
 
+//
+void init_dma_usart(void)
+{
+    __HAL_RCC_DMA1_CLK_ENABLE();
+    
+    hdma_ub_tx.Instance = DMA1_Channel1;
+    hdma_ub_tx.Init.Request = DMA_REQUEST_USART2_TX;
+    hdma_ub_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+    hdma_ub_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_ub_tx.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_ub_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+    hdma_ub_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+    hdma_ub_tx.Init.Mode = DMA_NORMAL;
+    hdma_ub_tx.Init.Priority = DMA_PRIORITY_LOW;
+    HAL_DMA_Init(&hdma_ub_tx);
+    
+    __HAL_LINKDMA(&huart_bridge, hdmatx, hdma_ub_tx);
+    
+    HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 6, 0);
+    HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
+}
 
 extern "C" {
   
 void USART2_IRQHandler(void)
 {
-    HAL_UART_Receive_IT(&huart_bridge, &rx_byte, 1);
+    HAL_UART_IRQHandler(&huart_bridge);
+    
+    //HAL_UART_Receive_IT(&huart_bridge, &rx_byte, 1);
     //sbsTerminal.put_byte((char)(uart.Instance->RDR & (uint16_t)0x01FF));
 }
 
+void DMA1_Channel1_IRQHandler(void)
+{
+    HAL_DMA_IRQHandler(&hdma_ub_tx);
+}
 }
-
 
 //
 void ub_send_test_byte(void)
@@ -59,4 +99,11 @@ void ub_send_test_byte(void)
     //HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
     HAL_UART_Transmit(&huart_bridge, &byte, 1, 200);
     //huart_bridge.Instance->TDR 
-}
+}
+
+//
+void ub_send_uint(uint32_t val)
+{
+    sprintf(tx_buf, "{%u}\n", val);
+    HAL_UART_Transmit_DMA(&huart_bridge, (uint8_t *)tx_buf, strlen(tx_buf));
+}

+ 5 - 0
robot/modules/uart_bridge/uart_bridge.h

@@ -4,8 +4,13 @@
 
 void init_usart(void);
 
+//
+void init_dma_usart(void);
+
 //
 void ub_send_test_byte(void);
 
+//
+void ub_send_uint(uint32_t val);
 
 #endif // __UART_BRIDGE_H

+ 2 - 2
robot/user/main.cpp

@@ -21,8 +21,8 @@ int main()
     
     while (true)
     {
-        ub_send_test_byte();
-        HAL_Delay(50);
+        ub_send_uint(38548723);
+        HAL_Delay(1000);
     }
     
     //MX_GPIO_Init();

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini