]> mj.ucw.cz Git - home-hw.git/blobdiff - Src/main.c
UnDOSify
[home-hw.git] / Src / main.c
index 927aabf447c53550ff68d464e2854fbe8aeec0a2..02220adda978003e7bc1dd0548c9177cb37f073a 100644 (file)
-\r
-/**\r
-  ******************************************************************************\r
-  * @file           : main.c\r
-  * @brief          : Main program body\r
-  ******************************************************************************\r
-  ** This notice applies to any and all portions of this file\r
-  * that are not between comment pairs USER CODE BEGIN and\r
-  * USER CODE END. Other portions of this file, whether \r
-  * inserted by the user or by software development tools\r
-  * are owned by their respective copyright owners.\r
-  *\r
-  * COPYRIGHT(c) 2018 STMicroelectronics\r
-  *\r
-  * Redistribution and use in source and binary forms, with or without modification,\r
-  * are permitted provided that the following conditions are met:\r
-  *   1. Redistributions of source code must retain the above copyright notice,\r
-  *      this list of conditions and the following disclaimer.\r
-  *   2. Redistributions in binary form must reproduce the above copyright notice,\r
-  *      this list of conditions and the following disclaimer in the documentation\r
-  *      and/or other materials provided with the distribution.\r
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
-  *      may be used to endorse or promote products derived from this software\r
-  *      without specific prior written permission.\r
-  *\r
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-  *\r
-  ******************************************************************************\r
-  */\r
-/* Includes ------------------------------------------------------------------*/\r
-#include "main.h"\r
-\r
-/* USER CODE BEGIN Includes */\r
-\r
-/* USER CODE END Includes */\r
-\r
-/* Private variables ---------------------------------------------------------*/\r
-\r
-/* USER CODE BEGIN PV */\r
-/* Private variables ---------------------------------------------------------*/\r
-\r
-/* USER CODE END PV */\r
-\r
-/* Private function prototypes -----------------------------------------------*/\r
-static void LL_Init(void);\r
-void SystemClock_Config(void);\r
-static void MX_GPIO_Init(void);\r
-static void MX_USART2_UART_Init(void);\r
-\r
-/* USER CODE BEGIN PFP */\r
-/* Private function prototypes -----------------------------------------------*/\r
-\r
-/* USER CODE END PFP */\r
-\r
-/* USER CODE BEGIN 0 */\r
-\r
-/* USER CODE END 0 */\r
-\r
-/**\r
-  * @brief  The application entry point.\r
-  *\r
-  * @retval None\r
-  */\r
-int main(void)\r
-{\r
-  /* USER CODE BEGIN 1 */\r
-\r
-  /* USER CODE END 1 */\r
-\r
-  /* MCU Configuration----------------------------------------------------------*/\r
-\r
-  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */\r
-  LL_Init();\r
-\r
-  /* USER CODE BEGIN Init */\r
-\r
-  /* USER CODE END Init */\r
-\r
-  /* Configure the system clock */\r
-  SystemClock_Config();\r
-\r
-  /* USER CODE BEGIN SysInit */\r
-\r
-  /* USER CODE END SysInit */\r
-\r
-  /* Initialize all configured peripherals */\r
-  MX_GPIO_Init();\r
-  MX_USART2_UART_Init();\r
-  /* USER CODE BEGIN 2 */\r
-\r
-  /* USER CODE END 2 */\r
-\r
-  /* Infinite loop */\r
-  /* USER CODE BEGIN WHILE */\r
-  while (1)\r
-  {\r
-\r
-  /* USER CODE END WHILE */\r
-\r
-  /* USER CODE BEGIN 3 */\r
-\r
-  }\r
-  /* USER CODE END 3 */\r
-\r
-}\r
-\r
-static void LL_Init(void)\r
-{\r
-  \r
-\r
-  LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SYSCFG);\r
-\r
-  /* System interrupt init*/\r
-  /* SVC_IRQn interrupt configuration */\r
-  NVIC_SetPriority(SVC_IRQn, 0);\r
-  /* PendSV_IRQn interrupt configuration */\r
-  NVIC_SetPriority(PendSV_IRQn, 0);\r
-  /* SysTick_IRQn interrupt configuration */\r
-  NVIC_SetPriority(SysTick_IRQn, 0);\r
-\r
-}\r
-\r
-/**\r
-  * @brief System Clock Configuration\r
-  * @retval None\r
-  */\r
-void SystemClock_Config(void)\r
-{\r
-\r
-  LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);\r
-\r
-  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)\r
-  {\r
-  Error_Handler();  \r
-  }\r
-  LL_RCC_HSI_Enable();\r
-\r
-   /* Wait till HSI is ready */\r
-  while(LL_RCC_HSI_IsReady() != 1)\r
-  {\r
-    \r
-  }\r
-  LL_RCC_HSI_SetCalibTrimming(16);\r
-\r
-  LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI_DIV_2, LL_RCC_PLL_MUL_8);\r
-\r
-  LL_RCC_PLL_Enable();\r
-\r
-   /* Wait till PLL is ready */\r
-  while(LL_RCC_PLL_IsReady() != 1)\r
-  {\r
-    \r
-  }\r
-  LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);\r
-\r
-  LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);\r
-\r
-  LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);\r
-\r
-   /* Wait till System clock is ready */\r
-  while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)\r
-  {\r
-  \r
-  }\r
-  LL_Init1msTick(32000000);\r
-\r
-  LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);\r
-\r
-  LL_SetSystemCoreClock(32000000);\r
-\r
-  /* SysTick_IRQn interrupt configuration */\r
-  NVIC_SetPriority(SysTick_IRQn, 0);\r
-}\r
-\r
-/* USART2 init function */\r
-static void MX_USART2_UART_Init(void)\r
-{\r
-\r
-  LL_USART_InitTypeDef USART_InitStruct;\r
-\r
-  LL_GPIO_InitTypeDef GPIO_InitStruct;\r
-\r
-  /* Peripheral clock enable */\r
-  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);\r
-  \r
-  /**USART2 GPIO Configuration  \r
-  PA2   ------> USART2_TX\r
-  PA3   ------> USART2_RX \r
-  */\r
-  GPIO_InitStruct.Pin = USART_TX_Pin;\r
-  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;\r
-  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;\r
-  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;\r
-  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;\r
-  GPIO_InitStruct.Alternate = LL_GPIO_AF_1;\r
-  LL_GPIO_Init(USART_TX_GPIO_Port, &GPIO_InitStruct);\r
-\r
-  GPIO_InitStruct.Pin = USART_RX_Pin;\r
-  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;\r
-  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;\r
-  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;\r
-  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;\r
-  GPIO_InitStruct.Alternate = LL_GPIO_AF_1;\r
-  LL_GPIO_Init(USART_RX_GPIO_Port, &GPIO_InitStruct);\r
-\r
-  USART_InitStruct.BaudRate = 38400;\r
-  USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;\r
-  USART_InitStruct.StopBits = LL_USART_STOPBITS_1;\r
-  USART_InitStruct.Parity = LL_USART_PARITY_NONE;\r
-  USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;\r
-  USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;\r
-  USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;\r
-  LL_USART_Init(USART2, &USART_InitStruct);\r
-\r
-  LL_USART_DisableIT_CTS(USART2);\r
-\r
-  LL_USART_DisableOverrunDetect(USART2);\r
-\r
-  LL_USART_ConfigAsyncMode(USART2);\r
-\r
-  LL_USART_Enable(USART2);\r
-\r
-}\r
-\r
-/** Configure pins as \r
-        * Analog \r
-        * Input \r
-        * Output\r
-        * EVENT_OUT\r
-        * EXTI\r
-*/\r
-static void MX_GPIO_Init(void)\r
-{\r
-\r
-  LL_EXTI_InitTypeDef EXTI_InitStruct;\r
-  LL_GPIO_InitTypeDef GPIO_InitStruct;\r
-\r
-  /* GPIO Ports Clock Enable */\r
-  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);\r
-  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOF);\r
-  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);\r
-\r
-  /**/\r
-  LL_GPIO_ResetOutputPin(LD2_GPIO_Port, LD2_Pin);\r
-\r
-  /**/\r
-  LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTC, LL_SYSCFG_EXTI_LINE13);\r
-\r
-  /**/\r
-  LL_GPIO_SetPinPull(B1_GPIO_Port, B1_Pin, LL_GPIO_PULL_NO);\r
-\r
-  /**/\r
-  LL_GPIO_SetPinMode(B1_GPIO_Port, B1_Pin, LL_GPIO_MODE_INPUT);\r
-\r
-  /**/\r
-  EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_13;\r
-  EXTI_InitStruct.LineCommand = ENABLE;\r
-  EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;\r
-  EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;\r
-  LL_EXTI_Init(&EXTI_InitStruct);\r
-\r
-  /**/\r
-  GPIO_InitStruct.Pin = LD2_Pin;\r
-  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;\r
-  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;\r
-  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;\r
-  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;\r
-  LL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);\r
-\r
-}\r
-\r
-/* USER CODE BEGIN 4 */\r
-\r
-/* USER CODE END 4 */\r
-\r
-/**\r
-  * @brief  This function is executed in case of error occurrence.\r
-  * @param  file: The file name as string.\r
-  * @param  line: The line in file as a number.\r
-  * @retval None\r
-  */\r
-void _Error_Handler(char *file, int line)\r
-{\r
-  /* USER CODE BEGIN Error_Handler_Debug */\r
-  /* User can add his own implementation to report the HAL error return state */\r
-  while(1)\r
-  {\r
-  }\r
-  /* USER CODE END Error_Handler_Debug */\r
-}\r
-\r
-#ifdef  USE_FULL_ASSERT\r
-/**\r
-  * @brief  Reports the name of the source file and the source line number\r
-  *         where the assert_param error has occurred.\r
-  * @param  file: pointer to the source file name\r
-  * @param  line: assert_param error line source number\r
-  * @retval None\r
-  */\r
-void assert_failed(uint8_t* file, uint32_t line)\r
-{ \r
-  /* USER CODE BEGIN 6 */\r
-  /* User can add his own implementation to report the file name and line number,\r
-     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */\r
-  /* USER CODE END 6 */\r
-}\r
-#endif /* USE_FULL_ASSERT */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r
+
+/**
+  ******************************************************************************
+  * @file           : main.c
+  * @brief          : Main program body
+  ******************************************************************************
+  ** This notice applies to any and all portions of this file
+  * that are not between comment pairs USER CODE BEGIN and
+  * USER CODE END. Other portions of this file, whether 
+  * inserted by the user or by software development tools
+  * are owned by their respective copyright owners.
+  *
+  * COPYRIGHT(c) 2018 STMicroelectronics
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Private variables ---------------------------------------------------------*/
+
+/* USER CODE BEGIN PV */
+/* Private variables ---------------------------------------------------------*/
+
+/* USER CODE END PV */
+
+/* Private function prototypes -----------------------------------------------*/
+static void LL_Init(void);
+void SystemClock_Config(void);
+static void MX_GPIO_Init(void);
+static void MX_USART2_UART_Init(void);
+
+/* USER CODE BEGIN PFP */
+/* Private function prototypes -----------------------------------------------*/
+
+/* USER CODE END PFP */
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+/**
+  * @brief  The application entry point.
+  *
+  * @retval None
+  */
+int main(void)
+{
+  /* USER CODE BEGIN 1 */
+
+  /* USER CODE END 1 */
+
+  /* MCU Configuration----------------------------------------------------------*/
+
+  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+  LL_Init();
+
+  /* USER CODE BEGIN Init */
+
+  /* USER CODE END Init */
+
+  /* Configure the system clock */
+  SystemClock_Config();
+
+  /* USER CODE BEGIN SysInit */
+
+  /* USER CODE END SysInit */
+
+  /* Initialize all configured peripherals */
+  MX_GPIO_Init();
+  MX_USART2_UART_Init();
+  /* USER CODE BEGIN 2 */
+
+  /* USER CODE END 2 */
+
+  /* Infinite loop */
+  /* USER CODE BEGIN WHILE */
+  while (1)
+  {
+
+  /* USER CODE END WHILE */
+
+  /* USER CODE BEGIN 3 */
+
+  }
+  /* USER CODE END 3 */
+
+}
+
+static void LL_Init(void)
+{
+  
+
+  LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SYSCFG);
+
+  /* System interrupt init*/
+  /* SVC_IRQn interrupt configuration */
+  NVIC_SetPriority(SVC_IRQn, 0);
+  /* PendSV_IRQn interrupt configuration */
+  NVIC_SetPriority(PendSV_IRQn, 0);
+  /* SysTick_IRQn interrupt configuration */
+  NVIC_SetPriority(SysTick_IRQn, 0);
+
+}
+
+/**
+  * @brief System Clock Configuration
+  * @retval None
+  */
+void SystemClock_Config(void)
+{
+
+  LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);
+
+  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)
+  {
+  Error_Handler();  
+  }
+  LL_RCC_HSI_Enable();
+
+   /* Wait till HSI is ready */
+  while(LL_RCC_HSI_IsReady() != 1)
+  {
+    
+  }
+  LL_RCC_HSI_SetCalibTrimming(16);
+
+  LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI_DIV_2, LL_RCC_PLL_MUL_8);
+
+  LL_RCC_PLL_Enable();
+
+   /* Wait till PLL is ready */
+  while(LL_RCC_PLL_IsReady() != 1)
+  {
+    
+  }
+  LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
+
+  LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
+
+  LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
+
+   /* Wait till System clock is ready */
+  while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
+  {
+  
+  }
+  LL_Init1msTick(32000000);
+
+  LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);
+
+  LL_SetSystemCoreClock(32000000);
+
+  /* SysTick_IRQn interrupt configuration */
+  NVIC_SetPriority(SysTick_IRQn, 0);
+}
+
+/* USART2 init function */
+static void MX_USART2_UART_Init(void)
+{
+
+  LL_USART_InitTypeDef USART_InitStruct;
+
+  LL_GPIO_InitTypeDef GPIO_InitStruct;
+
+  /* Peripheral clock enable */
+  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
+  
+  /**USART2 GPIO Configuration  
+  PA2   ------> USART2_TX
+  PA3   ------> USART2_RX 
+  */
+  GPIO_InitStruct.Pin = USART_TX_Pin;
+  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+  GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
+  LL_GPIO_Init(USART_TX_GPIO_Port, &GPIO_InitStruct);
+
+  GPIO_InitStruct.Pin = USART_RX_Pin;
+  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+  GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
+  LL_GPIO_Init(USART_RX_GPIO_Port, &GPIO_InitStruct);
+
+  USART_InitStruct.BaudRate = 38400;
+  USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
+  USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
+  USART_InitStruct.Parity = LL_USART_PARITY_NONE;
+  USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
+  USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
+  USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
+  LL_USART_Init(USART2, &USART_InitStruct);
+
+  LL_USART_DisableIT_CTS(USART2);
+
+  LL_USART_DisableOverrunDetect(USART2);
+
+  LL_USART_ConfigAsyncMode(USART2);
+
+  LL_USART_Enable(USART2);
+
+}
+
+/** Configure pins as 
+        * Analog 
+        * Input 
+        * Output
+        * EVENT_OUT
+        * EXTI
+*/
+static void MX_GPIO_Init(void)
+{
+
+  LL_EXTI_InitTypeDef EXTI_InitStruct;
+  LL_GPIO_InitTypeDef GPIO_InitStruct;
+
+  /* GPIO Ports Clock Enable */
+  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);
+  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOF);
+  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
+
+  /**/
+  LL_GPIO_ResetOutputPin(LD2_GPIO_Port, LD2_Pin);
+
+  /**/
+  LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTC, LL_SYSCFG_EXTI_LINE13);
+
+  /**/
+  LL_GPIO_SetPinPull(B1_GPIO_Port, B1_Pin, LL_GPIO_PULL_NO);
+
+  /**/
+  LL_GPIO_SetPinMode(B1_GPIO_Port, B1_Pin, LL_GPIO_MODE_INPUT);
+
+  /**/
+  EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_13;
+  EXTI_InitStruct.LineCommand = ENABLE;
+  EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
+  EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
+  LL_EXTI_Init(&EXTI_InitStruct);
+
+  /**/
+  GPIO_InitStruct.Pin = LD2_Pin;
+  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
+  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+  LL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
+
+}
+
+/* USER CODE BEGIN 4 */
+
+/* USER CODE END 4 */
+
+/**
+  * @brief  This function is executed in case of error occurrence.
+  * @param  file: The file name as string.
+  * @param  line: The line in file as a number.
+  * @retval None
+  */
+void _Error_Handler(char *file, int line)
+{
+  /* USER CODE BEGIN Error_Handler_Debug */
+  /* User can add his own implementation to report the HAL error return state */
+  while(1)
+  {
+  }
+  /* USER CODE END Error_Handler_Debug */
+}
+
+#ifdef  USE_FULL_ASSERT
+/**
+  * @brief  Reports the name of the source file and the source line number
+  *         where the assert_param error has occurred.
+  * @param  file: pointer to the source file name
+  * @param  line: assert_param error line source number
+  * @retval None
+  */
+void assert_failed(uint8_t* file, uint32_t line)
+{ 
+  /* USER CODE BEGIN 6 */
+  /* User can add his own implementation to report the file name and line number,
+     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+  /* USER CODE END 6 */
+}
+#endif /* USE_FULL_ASSERT */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/