]> mj.ucw.cz Git - home-hw.git/blob - Src/main.c
927aabf447c53550ff68d464e2854fbe8aeec0a2
[home-hw.git] / Src / main.c
1 \r
2 /**\r
3   ******************************************************************************\r
4   * @file           : main.c\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
12   *\r
13   * COPYRIGHT(c) 2018 STMicroelectronics\r
14   *\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
25   *\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
36   *\r
37   ******************************************************************************\r
38   */\r
39 /* Includes ------------------------------------------------------------------*/\r
40 #include "main.h"\r
41 \r
42 /* USER CODE BEGIN Includes */\r
43 \r
44 /* USER CODE END Includes */\r
45 \r
46 /* Private variables ---------------------------------------------------------*/\r
47 \r
48 /* USER CODE BEGIN PV */\r
49 /* Private variables ---------------------------------------------------------*/\r
50 \r
51 /* USER CODE END PV */\r
52 \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
58 \r
59 /* USER CODE BEGIN PFP */\r
60 /* Private function prototypes -----------------------------------------------*/\r
61 \r
62 /* USER CODE END PFP */\r
63 \r
64 /* USER CODE BEGIN 0 */\r
65 \r
66 /* USER CODE END 0 */\r
67 \r
68 /**\r
69   * @brief  The application entry point.\r
70   *\r
71   * @retval None\r
72   */\r
73 int main(void)\r
74 {\r
75   /* USER CODE BEGIN 1 */\r
76 \r
77   /* USER CODE END 1 */\r
78 \r
79   /* MCU Configuration----------------------------------------------------------*/\r
80 \r
81   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */\r
82   LL_Init();\r
83 \r
84   /* USER CODE BEGIN Init */\r
85 \r
86   /* USER CODE END Init */\r
87 \r
88   /* Configure the system clock */\r
89   SystemClock_Config();\r
90 \r
91   /* USER CODE BEGIN SysInit */\r
92 \r
93   /* USER CODE END SysInit */\r
94 \r
95   /* Initialize all configured peripherals */\r
96   MX_GPIO_Init();\r
97   MX_USART2_UART_Init();\r
98   /* USER CODE BEGIN 2 */\r
99 \r
100   /* USER CODE END 2 */\r
101 \r
102   /* Infinite loop */\r
103   /* USER CODE BEGIN WHILE */\r
104   while (1)\r
105   {\r
106 \r
107   /* USER CODE END WHILE */\r
108 \r
109   /* USER CODE BEGIN 3 */\r
110 \r
111   }\r
112   /* USER CODE END 3 */\r
113 \r
114 }\r
115 \r
116 static void LL_Init(void)\r
117 {\r
118   \r
119 \r
120   LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SYSCFG);\r
121 \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
129 \r
130 }\r
131 \r
132 /**\r
133   * @brief System Clock Configuration\r
134   * @retval None\r
135   */\r
136 void SystemClock_Config(void)\r
137 {\r
138 \r
139   LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);\r
140 \r
141   if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)\r
142   {\r
143   Error_Handler();  \r
144   }\r
145   LL_RCC_HSI_Enable();\r
146 \r
147    /* Wait till HSI is ready */\r
148   while(LL_RCC_HSI_IsReady() != 1)\r
149   {\r
150     \r
151   }\r
152   LL_RCC_HSI_SetCalibTrimming(16);\r
153 \r
154   LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI_DIV_2, LL_RCC_PLL_MUL_8);\r
155 \r
156   LL_RCC_PLL_Enable();\r
157 \r
158    /* Wait till PLL is ready */\r
159   while(LL_RCC_PLL_IsReady() != 1)\r
160   {\r
161     \r
162   }\r
163   LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);\r
164 \r
165   LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);\r
166 \r
167   LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);\r
168 \r
169    /* Wait till System clock is ready */\r
170   while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)\r
171   {\r
172   \r
173   }\r
174   LL_Init1msTick(32000000);\r
175 \r
176   LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);\r
177 \r
178   LL_SetSystemCoreClock(32000000);\r
179 \r
180   /* SysTick_IRQn interrupt configuration */\r
181   NVIC_SetPriority(SysTick_IRQn, 0);\r
182 }\r
183 \r
184 /* USART2 init function */\r
185 static void MX_USART2_UART_Init(void)\r
186 {\r
187 \r
188   LL_USART_InitTypeDef USART_InitStruct;\r
189 \r
190   LL_GPIO_InitTypeDef GPIO_InitStruct;\r
191 \r
192   /* Peripheral clock enable */\r
193   LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);\r
194   \r
195   /**USART2 GPIO Configuration  \r
196   PA2   ------> USART2_TX\r
197   PA3   ------> USART2_RX \r
198   */\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
206 \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
214 \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
223 \r
224   LL_USART_DisableIT_CTS(USART2);\r
225 \r
226   LL_USART_DisableOverrunDetect(USART2);\r
227 \r
228   LL_USART_ConfigAsyncMode(USART2);\r
229 \r
230   LL_USART_Enable(USART2);\r
231 \r
232 }\r
233 \r
234 /** Configure pins as \r
235         * Analog \r
236         * Input \r
237         * Output\r
238         * EVENT_OUT\r
239         * EXTI\r
240 */\r
241 static void MX_GPIO_Init(void)\r
242 {\r
243 \r
244   LL_EXTI_InitTypeDef EXTI_InitStruct;\r
245   LL_GPIO_InitTypeDef GPIO_InitStruct;\r
246 \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
251 \r
252   /**/\r
253   LL_GPIO_ResetOutputPin(LD2_GPIO_Port, LD2_Pin);\r
254 \r
255   /**/\r
256   LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTC, LL_SYSCFG_EXTI_LINE13);\r
257 \r
258   /**/\r
259   LL_GPIO_SetPinPull(B1_GPIO_Port, B1_Pin, LL_GPIO_PULL_NO);\r
260 \r
261   /**/\r
262   LL_GPIO_SetPinMode(B1_GPIO_Port, B1_Pin, LL_GPIO_MODE_INPUT);\r
263 \r
264   /**/\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
270 \r
271   /**/\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
278 \r
279 }\r
280 \r
281 /* USER CODE BEGIN 4 */\r
282 \r
283 /* USER CODE END 4 */\r
284 \r
285 /**\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
289   * @retval None\r
290   */\r
291 void _Error_Handler(char *file, int line)\r
292 {\r
293   /* USER CODE BEGIN Error_Handler_Debug */\r
294   /* User can add his own implementation to report the HAL error return state */\r
295   while(1)\r
296   {\r
297   }\r
298   /* USER CODE END Error_Handler_Debug */\r
299 }\r
300 \r
301 #ifdef  USE_FULL_ASSERT\r
302 /**\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
307   * @retval None\r
308   */\r
309 void assert_failed(uint8_t* file, uint32_t line)\r
310\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
315 }\r
316 #endif /* USE_FULL_ASSERT */\r
317 \r
318 /**\r
319   * @}\r
320   */\r
321 \r
322 /**\r
323   * @}\r
324   */\r
325 \r
326 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r