-\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);
+static void MX_I2C1_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();
+ MX_I2C1_Init();
+ /* USER CODE BEGIN 2 */
+
+ run_test();
+
+ /* 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);
+
+ LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_HSI);
+
+ /* SysTick_IRQn interrupt configuration */
+ NVIC_SetPriority(SysTick_IRQn, 0);
+}
+
+/* I2C1 init function */
+static void MX_I2C1_Init(void)
+{
+
+ LL_I2C_InitTypeDef I2C_InitStruct;
+
+ LL_GPIO_InitTypeDef GPIO_InitStruct;
+
+ /**I2C1 GPIO Configuration
+ PB6 ------> I2C1_SCL
+ PB7 ------> I2C1_SDA
+ */
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
+ LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
+ LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* Peripheral clock enable */
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
+
+ /**I2C Initialization
+ */
+ I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
+ I2C_InitStruct.Timing = 0x2000090E;
+ I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
+ I2C_InitStruct.DigitalFilter = 0;
+ I2C_InitStruct.OwnAddress1 = 0;
+ I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
+ I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
+ LL_I2C_Init(I2C1, &I2C_InitStruct);
+
+ LL_I2C_EnableAutoEndMode(I2C1);
+
+ LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK);
+
+ LL_I2C_DisableOwnAddress2(I2C1);
+
+ LL_I2C_DisableGeneralCall(I2C1);
+
+ LL_I2C_EnableClockStretching(I2C1);
+
+}
+
+/* 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 = 115200;
+ 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_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
+
+ /**/
+ 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****/