3 ******************************************************************************
\r
5 * @brief : Main program body
\r
6 ******************************************************************************
\r
7 ** This notice applies to any and all portions of this file
\r
8 * that are not between comment pairs USER CODE BEGIN and
\r
9 * USER CODE END. Other portions of this file, whether
\r
10 * inserted by the user or by software development tools
\r
11 * are owned by their respective copyright owners.
\r
13 * COPYRIGHT(c) 2018 STMicroelectronics
\r
15 * Redistribution and use in source and binary forms, with or without modification,
\r
16 * are permitted provided that the following conditions are met:
\r
17 * 1. Redistributions of source code must retain the above copyright notice,
\r
18 * this list of conditions and the following disclaimer.
\r
19 * 2. Redistributions in binary form must reproduce the above copyright notice,
\r
20 * this list of conditions and the following disclaimer in the documentation
\r
21 * and/or other materials provided with the distribution.
\r
22 * 3. Neither the name of STMicroelectronics nor the names of its contributors
\r
23 * may be used to endorse or promote products derived from this software
\r
24 * without specific prior written permission.
\r
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
\r
27 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
\r
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
\r
29 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
\r
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
\r
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
\r
32 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
\r
33 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
\r
34 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
\r
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
37 ******************************************************************************
\r
39 /* Includes ------------------------------------------------------------------*/
\r
42 /* USER CODE BEGIN Includes */
\r
44 /* USER CODE END Includes */
\r
46 /* Private variables ---------------------------------------------------------*/
\r
48 /* USER CODE BEGIN PV */
\r
49 /* Private variables ---------------------------------------------------------*/
\r
51 /* USER CODE END PV */
\r
53 /* Private function prototypes -----------------------------------------------*/
\r
54 static void LL_Init(void);
\r
55 void SystemClock_Config(void);
\r
56 static void MX_GPIO_Init(void);
\r
57 static void MX_USART2_UART_Init(void);
\r
59 /* USER CODE BEGIN PFP */
\r
60 /* Private function prototypes -----------------------------------------------*/
\r
62 /* USER CODE END PFP */
\r
64 /* USER CODE BEGIN 0 */
\r
66 /* USER CODE END 0 */
\r
69 * @brief The application entry point.
\r
75 /* USER CODE BEGIN 1 */
\r
77 /* USER CODE END 1 */
\r
79 /* MCU Configuration----------------------------------------------------------*/
\r
81 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
\r
84 /* USER CODE BEGIN Init */
\r
86 /* USER CODE END Init */
\r
88 /* Configure the system clock */
\r
89 SystemClock_Config();
\r
91 /* USER CODE BEGIN SysInit */
\r
93 /* USER CODE END SysInit */
\r
95 /* Initialize all configured peripherals */
\r
97 MX_USART2_UART_Init();
\r
98 /* USER CODE BEGIN 2 */
\r
100 /* USER CODE END 2 */
\r
102 /* Infinite loop */
\r
103 /* USER CODE BEGIN WHILE */
\r
107 /* USER CODE END WHILE */
\r
109 /* USER CODE BEGIN 3 */
\r
112 /* USER CODE END 3 */
\r
116 static void LL_Init(void)
\r
120 LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SYSCFG);
\r
122 /* System interrupt init*/
\r
123 /* SVC_IRQn interrupt configuration */
\r
124 NVIC_SetPriority(SVC_IRQn, 0);
\r
125 /* PendSV_IRQn interrupt configuration */
\r
126 NVIC_SetPriority(PendSV_IRQn, 0);
\r
127 /* SysTick_IRQn interrupt configuration */
\r
128 NVIC_SetPriority(SysTick_IRQn, 0);
\r
133 * @brief System Clock Configuration
\r
136 void SystemClock_Config(void)
\r
139 LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);
\r
141 if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)
\r
145 LL_RCC_HSI_Enable();
\r
147 /* Wait till HSI is ready */
\r
148 while(LL_RCC_HSI_IsReady() != 1)
\r
152 LL_RCC_HSI_SetCalibTrimming(16);
\r
154 LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI_DIV_2, LL_RCC_PLL_MUL_8);
\r
156 LL_RCC_PLL_Enable();
\r
158 /* Wait till PLL is ready */
\r
159 while(LL_RCC_PLL_IsReady() != 1)
\r
163 LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
\r
165 LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
\r
167 LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
\r
169 /* Wait till System clock is ready */
\r
170 while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
\r
174 LL_Init1msTick(32000000);
\r
176 LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);
\r
178 LL_SetSystemCoreClock(32000000);
\r
180 /* SysTick_IRQn interrupt configuration */
\r
181 NVIC_SetPriority(SysTick_IRQn, 0);
\r
184 /* USART2 init function */
\r
185 static void MX_USART2_UART_Init(void)
\r
188 LL_USART_InitTypeDef USART_InitStruct;
\r
190 LL_GPIO_InitTypeDef GPIO_InitStruct;
\r
192 /* Peripheral clock enable */
\r
193 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
\r
195 /**USART2 GPIO Configuration
\r
196 PA2 ------> USART2_TX
\r
197 PA3 ------> USART2_RX
\r
199 GPIO_InitStruct.Pin = USART_TX_Pin;
\r
200 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
\r
201 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
\r
202 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
\r
203 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
\r
204 GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
\r
205 LL_GPIO_Init(USART_TX_GPIO_Port, &GPIO_InitStruct);
\r
207 GPIO_InitStruct.Pin = USART_RX_Pin;
\r
208 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
\r
209 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
\r
210 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
\r
211 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
\r
212 GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
\r
213 LL_GPIO_Init(USART_RX_GPIO_Port, &GPIO_InitStruct);
\r
215 USART_InitStruct.BaudRate = 38400;
\r
216 USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
\r
217 USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
\r
218 USART_InitStruct.Parity = LL_USART_PARITY_NONE;
\r
219 USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
\r
220 USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
\r
221 USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
\r
222 LL_USART_Init(USART2, &USART_InitStruct);
\r
224 LL_USART_DisableIT_CTS(USART2);
\r
226 LL_USART_DisableOverrunDetect(USART2);
\r
228 LL_USART_ConfigAsyncMode(USART2);
\r
230 LL_USART_Enable(USART2);
\r
234 /** Configure pins as
\r
241 static void MX_GPIO_Init(void)
\r
244 LL_EXTI_InitTypeDef EXTI_InitStruct;
\r
245 LL_GPIO_InitTypeDef GPIO_InitStruct;
\r
247 /* GPIO Ports Clock Enable */
\r
248 LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);
\r
249 LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOF);
\r
250 LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
\r
253 LL_GPIO_ResetOutputPin(LD2_GPIO_Port, LD2_Pin);
\r
256 LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTC, LL_SYSCFG_EXTI_LINE13);
\r
259 LL_GPIO_SetPinPull(B1_GPIO_Port, B1_Pin, LL_GPIO_PULL_NO);
\r
262 LL_GPIO_SetPinMode(B1_GPIO_Port, B1_Pin, LL_GPIO_MODE_INPUT);
\r
265 EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_13;
\r
266 EXTI_InitStruct.LineCommand = ENABLE;
\r
267 EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
\r
268 EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
\r
269 LL_EXTI_Init(&EXTI_InitStruct);
\r
272 GPIO_InitStruct.Pin = LD2_Pin;
\r
273 GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
\r
274 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
\r
275 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
\r
276 GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
\r
277 LL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
\r
281 /* USER CODE BEGIN 4 */
\r
283 /* USER CODE END 4 */
\r
286 * @brief This function is executed in case of error occurrence.
\r
287 * @param file: The file name as string.
\r
288 * @param line: The line in file as a number.
\r
291 void _Error_Handler(char *file, int line)
\r
293 /* USER CODE BEGIN Error_Handler_Debug */
\r
294 /* User can add his own implementation to report the HAL error return state */
\r
298 /* USER CODE END Error_Handler_Debug */
\r
301 #ifdef USE_FULL_ASSERT
\r
303 * @brief Reports the name of the source file and the source line number
\r
304 * where the assert_param error has occurred.
\r
305 * @param file: pointer to the source file name
\r
306 * @param line: assert_param error line source number
\r
309 void assert_failed(uint8_t* file, uint32_t line)
\r
311 /* USER CODE BEGIN 6 */
\r
312 /* User can add his own implementation to report the file name and line number,
\r
313 tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
\r
314 /* USER CODE END 6 */
\r
316 #endif /* USE_FULL_ASSERT */
\r
326 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
\r